classify_duvenaud_onnx_expanded_gnn Function

public function classify_duvenaud_onnx_expanded_gnn(prefix, nodes, num_nodes) result(is_duvenaud)

Return true when the expanded-ONNX node cluster for prefix is a Duvenaud message-passing layer.

Duvenaud layers contain ReduceSum, Clip, and Div nodes within their subgraph.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: prefix

Layer prefix (e.g. "node_2")

type(onnx_node_type), intent(in) :: nodes(:)

Parsed ONNX nodes

integer, intent(in) :: num_nodes

Number of valid node entries

Return Value logical

Return value: true when the cluster matches the Duvenaud pattern


Source Code

  function classify_duvenaud_onnx_expanded_gnn( &
       prefix, nodes, num_nodes) result(is_duvenaud)
    !! Return true when the expanded-ONNX node cluster
    !! for prefix is a Duvenaud message-passing layer.
    !!
    !! Duvenaud layers contain ReduceSum, Clip, and Div
    !! nodes within their subgraph.
    implicit none

    ! Arguments
    character(*), intent(in) :: prefix
    !! Layer prefix (e.g. "node_2")
    type(onnx_node_type), intent(in) :: nodes(:)
    !! Parsed ONNX nodes
    integer, intent(in) :: num_nodes
    !! Number of valid node entries

    logical :: is_duvenaud
    !! Return value: true when the cluster matches the Duvenaud pattern

    ! Local variables
    integer :: i
    character(128) :: cluster_prefix
    logical :: has_reducesum, has_clip, has_div

    has_reducesum = .false.
    has_clip = .false.
    has_div = .false.
    write(cluster_prefix, '(A,"_")') trim(prefix)

    do i = 1, num_nodes
       if(index(trim(nodes(i)%name), &
            trim(cluster_prefix)) .ne. 1) cycle
       select case(trim(nodes(i)%op_type))
       case('ReduceSum')
          has_reducesum = .true.
       case('Clip')
          has_clip = .true.
       case('Div')
          has_div = .true.
       end select
       if(has_reducesum .and. has_clip &
            .and. has_div) exit
    end do

    is_duvenaud = &
         has_reducesum .and. has_clip .and. has_div

  end function classify_duvenaud_onnx_expanded_gnn