torch_tensor_assign Subroutine

public subroutine torch_tensor_assign(output, input)

Uses

  • proc~~torch_tensor_assign~~UsesGraph proc~torch_tensor_assign torch_tensor_assign iso_c_binding iso_c_binding proc~torch_tensor_assign->iso_c_binding

Overloads assignment operator for tensors.

Arguments

Type IntentOptional Attributes Name
type(torch_tensor), intent(inout) :: output

Tensor to assign values to

type(torch_tensor), intent(in) :: input

Tensor whose values are to be used


Calls

proc~~torch_tensor_assign~~CallsGraph proc~torch_tensor_assign torch_tensor_assign proc~torch_tensor_empty torch_tensor_empty proc~torch_tensor_assign->proc~torch_tensor_empty proc~torch_tensor_get_device_index torch_tensor%torch_tensor_get_device_index proc~torch_tensor_assign->proc~torch_tensor_get_device_index proc~torch_tensor_get_device_type torch_tensor%torch_tensor_get_device_type proc~torch_tensor_assign->proc~torch_tensor_get_device_type proc~torch_tensor_get_dtype torch_tensor%torch_tensor_get_dtype proc~torch_tensor_assign->proc~torch_tensor_get_dtype proc~torch_tensor_get_rank torch_tensor%torch_tensor_get_rank proc~torch_tensor_assign->proc~torch_tensor_get_rank proc~torch_tensor_get_shape torch_tensor%torch_tensor_get_shape proc~torch_tensor_assign->proc~torch_tensor_get_shape proc~torch_tensor_requires_grad torch_tensor%torch_tensor_requires_grad proc~torch_tensor_assign->proc~torch_tensor_requires_grad proc~torch_tensor_get_shape->proc~torch_tensor_get_rank

Called by

proc~~torch_tensor_assign~~CalledByGraph proc~torch_tensor_assign torch_tensor_assign interface~assignment (=) assignment (=) interface~assignment (=)->proc~torch_tensor_assign

Source Code

  subroutine torch_tensor_assign(output, input)
    use, intrinsic :: iso_c_binding, only : c_associated
    type(torch_tensor), intent(in) :: input      !! Tensor whose values are to be used
    type(torch_tensor), intent(inout) :: output  !! Tensor to assign values to

    interface
      subroutine torch_tensor_assign_c(output_c, input_c) bind(c, name = 'torch_tensor_assign')
        use, intrinsic :: iso_c_binding, only : c_ptr
        implicit none
        type(c_ptr), value, intent(in) :: output_c
        type(c_ptr), value, intent(in) :: input_c
      end subroutine torch_tensor_assign_c
    end interface

    if (.not. c_associated(output%p)) then
      call torch_tensor_empty(output, input%get_rank(), input%get_shape(), input%get_dtype(), &
                              input%get_device_type(), device_index=input%get_device_index(), &
                              requires_grad=input%requires_grad())
    else if (input%get_device_type() /= output%get_device_type()) then
      write(*,*) "Error :: cannot assign tensors with different device types"
      stop 1
    end if
    call torch_tensor_assign_c(output%p, input%p)
  end subroutine torch_tensor_assign