Emit a Constant node producing an int64 tensor
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | name |
Constant node and output tensor name |
||
| integer, | intent(in) | :: | values(:) |
Constant values and tensor dimensions |
||
| integer, | intent(in) | :: | dims(:) |
Constant values and tensor dimensions |
||
| type(onnx_node_type), | intent(inout), | dimension(:) | :: | nodes |
Node accumulator array |
|
| integer, | intent(inout) | :: | num_nodes |
Current number of populated nodes |
||
| type(onnx_initialiser_type), | intent(inout), | dimension(:) | :: | inits |
Initialiser accumulator array (unused, kept for interface symmetry) |
|
| integer, | intent(inout) | :: | num_inits |
Current number of populated initialisers (unused) |
subroutine emit_constant_int64(name, values, dims, & nodes, num_nodes, inits, num_inits) !! Emit a Constant node producing an int64 tensor implicit none ! Arguments character(*), intent(in) :: name !! Constant node and output tensor name integer, intent(in) :: values(:), dims(:) !! Constant values and tensor dimensions type(onnx_node_type), intent(inout), dimension(:) :: nodes !! Node accumulator array integer, intent(inout) :: num_nodes !! Current number of populated nodes type(onnx_initialiser_type), intent(inout), dimension(:) :: inits !! Initialiser accumulator array (unused, kept for interface symmetry) integer, intent(inout) :: num_inits !! Current number of populated initialisers (unused) ! Local variables character(4096) :: attr_str !! Serialized ONNX attribute JSON for the constant payload character(256) :: raw_b64 !! Base64-encoded raw tensor data integer :: i !! Dimension loop index ! Encode int64 values as base64 call encode_int64_base64(values, raw_b64) ! Build dims string attr_str = ' "attribute": [{"name": "value", "t": {' if(size(dims) .gt. 0)then attr_str = trim(attr_str) // '"dims": [' do i = 1, size(dims) if(i .gt. 1) attr_str = trim(attr_str) // ', ' write(attr_str, '(A,"""",I0,"""")') trim(attr_str), dims(i) end do attr_str = trim(attr_str) // '], ' end if attr_str = trim(attr_str) // '"dataType": 7, "rawData": "' // & trim(raw_b64) // '"}, "type": "TENSOR"}]' num_nodes = num_nodes + 1 nodes(num_nodes)%name = trim(name) nodes(num_nodes)%op_type = 'Constant' allocate(nodes(num_nodes)%inputs(0)) allocate(nodes(num_nodes)%outputs(1)) nodes(num_nodes)%outputs(1) = trim(name) nodes(num_nodes)%attributes_json = trim(attr_str) end subroutine emit_constant_int64