1 /* 2 * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package oracle.code.onnx; 27 28 import java.io.Serializable; 29 import java.util.List; 30 31 // https://onnx.ai/onnx/api/defs.html#class-opschema 32 public record OpSchema( 33 String file, 34 int line, 35 SupportLevel support_level, 36 String doc, 37 int since_version, 38 boolean deprecated, 39 String domain, 40 String name, 41 int min_input, 42 int max_input, 43 int min_output, 44 int max_output, 45 List<Attribute> attributes, 46 List<FormalParameter> inputs, 47 List<FormalParameter> outputs, 48 List<TypeConstraintParam> type_constraints, 49 boolean has_function, 50 boolean has_context_dependent_function, 51 boolean has_data_propagation_function, 52 boolean has_type_and_shape_inference_function 53 ) implements Serializable { 54 public enum SupportLevel implements Serializable { 55 COMMON, 56 EXPERIMENTAL 57 } 58 59 public enum AttributeType implements Serializable { 60 FLOAT(float.class), 61 INT(int.class), 62 STRING(String.class), 63 // @@@ proto 64 TENSOR(byte[].class), 65 // proto 66 GRAPH(byte[].class), 67 SPARSE_TENSOR(byte[].class), 68 // @@@ Map<K, V>, Opaque, Optional<T>, Sequence<T>, SparseTensor<T>, Tensor<T> 69 // OnnxTypeElement? 70 TYPE_PROTO(Object.class), 71 FLOATS(float[].class), 72 INTS(int[].class), 73 STRINGS(String[].class), 74 // @@@ proto 75 TENSORS(byte[][].class), 76 // @@@ proto 77 GRAPHS(byte[][].class), 78 // @@@ proto 79 SPARSE_TENSORS(byte[][].class), 80 TYPE_PROTOS(Object[].class) 81 ; 82 83 final Class<?> type; 84 85 AttributeType(Class<?> type) { 86 this.type = type; 87 } 88 89 public Class<?> type() { 90 return type; 91 } 92 } 93 94 public record Attribute( 95 String name, 96 String description, 97 AttributeType type, 98 Object default_value, 99 boolean required 100 ) implements Serializable { 101 } 102 103 public enum FormalParameterOption implements Serializable { 104 Single, 105 Optional, 106 Variadic 107 } 108 109 public enum DifferentiationCategory implements Serializable { 110 Unknown, 111 Differentiable, 112 NonDifferentiable 113 } 114 115 public record FormalParameter( 116 String name, 117 // @@@ List<String> 118 String types, 119 String type_str, 120 String description, 121 FormalParameterOption option, 122 boolean is_homogeneous, 123 int min_arity, 124 DifferentiationCategory differentiation_category 125 ) implements Serializable { 126 } 127 128 public record TypeConstraintParam( 129 String type_param_str, 130 String description, 131 List<String> allowed_type_strs 132 ) implements Serializable { 133 } 134 }