add_gnn_layer_from_metadata Subroutine

subroutine add_gnn_layer_from_metadata(network, meta_key, meta_value, inits, num_inits, verbose_)

Create one GNN or NOP layer from metadata and append it to the network.

Arguments

Type IntentOptional Attributes Name
type(network_type), intent(inout) :: network

Network receiving the created layer

character(len=*), intent(in) :: meta_key

Metadata key/value pair describing one layer

character(len=*), intent(in) :: meta_value

Metadata key/value pair describing one layer

type(onnx_initialiser_type), intent(in) :: inits(:)

Parsed ONNX initialisers

integer, intent(in) :: num_inits

Number of initialisers and effective verbosity level

integer, intent(in) :: verbose_

Number of initialisers and effective verbosity level


Source Code

  subroutine add_gnn_layer_from_metadata(network, meta_key, meta_value, inits, &
       num_inits, verbose_)
    !! Create one GNN or NOP layer from metadata and append it to the network.
    use athena__base_layer, only: base_layer_type
    use athena__container_layer, only: list_of_onnx_meta_layer_creators
    implicit none

    ! Arguments
    type(network_type), intent(inout) :: network
    !! Network receiving the created layer
    character(*), intent(in) :: meta_key, meta_value
    !! Metadata key/value pair describing one layer
    type(onnx_initialiser_type), intent(in) :: inits(:)
    !! Parsed ONNX initialisers
    integer, intent(in) :: num_inits, verbose_
    !! Number of initialisers and effective verbosity level

    ! Local variables
    character(64) :: subtype_name
    !! Parsed subtype token from metadata payload
    integer :: i, layer_index
    !! Creator search index and selected creator slot

    call extract_gnn_subtype(meta_value, subtype_name)

    layer_index = 0
    do i = 1, size(list_of_onnx_meta_layer_creators)
       if(trim(list_of_onnx_meta_layer_creators(i)%layer_subtype) .eq. &
            trim(subtype_name))then
          layer_index = i
          exit
       end if
    end do

    if(layer_index .eq. 0)then
       if(index(trim(meta_key), 'athena_nop_') .gt. 0)then
          write(*,*) 'ERROR: Unknown NOP subtype: ', trim(subtype_name)
       else
          write(*,*) 'ERROR: Unknown GNN subtype: ', trim(subtype_name)
       end if
       return
    end if

    block
      class(base_layer_type), allocatable :: meta_layer

      meta_layer = list_of_onnx_meta_layer_creators(layer_index)%create_ptr( &
           meta_key, meta_value, inits(1:num_inits), verbose_)
      call network%add(meta_layer)
    end block

  end subroutine add_gnn_layer_from_metadata