write_json_nodes Subroutine

public subroutine write_json_nodes(unit, nodes, num_nodes)

Write nodes array to JSON

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: unit

Output unit receiving the JSON text

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

Node collection to serialise

integer, intent(in) :: num_nodes

Number of populated nodes in the collection


Source Code

  subroutine write_json_nodes(unit, nodes, num_nodes)
    !! Write nodes array to JSON
    implicit none

    ! Arguments
    integer, intent(in) :: unit
    !! Output unit receiving the JSON text
    type(onnx_node_type), intent(in), dimension(:) :: nodes
    !! Node collection to serialise
    integer, intent(in) :: num_nodes
    !! Number of populated nodes in the collection

    ! Local variables
    integer :: i, j
    !! Node and tensor index counters

    write(unit, '(A)') '    "node": ['
    do i = 1, num_nodes
       write(unit, '(A)') '      {'
       ! Write inputs
       if(allocated(nodes(i)%inputs) .and. size(nodes(i)%inputs) .gt. 0)then
          write(unit, '(A)', advance='no') '        "input": ['
          do j = 1, size(nodes(i)%inputs)
             if(j .gt. 1) write(unit, '(A)', advance='no') ', '
             write(unit, '(A,A,A)', advance='no') '"', &
                  trim(adjustl(nodes(i)%inputs(j))), '"'
          end do
          write(unit, '(A)') '],'
       end if
       ! Write outputs
       if(allocated(nodes(i)%outputs))then
          write(unit, '(A)', advance='no') '        "output": ['
          do j = 1, size(nodes(i)%outputs)
             if(j .gt. 1) write(unit, '(A)', advance='no') ', '
             write(unit, '(A,A,A)', advance='no') '"', &
                  trim(adjustl(nodes(i)%outputs(j))), '"'
          end do
          write(unit, '(A)') '],'
       end if
       ! Name
       write(unit, '(A,A,A)', advance='no') '        "name": "', &
            trim(adjustl(nodes(i)%name)), '"'
       ! OpType
       write(unit, '(A)') ','
       write(unit, '(A,A,A)', advance='no') '        "opType": "', &
            trim(adjustl(nodes(i)%op_type)), '"'
       ! Attributes
       if(len_trim(nodes(i)%attributes_json) .gt. 0)then
          write(unit, '(A)') ','
          write(unit, '(A)') trim(nodes(i)%attributes_json)
       else
          write(unit, '(A)') ''
       end if
       if(i .lt. num_nodes)then
          write(unit, '(A)') '      },'
       else
          write(unit, '(A)') '      }'
       end if
    end do
    write(unit, '(A)') '    ]'

  end subroutine write_json_nodes