HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_ONNX.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_ONNXEnums
24 {
25  enum class BatchMode
26  {
27  UNIFORM = 0,
28  DYNAMIC
29  };
30 
32  getToken(BatchMode enum_value)
33  {
34  using namespace UT::Literal;
35  switch (enum_value) {
36  case BatchMode::UNIFORM: return "uniform"_sh;
37  case BatchMode::DYNAMIC: return "dynamic"_sh;
38  default: UT_ASSERT(false); return ""_sh;
39  }
40  }
41 
42  enum class Input_dtype
43  {
44  FLOAT32 = 0,
45  FLOAT16,
46  INT32,
47  INT8,
48  UINT8,
49  INT64,
50  FLOAT64,
51  BOOL
52  };
53 
55  getToken(Input_dtype enum_value)
56  {
57  using namespace UT::Literal;
58  switch (enum_value) {
59  case Input_dtype::FLOAT32: return "float32"_sh;
60  case Input_dtype::FLOAT16: return "float16"_sh;
61  case Input_dtype::INT32: return "int32"_sh;
62  case Input_dtype::INT8: return "int8"_sh;
63  case Input_dtype::UINT8: return "uint8"_sh;
64  case Input_dtype::INT64: return "int64"_sh;
65  case Input_dtype::FLOAT64: return "float64"_sh;
66  case Input_dtype::BOOL: return "bool"_sh;
67  default: UT_ASSERT(false); return ""_sh;
68  }
69  }
70 
71  enum class Input_type
72  {
73  VOLUME = 0,
74  DETAIL,
75  POINT,
76  PRIM
77  };
78 
80  getToken(Input_type enum_value)
81  {
82  using namespace UT::Literal;
83  switch (enum_value) {
84  case Input_type::VOLUME: return "volume"_sh;
85  case Input_type::DETAIL: return "detail"_sh;
86  case Input_type::POINT: return "point"_sh;
87  case Input_type::PRIM: return "prim"_sh;
88  default: UT_ASSERT(false); return ""_sh;
89  }
90  }
91 
92  enum class Input_volorder
93  {
94  ZYX = 0,
95  XYZ
96  };
97 
99  getToken(Input_volorder enum_value)
100  {
101  using namespace UT::Literal;
102  switch (enum_value) {
103  case Input_volorder::ZYX: return "zyx"_sh;
104  case Input_volorder::XYZ: return "xyz"_sh;
105  default: UT_ASSERT(false); return ""_sh;
106  }
107  }
108 
109  enum class Output_dtype
110  {
111  FLOAT32 = 0,
112  FLOAT16,
113  INT32,
114  INT8,
115  UINT8,
116  INT64,
117  FLOAT64,
118  BOOL
119  };
120 
122  getToken(Output_dtype enum_value)
123  {
124  using namespace UT::Literal;
125  switch (enum_value) {
126  case Output_dtype::FLOAT32: return "float32"_sh;
127  case Output_dtype::FLOAT16: return "float16"_sh;
128  case Output_dtype::INT32: return "int32"_sh;
129  case Output_dtype::INT8: return "int8"_sh;
130  case Output_dtype::UINT8: return "uint8"_sh;
131  case Output_dtype::INT64: return "int64"_sh;
132  case Output_dtype::FLOAT64: return "float64"_sh;
133  case Output_dtype::BOOL: return "bool"_sh;
134  default: UT_ASSERT(false); return ""_sh;
135  }
136  }
137 
138  enum class Output_type
139  {
140  VOLUME = 0,
141  DETAIL,
142  POINT
143  };
144 
146  getToken(Output_type enum_value)
147  {
148  using namespace UT::Literal;
149  switch (enum_value) {
150  case Output_type::VOLUME: return "volume"_sh;
151  case Output_type::DETAIL: return "detail"_sh;
152  case Output_type::POINT: return "point"_sh;
153  default: UT_ASSERT(false); return ""_sh;
154  }
155  }
156 
157  enum class Output_volorder
158  {
159  ZYX = 0,
160  XYZ
161  };
162 
165  {
166  using namespace UT::Literal;
167  switch (enum_value) {
168  case Output_volorder::ZYX: return "zyx"_sh;
169  case Output_volorder::XYZ: return "xyz"_sh;
170  default: UT_ASSERT(false); return ""_sh;
171  }
172  }
173 
174 }
175 
176 
178 {
179 public:
180  static int version() { return 1; }
181  struct Inputs
182  {
190 
191 
193  {
194  input_name = ""_UTsh;
195  input_dtype = 0;
196  input_shape = 1;
197  input_type = 0;
198  input_volorder = 0;
199  input_channelfirst = false;
200  input_data = ""_UTsh;
201 
202  }
203 
204  bool operator==(const Inputs &src) const
205  {
206  if (input_name != src.input_name) return false;
207  if (input_dtype != src.input_dtype) return false;
208  if (input_shape != src.input_shape) return false;
209  if (input_type != src.input_type) return false;
210  if (input_volorder != src.input_volorder) return false;
211  if (input_channelfirst != src.input_channelfirst) return false;
212  if (input_data != src.input_data) return false;
213 
214  return true;
215  }
216  bool operator!=(const Inputs &src) const
217  {
218  return !operator==(src);
219  }
220 
221  };
222 
224  {
226 
227  buf.strcat("[ ");
228  for (int i = 0; i < list.entries(); i++)
229  {
230  if (i)
231  buf.strcat(", ");
232  buf.strcat("( ");
233  buf.append("");
234  { UT_String tmp; tmp = UT_StringWrap(list(i).input_name).makeQuotedString('"'); buf.strcat(tmp); }
235  buf.append(", ");
236  buf.appendSprintf("%d", (int) list(i).input_dtype);
237  buf.append(", ");
238  buf.appendSprintf("((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))", list(i).input_shape(0,0), list(i).input_shape(0, 1), list(i).input_shape(0, 2), list(i).input_shape(1, 0), list(i).input_shape(1, 1), list(i).input_shape(1, 2), list(i).input_shape(2, 0), list(i).input_shape(2, 1), list(i).input_shape(2, 2));
239  buf.append(", ");
240  buf.appendSprintf("%d", (int) list(i).input_type);
241  buf.append(", ");
242  buf.appendSprintf("%d", (int) list(i).input_volorder);
243  buf.append(", ");
244  buf.appendSprintf("%s", (list(i).input_channelfirst) ? "true" : "false");
245  buf.append(", ");
246  { UT_String tmp; tmp = UT_StringWrap(list(i).input_data).makeQuotedString('"'); buf.strcat(tmp); }
247 
248  buf.strcat(" )");
249  }
250  buf.strcat(" ]");
251 
253  return result;
254  }
255  struct Outputs
256  {
264 
265 
267  {
268  output_name = ""_UTsh;
269  output_dtype = 0;
270  output_shape = 1;
271  output_type = 0;
272  output_volorder = 0;
273  output_channelfirst = false;
274  output_data = ""_UTsh;
275 
276  }
277 
278  bool operator==(const Outputs &src) const
279  {
280  if (output_name != src.output_name) return false;
281  if (output_dtype != src.output_dtype) return false;
282  if (output_shape != src.output_shape) return false;
283  if (output_type != src.output_type) return false;
284  if (output_volorder != src.output_volorder) return false;
285  if (output_channelfirst != src.output_channelfirst) return false;
286  if (output_data != src.output_data) return false;
287 
288  return true;
289  }
290  bool operator!=(const Outputs &src) const
291  {
292  return !operator==(src);
293  }
294 
295  };
296 
298  {
300 
301  buf.strcat("[ ");
302  for (int i = 0; i < list.entries(); i++)
303  {
304  if (i)
305  buf.strcat(", ");
306  buf.strcat("( ");
307  buf.append("");
308  { UT_String tmp; tmp = UT_StringWrap(list(i).output_name).makeQuotedString('"'); buf.strcat(tmp); }
309  buf.append(", ");
310  buf.appendSprintf("%d", (int) list(i).output_dtype);
311  buf.append(", ");
312  buf.appendSprintf("((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))", list(i).output_shape(0,0), list(i).output_shape(0, 1), list(i).output_shape(0, 2), list(i).output_shape(1, 0), list(i).output_shape(1, 1), list(i).output_shape(1, 2), list(i).output_shape(2, 0), list(i).output_shape(2, 1), list(i).output_shape(2, 2));
313  buf.append(", ");
314  buf.appendSprintf("%d", (int) list(i).output_type);
315  buf.append(", ");
316  buf.appendSprintf("%d", (int) list(i).output_volorder);
317  buf.append(", ");
318  buf.appendSprintf("%s", (list(i).output_channelfirst) ? "true" : "false");
319  buf.append(", ");
320  { UT_String tmp; tmp = UT_StringWrap(list(i).output_data).makeQuotedString('"'); buf.strcat(tmp); }
321 
322  buf.strcat(" )");
323  }
324  buf.strcat(" ]");
325 
327  return result;
328  }
329 
331  {
332  myModelFile = ""_UTsh;
333  raw_myModelFile = ""_UTsh;
334  myBatchMode = 0;
335  myDoMaxBatch = false;
336  myMaxBatch = 65536;
337  myProvider = 0;
338  myDeviceid = 0;
339  myKeepInput = false;
340  myInputs.setSize(1);
341  myOutputs.setSize(1);
342 
343  }
344 
345  explicit SOP_ONNXParms(const SOP_ONNXParms &) = default;
346  SOP_ONNXParms &operator=(const SOP_ONNXParms &) = default;
347  SOP_ONNXParms(SOP_ONNXParms &&) noexcept = default;
348  SOP_ONNXParms &operator=(SOP_ONNXParms &&) noexcept = default;
349 
350  ~SOP_ONNXParms() override {}
351 
352  bool operator==(const SOP_ONNXParms &src) const
353  {
354  if (myModelFile != src.myModelFile) return false;
355  if (raw_myModelFile != src.raw_myModelFile) return false;
356  if (myBatchMode != src.myBatchMode) return false;
357  if (myDoMaxBatch != src.myDoMaxBatch) return false;
358  if (myMaxBatch != src.myMaxBatch) return false;
359  if (myProvider != src.myProvider) return false;
360  if (myDeviceid != src.myDeviceid) return false;
361  if (myKeepInput != src.myKeepInput) return false;
362  if (myInputs != src.myInputs) return false;
363  if (myOutputs != src.myOutputs) return false;
364 
365 
366  if (baseGetSignature() != src.baseGetSignature()) return false;
367 
368  return true;
369  }
370  bool operator!=(const SOP_ONNXParms &src) const
371  {
372  return !operator==(src);
373  }
381 
382 
383 
384  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
385  {
386  myModelFile = ""_UTsh;
387  if (true)
388  graph->evalOpParm(myModelFile, nodeidx, "modelfile", time, graph->isDirect()?nullptr:depnode);
389  raw_myModelFile = ""_UTsh;
390  if (true)
391  graph->evalOpParmRaw(raw_myModelFile, nodeidx, "modelfile", time, graph->isDirect()?nullptr:depnode);
392  myBatchMode = 0;
393  if (true)
394  graph->evalOpParm(myBatchMode, nodeidx, "batchmode", time, graph->isDirect()?nullptr:depnode);
395  myDoMaxBatch = false;
396  if (true)
397  graph->evalOpParm(myDoMaxBatch, nodeidx, "domaxbatch", time, graph->isDirect()?nullptr:depnode);
398  myMaxBatch = 65536;
399  if (true && ( (true&&!(((getDoMaxBatch()==0)))) ) )
400  graph->evalOpParm(myMaxBatch, nodeidx, "maxbatch", time, graph->isDirect()?nullptr:depnode);
401  myProvider = 0;
402  if (true)
403  graph->evalOpParm(myProvider, nodeidx, "provider", time, graph->isDirect()?nullptr:depnode);
404  myDeviceid = 0;
405  if (true && ( (true&&!(((false)))) ) )
406  graph->evalOpParm(myDeviceid, nodeidx, "deviceid", time, graph->isDirect()?nullptr:depnode);
407  myKeepInput = false;
408  if (true)
409  graph->evalOpParm(myKeepInput, nodeidx, "keepinput", time, graph->isDirect()?nullptr:depnode);
410  if (true)
411  {
412  int64 length = 0;
413  graph->evalOpParm(length, nodeidx, "inputs", time, graph->isDirect()?nullptr:depnode);
414  if (length < 0) length = 0;
415  myInputs.setSize(length);
416  for (exint i = 0; i < length; i++)
417  {
418  int parmidx[1];
419  int offsets[1];
420  parmidx[0] = i+1;
421  offsets[0] = 1;
422  auto && _curentry = myInputs(i);
423  (void) _curentry;
424  _curentry.input_name = ""_UTsh;
425  if (true)
426  graph->evalOpParmInst(_curentry.input_name, nodeidx, "input_name#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
427  _curentry.input_dtype = 0;
428  if (true)
429  graph->evalOpParmInst(_curentry.input_dtype, nodeidx, "input_dtype#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
430  _curentry.input_shape = 1;
431  if (true)
432  graph->evalOpParmInst(_curentry.input_shape, nodeidx, "input_shape#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
433  _curentry.input_type = 0;
434  if (true)
435  graph->evalOpParmInst(_curentry.input_type, nodeidx, "input_type#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
436  _curentry.input_volorder = 0;
437  if (true && ( (true&&!(((_curentry.input_type!=0)))) ) )
438  graph->evalOpParmInst(_curentry.input_volorder, nodeidx, "input_volorder#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
439  _curentry.input_channelfirst = false;
440  if (true && ( (true&&!(((_curentry.input_type!=0)))) ) )
441  graph->evalOpParmInst(_curentry.input_channelfirst, nodeidx, "input_channelfirst#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
442  _curentry.input_data = ""_UTsh;
443  if (true)
444  graph->evalOpParmInst(_curentry.input_data, nodeidx, "input_data#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
445 
446  }
447  }
448  else
449  myInputs.clear();
450  if (true)
451  {
452  int64 length = 0;
453  graph->evalOpParm(length, nodeidx, "outputs", time, graph->isDirect()?nullptr:depnode);
454  if (length < 0) length = 0;
455  myOutputs.setSize(length);
456  for (exint i = 0; i < length; i++)
457  {
458  int parmidx[1];
459  int offsets[1];
460  parmidx[0] = i+1;
461  offsets[0] = 1;
462  auto && _curentry = myOutputs(i);
463  (void) _curentry;
464  _curentry.output_name = ""_UTsh;
465  if (true)
466  graph->evalOpParmInst(_curentry.output_name, nodeidx, "output_name#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
467  _curentry.output_dtype = 0;
468  if (true)
469  graph->evalOpParmInst(_curentry.output_dtype, nodeidx, "output_dtype#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
470  _curentry.output_shape = 1;
471  if (true)
472  graph->evalOpParmInst(_curentry.output_shape, nodeidx, "output_shape#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
473  _curentry.output_type = 0;
474  if (true)
475  graph->evalOpParmInst(_curentry.output_type, nodeidx, "output_type#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
476  _curentry.output_volorder = 0;
477  if (true && ( (true&&!(((_curentry.output_type!=0)))) ) )
478  graph->evalOpParmInst(_curentry.output_volorder, nodeidx, "output_volorder#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
479  _curentry.output_channelfirst = false;
480  if (true && ( (true&&!(((_curentry.output_type!=0)))) ) )
481  graph->evalOpParmInst(_curentry.output_channelfirst, nodeidx, "output_channelfirst#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
482  _curentry.output_data = ""_UTsh;
483  if (true)
484  graph->evalOpParmInst(_curentry.output_data, nodeidx, "output_data#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
485 
486  }
487  }
488  else
489  myOutputs.clear();
490 
491  }
492 
493 
494  void loadFromOpSubclass(const LoadParms &loadparms) override
495  {
496  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
497  }
498 
499 
500  void copyFrom(const OP_NodeParms *src) override
501  {
502  *this = *((const SOP_ONNXParms *)src);
503  }
504 
505  template <typename T>
506  void
507  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
508  {
509  if (idx.size() < 1)
510  return;
511  UT_ASSERT(idx.size() == instance.size()+1);
512  if (idx.size() != instance.size()+1)
513  return;
514  switch (idx[0])
515  {
516  case 0:
517  coerceValue(value, myModelFile);
518  break;
519  case 1:
520  coerceValue(value, myBatchMode);
521  break;
522  case 2:
523  coerceValue(value, myDoMaxBatch);
524  break;
525  case 3:
526  coerceValue(value, myMaxBatch);
527  break;
528  case 4:
529  coerceValue(value, myProvider);
530  break;
531  case 5:
532  coerceValue(value, myDeviceid);
533  break;
534  case 6:
535  coerceValue(value, myKeepInput);
536  break;
537  case 7:
538  if (idx.size() == 1)
539  coerceValue(value, myInputs.entries());
540  else if (instance[0] < myInputs.entries())
541  {
542  auto && _data = myInputs(instance[0]);
543  switch (idx[1])
544  {
545  case 0:
546  coerceValue(value, _data.input_name);
547  break;
548  case 1:
549  coerceValue(value, _data.input_dtype);
550  break;
551  case 2:
552  coerceValue(value, _data.input_shape);
553  break;
554  case 3:
555  coerceValue(value, _data.input_type);
556  break;
557  case 4:
558  coerceValue(value, _data.input_volorder);
559  break;
560  case 5:
561  coerceValue(value, _data.input_channelfirst);
562  break;
563  case 6:
564  coerceValue(value, _data.input_data);
565  break;
566 
567  }
568  }
569  break;
570  case 8:
571  if (idx.size() == 1)
572  coerceValue(value, myOutputs.entries());
573  else if (instance[0] < myOutputs.entries())
574  {
575  auto && _data = myOutputs(instance[0]);
576  switch (idx[1])
577  {
578  case 0:
579  coerceValue(value, _data.output_name);
580  break;
581  case 1:
582  coerceValue(value, _data.output_dtype);
583  break;
584  case 2:
585  coerceValue(value, _data.output_shape);
586  break;
587  case 3:
588  coerceValue(value, _data.output_type);
589  break;
590  case 4:
591  coerceValue(value, _data.output_volorder);
592  break;
593  case 5:
594  coerceValue(value, _data.output_channelfirst);
595  break;
596  case 6:
597  coerceValue(value, _data.output_data);
598  break;
599 
600  }
601  }
602  break;
603 
604  }
605  }
606 
607  bool isParmColorRamp(exint idx) const override
608  {
609  switch (idx)
610  {
611 
612  }
613  return false;
614  }
615 
616  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
617  { doGetParmValue(idx, instance, value); }
618  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
619  { doGetParmValue(idx, instance, value); }
620  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
621  { doGetParmValue(idx, instance, value); }
622  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
623  { doGetParmValue(idx, instance, value); }
624  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
625  { doGetParmValue(idx, instance, value); }
626  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
627  { doGetParmValue(idx, instance, value); }
628  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
629  { doGetParmValue(idx, instance, value); }
630  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
631  { doGetParmValue(idx, instance, value); }
632  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
633  { doGetParmValue(idx, instance, value); }
634  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
635  { doGetParmValue(idx, instance, value); }
636  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
637  { doGetParmValue(idx, instance, value); }
638 
639  template <typename T>
640  void
641  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
642  {
643  if (idx.size() < 1)
644  return;
645  UT_ASSERT(idx.size() == instance.size()+1);
646  if (idx.size() != instance.size()+1)
647  return;
648  switch (idx[0])
649  {
650  case 0:
651  coerceValue(myModelFile, ( ( value ) ));
652  break;
653  case 1:
654  coerceValue(myBatchMode, clampMinValue(0, clampMaxValue(1, value ) ));
655  break;
656  case 2:
657  coerceValue(myDoMaxBatch, ( ( value ) ));
658  break;
659  case 3:
660  coerceValue(myMaxBatch, ( ( value ) ));
661  break;
662  case 4:
663  coerceValue(myProvider, ( ( value ) ));
664  break;
665  case 5:
666  coerceValue(myDeviceid, ( ( value ) ));
667  break;
668  case 6:
669  coerceValue(myKeepInput, ( ( value ) ));
670  break;
671  case 7:
672  if (idx.size() == 1)
673  {
674  exint newsize;
675  coerceValue(newsize, value);
676  if (newsize < 0) newsize = 0;
677  myInputs.setSize(newsize);
678  }
679  else
680  {
681  if (instance[0] < 0)
682  return;
683  myInputs.setSizeIfNeeded(instance[0]+1);
684  auto && _data = myInputs(instance[0]);
685  switch (idx[1])
686  {
687  case 0:
688  coerceValue(_data.input_name, value);
689  break;
690  case 1:
691  coerceValue(_data.input_dtype, value);
692  break;
693  case 2:
694  coerceValue(_data.input_shape, value);
695  break;
696  case 3:
697  coerceValue(_data.input_type, value);
698  break;
699  case 4:
700  coerceValue(_data.input_volorder, value);
701  break;
702  case 5:
703  coerceValue(_data.input_channelfirst, value);
704  break;
705  case 6:
706  coerceValue(_data.input_data, value);
707  break;
708 
709  }
710  }
711  break;
712  case 8:
713  if (idx.size() == 1)
714  {
715  exint newsize;
716  coerceValue(newsize, value);
717  if (newsize < 0) newsize = 0;
718  myOutputs.setSize(newsize);
719  }
720  else
721  {
722  if (instance[0] < 0)
723  return;
724  myOutputs.setSizeIfNeeded(instance[0]+1);
725  auto && _data = myOutputs(instance[0]);
726  switch (idx[1])
727  {
728  case 0:
729  coerceValue(_data.output_name, value);
730  break;
731  case 1:
732  coerceValue(_data.output_dtype, value);
733  break;
734  case 2:
735  coerceValue(_data.output_shape, value);
736  break;
737  case 3:
738  coerceValue(_data.output_type, value);
739  break;
740  case 4:
741  coerceValue(_data.output_volorder, value);
742  break;
743  case 5:
744  coerceValue(_data.output_channelfirst, value);
745  break;
746  case 6:
747  coerceValue(_data.output_data, value);
748  break;
749 
750  }
751  }
752  break;
753 
754  }
755  }
756 
757  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
758  { doSetParmValue(idx, instance, value); }
759  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
760  { doSetParmValue(idx, instance, value); }
761  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
762  { doSetParmValue(idx, instance, value); }
763  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
764  { doSetParmValue(idx, instance, value); }
765  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
766  { doSetParmValue(idx, instance, value); }
767  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
768  { doSetParmValue(idx, instance, value); }
769  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
770  { doSetParmValue(idx, instance, value); }
771  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
772  { doSetParmValue(idx, instance, value); }
773  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
774  { doSetParmValue(idx, instance, value); }
775  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
776  { doSetParmValue(idx, instance, value); }
777  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
778  { doSetParmValue(idx, instance, value); }
779 
780  exint getNestNumParms(TempIndex idx) const override
781  {
782  if (idx.size() == 0)
783  return 9;
784  switch (idx[0])
785  {
786  case 7:
787  return 7;
788  case 8:
789  return 7;
790 
791  }
792  // Invalid
793  return 0;
794  }
795 
796  const char *getNestParmName(TempIndex fieldnum) const override
797  {
798  if (fieldnum.size() < 1)
799  return 0;
800  switch (fieldnum[0])
801  {
802  case 0:
803  return "modelfile";
804  case 1:
805  return "batchmode";
806  case 2:
807  return "domaxbatch";
808  case 3:
809  return "maxbatch";
810  case 4:
811  return "provider";
812  case 5:
813  return "deviceid";
814  case 6:
815  return "keepinput";
816  case 7:
817  if (fieldnum.size() == 1)
818  return "inputs";
819  switch (fieldnum[1])
820  {
821  case 0:
822  return "input_name#";
823  case 1:
824  return "input_dtype#";
825  case 2:
826  return "input_shape#";
827  case 3:
828  return "input_type#";
829  case 4:
830  return "input_volorder#";
831  case 5:
832  return "input_channelfirst#";
833  case 6:
834  return "input_data#";
835 
836  }
837  return 0;
838  case 8:
839  if (fieldnum.size() == 1)
840  return "outputs";
841  switch (fieldnum[1])
842  {
843  case 0:
844  return "output_name#";
845  case 1:
846  return "output_dtype#";
847  case 2:
848  return "output_shape#";
849  case 3:
850  return "output_type#";
851  case 4:
852  return "output_volorder#";
853  case 5:
854  return "output_channelfirst#";
855  case 6:
856  return "output_data#";
857 
858  }
859  return 0;
860 
861  }
862  return 0;
863  }
864 
865  ParmType getNestParmType(TempIndex fieldnum) const override
866  {
867  if (fieldnum.size() < 1)
868  return PARM_UNSUPPORTED;
869  switch (fieldnum[0])
870  {
871  case 0:
872  return PARM_STRING;
873  case 1:
874  return PARM_INTEGER;
875  case 2:
876  return PARM_INTEGER;
877  case 3:
878  return PARM_INTEGER;
879  case 4:
880  return PARM_INTEGER;
881  case 5:
882  return PARM_INTEGER;
883  case 6:
884  return PARM_INTEGER;
885  case 7:
886  if (fieldnum.size() == 1)
887  return PARM_MULTIPARM;
888  switch (fieldnum[1])
889  {
890  case 0:
891  return PARM_STRING;
892  case 1:
893  return PARM_INTEGER;
894  case 2:
895  return PARM_MATRIX3;
896  case 3:
897  return PARM_INTEGER;
898  case 4:
899  return PARM_INTEGER;
900  case 5:
901  return PARM_INTEGER;
902  case 6:
903  return PARM_STRING;
904 
905  }
906  return PARM_UNSUPPORTED;
907  case 8:
908  if (fieldnum.size() == 1)
909  return PARM_MULTIPARM;
910  switch (fieldnum[1])
911  {
912  case 0:
913  return PARM_STRING;
914  case 1:
915  return PARM_INTEGER;
916  case 2:
917  return PARM_MATRIX3;
918  case 3:
919  return PARM_INTEGER;
920  case 4:
921  return PARM_INTEGER;
922  case 5:
923  return PARM_INTEGER;
924  case 6:
925  return PARM_STRING;
926 
927  }
928  return PARM_UNSUPPORTED;
929 
930  }
931  return PARM_UNSUPPORTED;
932  }
933 
934  // Boiler plate to load individual types.
935  static void loadData(UT_IStream &is, int64 &v)
936  { is.bread(&v, 1); }
937  static void loadData(UT_IStream &is, bool &v)
938  { int64 iv; is.bread(&iv, 1); v = iv; }
939  static void loadData(UT_IStream &is, fpreal64 &v)
940  { is.bread<fpreal64>(&v, 1); }
941  static void loadData(UT_IStream &is, UT_Vector2D &v)
942  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
943  static void loadData(UT_IStream &is, UT_Vector3D &v)
944  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
945  is.bread<fpreal64>(&v.z(), 1); }
946  static void loadData(UT_IStream &is, UT_Vector4D &v)
947  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
948  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
949  static void loadData(UT_IStream &is, UT_Matrix2D &v)
950  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
951  static void loadData(UT_IStream &is, UT_Matrix3D &v)
952  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
953  static void loadData(UT_IStream &is, UT_Matrix4D &v)
954  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
955  static void loadData(UT_IStream &is, UT_Vector2I &v)
956  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
957  static void loadData(UT_IStream &is, UT_Vector3I &v)
958  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
959  is.bread<int64>(&v.z(), 1); }
960  static void loadData(UT_IStream &is, UT_Vector4I &v)
961  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
962  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
964  { is.bread(v); }
966  { UT_StringHolder rampdata;
967  loadData(is, rampdata);
968  if (rampdata.isstring())
969  {
970  v.reset(new UT_Ramp());
971  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
972  v->load(istr);
973  }
974  else v.reset();
975  }
978  loadData(is, data);
979  if (data.isstring())
980  {
981  // Find the data type.
982  const char *colon = UT_StringWrap(data).findChar(':');
983  if (colon)
984  {
985  int typelen = colon - data.buffer();
987  type.strncpy(data.buffer(), typelen);
988  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
989 
990  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
991  }
992  }
993  else v.reset();
994  }
995 
996  static void saveData(std::ostream &os, int64 v)
997  { UTwrite(os, &v); }
998  static void saveData(std::ostream &os, bool v)
999  { int64 iv = v; UTwrite(os, &iv); }
1000  static void saveData(std::ostream &os, fpreal64 v)
1001  { UTwrite<fpreal64>(os, &v); }
1002  static void saveData(std::ostream &os, UT_Vector2D v)
1003  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1004  static void saveData(std::ostream &os, UT_Vector3D v)
1005  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1006  UTwrite<fpreal64>(os, &v.z()); }
1007  static void saveData(std::ostream &os, UT_Vector4D v)
1008  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1009  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1010  static void saveData(std::ostream &os, UT_Matrix2D v)
1012  static void saveData(std::ostream &os, UT_Matrix3D v)
1014  static void saveData(std::ostream &os, UT_Matrix4D v)
1016  static void saveData(std::ostream &os, UT_StringHolder s)
1017  { UT_StringWrap(s).saveBinary(os); }
1018  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1020  UT_OStringStream ostr;
1021  if (s) s->save(ostr);
1022  result = ostr.str();
1023  saveData(os, result);
1024  }
1025  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1027  UT_OStringStream ostr;
1028  if (s)
1029  {
1030  ostr << s->getDataTypeToken();
1031  ostr << ":";
1032  s->saveBinary(ostr);
1033  }
1034  result = ostr.str();
1035  saveData(os, result);
1036  }
1037 
1038 
1039  void save(std::ostream &os) const
1040  {
1041  int32 v = version();
1042  UTwrite(os, &v);
1043  saveData(os, myModelFile);
1044  saveData(os, raw_myModelFile);
1045  saveData(os, myBatchMode);
1046  saveData(os, myDoMaxBatch);
1047  saveData(os, myMaxBatch);
1048  saveData(os, myProvider);
1049  saveData(os, myDeviceid);
1050  saveData(os, myKeepInput);
1051  {
1052  int64 length = myInputs.entries();
1053  UTwrite(os, &length);
1054  for (exint i = 0; i < length; i++)
1055  {
1056  auto && _curentry = myInputs(i);
1057  (void) _curentry;
1058  saveData(os, _curentry.input_name);
1059  saveData(os, _curentry.input_dtype);
1060  saveData(os, _curentry.input_shape);
1061  saveData(os, _curentry.input_type);
1062  saveData(os, _curentry.input_volorder);
1063  saveData(os, _curentry.input_channelfirst);
1064  saveData(os, _curentry.input_data);
1065 
1066  }
1067  }
1068  {
1069  int64 length = myOutputs.entries();
1070  UTwrite(os, &length);
1071  for (exint i = 0; i < length; i++)
1072  {
1073  auto && _curentry = myOutputs(i);
1074  (void) _curentry;
1075  saveData(os, _curentry.output_name);
1076  saveData(os, _curentry.output_dtype);
1077  saveData(os, _curentry.output_shape);
1078  saveData(os, _curentry.output_type);
1079  saveData(os, _curentry.output_volorder);
1080  saveData(os, _curentry.output_channelfirst);
1081  saveData(os, _curentry.output_data);
1082 
1083  }
1084  }
1085 
1086  }
1087 
1088  bool load(UT_IStream &is)
1089  {
1090  int32 v;
1091  is.bread(&v, 1);
1092  if (version() != v)
1093  {
1094  // Fail incompatible versions
1095  return false;
1096  }
1097  loadData(is, myModelFile);
1098  loadData(is, raw_myModelFile);
1099  loadData(is, myBatchMode);
1100  loadData(is, myDoMaxBatch);
1101  loadData(is, myMaxBatch);
1102  loadData(is, myProvider);
1103  loadData(is, myDeviceid);
1104  loadData(is, myKeepInput);
1105  {
1106  int64 length;
1107  is.read(&length, 1);
1108  myInputs.setSize(length);
1109  for (exint i = 0; i < length; i++)
1110  {
1111  auto && _curentry = myInputs(i);
1112  (void) _curentry;
1113  loadData(is, _curentry.input_name);
1114  loadData(is, _curentry.input_dtype);
1115  loadData(is, _curentry.input_shape);
1116  loadData(is, _curentry.input_type);
1117  loadData(is, _curentry.input_volorder);
1118  loadData(is, _curentry.input_channelfirst);
1119  loadData(is, _curentry.input_data);
1120 
1121  }
1122  }
1123  {
1124  int64 length;
1125  is.read(&length, 1);
1126  myOutputs.setSize(length);
1127  for (exint i = 0; i < length; i++)
1128  {
1129  auto && _curentry = myOutputs(i);
1130  (void) _curentry;
1131  loadData(is, _curentry.output_name);
1132  loadData(is, _curentry.output_dtype);
1133  loadData(is, _curentry.output_shape);
1134  loadData(is, _curentry.output_type);
1135  loadData(is, _curentry.output_volorder);
1136  loadData(is, _curentry.output_channelfirst);
1137  loadData(is, _curentry.output_data);
1138 
1139  }
1140  }
1141 
1142  return true;
1143  }
1144 
1145  const UT_StringHolder & getModelFile() const { return myModelFile; }
1146  void setModelFile(const UT_StringHolder & val) { myModelFile = val; }
1148  {
1149  SOP_Node *thissop = cookparms.getNode();
1150  if (!thissop) return getModelFile();
1152  OP_Utils::evalOpParm(result, thissop, "modelfile", cookparms.getCookTime(), 0);
1153  return result;
1154  }
1155  const UT_StringHolder & raw_getModelFile() const { return raw_myModelFile; }
1156  void raw_setModelFile(const UT_StringHolder & val) { raw_myModelFile = val; }
1158  {
1159  SOP_Node *thissop = cookparms.getNode();
1160  if (!thissop) return raw_getModelFile();
1162  OP_Utils::evalOpParmRaw(result, thissop, "modelfile", cookparms.getCookTime(), 0);
1163  return result;
1164  }
1165  BatchMode getBatchMode() const { return BatchMode(myBatchMode); }
1166  void setBatchMode(BatchMode val) { myBatchMode = int64(val); }
1168  {
1169  SOP_Node *thissop = cookparms.getNode();
1170  if (!thissop) return getBatchMode();
1171  int64 result;
1172  OP_Utils::evalOpParm(result, thissop, "batchmode", cookparms.getCookTime(), 0);
1173  return BatchMode(result);
1174  }
1175  bool getDoMaxBatch() const { return myDoMaxBatch; }
1176  void setDoMaxBatch(bool val) { myDoMaxBatch = val; }
1177  bool opDoMaxBatch(const SOP_NodeVerb::CookParms &cookparms) const
1178  {
1179  SOP_Node *thissop = cookparms.getNode();
1180  if (!thissop) return getDoMaxBatch();
1181  bool result;
1182  OP_Utils::evalOpParm(result, thissop, "domaxbatch", cookparms.getCookTime(), 0);
1183  return result;
1184  }
1185  int64 getMaxBatch() const { return myMaxBatch; }
1186  void setMaxBatch(int64 val) { myMaxBatch = val; }
1187  int64 opMaxBatch(const SOP_NodeVerb::CookParms &cookparms) const
1188  {
1189  SOP_Node *thissop = cookparms.getNode();
1190  if (!thissop) return getMaxBatch();
1191  int64 result;
1192  OP_Utils::evalOpParm(result, thissop, "maxbatch", cookparms.getCookTime(), 0);
1193  return result;
1194  }
1195  int64 getProvider() const { return myProvider; }
1196  void setProvider(int64 val) { myProvider = val; }
1197  int64 opProvider(const SOP_NodeVerb::CookParms &cookparms) const
1198  {
1199  SOP_Node *thissop = cookparms.getNode();
1200  if (!thissop) return getProvider();
1201  int64 result;
1202  OP_Utils::evalOpParm(result, thissop, "provider", cookparms.getCookTime(), 0);
1203  return result;
1204  }
1205  int64 getDeviceid() const { return myDeviceid; }
1206  void setDeviceid(int64 val) { myDeviceid = val; }
1207  int64 opDeviceid(const SOP_NodeVerb::CookParms &cookparms) const
1208  {
1209  SOP_Node *thissop = cookparms.getNode();
1210  if (!thissop) return getDeviceid();
1211  int64 result;
1212  OP_Utils::evalOpParm(result, thissop, "deviceid", cookparms.getCookTime(), 0);
1213  return result;
1214  }
1215  bool getKeepInput() const { return myKeepInput; }
1216  void setKeepInput(bool val) { myKeepInput = val; }
1217  bool opKeepInput(const SOP_NodeVerb::CookParms &cookparms) const
1218  {
1219  SOP_Node *thissop = cookparms.getNode();
1220  if (!thissop) return getKeepInput();
1221  bool result;
1222  OP_Utils::evalOpParm(result, thissop, "keepinput", cookparms.getCookTime(), 0);
1223  return result;
1224  }
1225  const UT_Array<Inputs> &getInputs() const { return myInputs; }
1226 void setInputs(const UT_Array<Inputs> &val) { myInputs = val; }
1227  exint opInputs(const SOP_NodeVerb::CookParms &cookparms) const
1228  {
1229  SOP_Node *thissop = cookparms.getNode();
1230  if (!thissop) return getInputs().entries();
1231  exint result;
1232  OP_Utils::evalOpParm(result, thissop, "inputs", cookparms.getCookTime(), 0);
1233  return result;
1234  }
1236  { return opinstInputs_input_name(cookparms, &_idx); }
1237  UT_StringHolder opinstInputs_input_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1238  {
1239  SOP_Node *thissop = cookparms.getNode();
1240  if (!thissop) return (myInputs(_idx[0]).input_name);
1241  int _parmidx[2-1];
1242  _parmidx[1-1] = _idx[1-1] + 1;
1243 
1245  OP_Utils::evalOpParmInst(result, thissop, "input_name#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1246  return (result);
1247  }
1248  int64 opInputs_input_dtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1249  { return opinstInputs_input_dtype(cookparms, &_idx); }
1250  int64 opinstInputs_input_dtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1251  {
1252  SOP_Node *thissop = cookparms.getNode();
1253  if (!thissop) return (myInputs(_idx[0]).input_dtype);
1254  int _parmidx[2-1];
1255  _parmidx[1-1] = _idx[1-1] + 1;
1256 
1257  int64 result;
1258  OP_Utils::evalOpParmInst(result, thissop, "input_dtype#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1259  return (result);
1260  }
1262  { return opinstInputs_input_shape(cookparms, &_idx); }
1263  UT_Matrix3D opinstInputs_input_shape(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1264  {
1265  SOP_Node *thissop = cookparms.getNode();
1266  if (!thissop) return (myInputs(_idx[0]).input_shape);
1267  int _parmidx[2-1];
1268  _parmidx[1-1] = _idx[1-1] + 1;
1269 
1271  OP_Utils::evalOpParmInst(result, thissop, "input_shape#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1272  return (result);
1273  }
1274  int64 opInputs_input_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1275  { return opinstInputs_input_type(cookparms, &_idx); }
1276  int64 opinstInputs_input_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1277  {
1278  SOP_Node *thissop = cookparms.getNode();
1279  if (!thissop) return (myInputs(_idx[0]).input_type);
1280  int _parmidx[2-1];
1281  _parmidx[1-1] = _idx[1-1] + 1;
1282 
1283  int64 result;
1284  OP_Utils::evalOpParmInst(result, thissop, "input_type#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1285  return (result);
1286  }
1287  int64 opInputs_input_volorder(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1288  { return opinstInputs_input_volorder(cookparms, &_idx); }
1289  int64 opinstInputs_input_volorder(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1290  {
1291  SOP_Node *thissop = cookparms.getNode();
1292  if (!thissop) return (myInputs(_idx[0]).input_volorder);
1293  int _parmidx[2-1];
1294  _parmidx[1-1] = _idx[1-1] + 1;
1295 
1296  int64 result;
1297  OP_Utils::evalOpParmInst(result, thissop, "input_volorder#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1298  return (result);
1299  }
1300  bool opInputs_input_channelfirst(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1301  { return opinstInputs_input_channelfirst(cookparms, &_idx); }
1302  bool opinstInputs_input_channelfirst(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1303  {
1304  SOP_Node *thissop = cookparms.getNode();
1305  if (!thissop) return (myInputs(_idx[0]).input_channelfirst);
1306  int _parmidx[2-1];
1307  _parmidx[1-1] = _idx[1-1] + 1;
1308 
1309  bool result;
1310  OP_Utils::evalOpParmInst(result, thissop, "input_channelfirst#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1311  return (result);
1312  }
1314  { return opinstInputs_input_data(cookparms, &_idx); }
1315  UT_StringHolder opinstInputs_input_data(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1316  {
1317  SOP_Node *thissop = cookparms.getNode();
1318  if (!thissop) return (myInputs(_idx[0]).input_data);
1319  int _parmidx[2-1];
1320  _parmidx[1-1] = _idx[1-1] + 1;
1321 
1323  OP_Utils::evalOpParmInst(result, thissop, "input_data#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1324  return (result);
1325  }
1326 
1327  const UT_Array<Outputs> &getOutputs() const { return myOutputs; }
1328 void setOutputs(const UT_Array<Outputs> &val) { myOutputs = val; }
1329  exint opOutputs(const SOP_NodeVerb::CookParms &cookparms) const
1330  {
1331  SOP_Node *thissop = cookparms.getNode();
1332  if (!thissop) return getOutputs().entries();
1333  exint result;
1334  OP_Utils::evalOpParm(result, thissop, "outputs", cookparms.getCookTime(), 0);
1335  return result;
1336  }
1338  { return opinstOutputs_output_name(cookparms, &_idx); }
1339  UT_StringHolder opinstOutputs_output_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1340  {
1341  SOP_Node *thissop = cookparms.getNode();
1342  if (!thissop) return (myOutputs(_idx[0]).output_name);
1343  int _parmidx[2-1];
1344  _parmidx[1-1] = _idx[1-1] + 1;
1345 
1347  OP_Utils::evalOpParmInst(result, thissop, "output_name#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1348  return (result);
1349  }
1350  int64 opOutputs_output_dtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1351  { return opinstOutputs_output_dtype(cookparms, &_idx); }
1352  int64 opinstOutputs_output_dtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1353  {
1354  SOP_Node *thissop = cookparms.getNode();
1355  if (!thissop) return (myOutputs(_idx[0]).output_dtype);
1356  int _parmidx[2-1];
1357  _parmidx[1-1] = _idx[1-1] + 1;
1358 
1359  int64 result;
1360  OP_Utils::evalOpParmInst(result, thissop, "output_dtype#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1361  return (result);
1362  }
1364  { return opinstOutputs_output_shape(cookparms, &_idx); }
1365  UT_Matrix3D opinstOutputs_output_shape(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1366  {
1367  SOP_Node *thissop = cookparms.getNode();
1368  if (!thissop) return (myOutputs(_idx[0]).output_shape);
1369  int _parmidx[2-1];
1370  _parmidx[1-1] = _idx[1-1] + 1;
1371 
1373  OP_Utils::evalOpParmInst(result, thissop, "output_shape#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1374  return (result);
1375  }
1376  int64 opOutputs_output_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1377  { return opinstOutputs_output_type(cookparms, &_idx); }
1378  int64 opinstOutputs_output_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1379  {
1380  SOP_Node *thissop = cookparms.getNode();
1381  if (!thissop) return (myOutputs(_idx[0]).output_type);
1382  int _parmidx[2-1];
1383  _parmidx[1-1] = _idx[1-1] + 1;
1384 
1385  int64 result;
1386  OP_Utils::evalOpParmInst(result, thissop, "output_type#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1387  return (result);
1388  }
1389  int64 opOutputs_output_volorder(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1390  { return opinstOutputs_output_volorder(cookparms, &_idx); }
1391  int64 opinstOutputs_output_volorder(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1392  {
1393  SOP_Node *thissop = cookparms.getNode();
1394  if (!thissop) return (myOutputs(_idx[0]).output_volorder);
1395  int _parmidx[2-1];
1396  _parmidx[1-1] = _idx[1-1] + 1;
1397 
1398  int64 result;
1399  OP_Utils::evalOpParmInst(result, thissop, "output_volorder#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1400  return (result);
1401  }
1402  bool opOutputs_output_channelfirst(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1403  { return opinstOutputs_output_channelfirst(cookparms, &_idx); }
1404  bool opinstOutputs_output_channelfirst(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1405  {
1406  SOP_Node *thissop = cookparms.getNode();
1407  if (!thissop) return (myOutputs(_idx[0]).output_channelfirst);
1408  int _parmidx[2-1];
1409  _parmidx[1-1] = _idx[1-1] + 1;
1410 
1411  bool result;
1412  OP_Utils::evalOpParmInst(result, thissop, "output_channelfirst#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1413  return (result);
1414  }
1416  { return opinstOutputs_output_data(cookparms, &_idx); }
1417  UT_StringHolder opinstOutputs_output_data(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1418  {
1419  SOP_Node *thissop = cookparms.getNode();
1420  if (!thissop) return (myOutputs(_idx[0]).output_data);
1421  int _parmidx[2-1];
1422  _parmidx[1-1] = _idx[1-1] + 1;
1423 
1425  OP_Utils::evalOpParmInst(result, thissop, "output_data#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1426  return (result);
1427  }
1428 
1429 
1430 private:
1431  UT_StringHolder myModelFile;
1432  UT_StringHolder raw_myModelFile;
1433  int64 myBatchMode;
1434  bool myDoMaxBatch;
1435  int64 myMaxBatch;
1436  int64 myProvider;
1437  int64 myDeviceid;
1438  bool myKeepInput;
1439  UT_Array<Inputs> myInputs;
1440  UT_Array<Outputs> myOutputs;
1441 
1442 };
type
Definition: core.h:556
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void saveData(std::ostream &os, UT_StringHolder s)
UT_StringHolder opinstOutputs_output_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
const char * getNestParmName(TempIndex fieldnum) const override
void setKeepInput(bool val)
int64 opinstInputs_input_volorder(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void save(std::ostream &os) const
bool opInputs_input_channelfirst(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
int64 opProvider(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:403
bool opinstInputs_input_channelfirst(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opDoMaxBatch(const SOP_NodeVerb::CookParms &cookparms) const
void setOutputs(const UT_Array< Outputs > &val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
exint getNestNumParms(TempIndex idx) const override
UT_StringHolder raw_opModelFile(const SOP_NodeVerb::CookParms &cookparms) const
void
Definition: png.h:1083
bool operator==(const SOP_ONNXParms &src) const
GLboolean * data
Definition: glcorearb.h:131
bool operator!=(const SOP_ONNXParms &src) const
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:495
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:63
static void saveData(std::ostream &os, UT_Matrix4D v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
GLsizei const GLfloat * value
Definition: glcorearb.h:824
void setInputs(const UT_Array< Inputs > &val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
UT_StringHolder opinstInputs_input_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setProvider(int64 val)
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
const UT_StringHolder & getModelFile() const
virtual void evalOpParmRaw(UT_StringHolder &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:669
int64 exint
Definition: SYS_Types.h:125
UT_StringHolder opinstInputs_input_data(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
SYS_FORCE_INLINE const char * buffer() const
bool isParmColorRamp(exint idx) const override
GLdouble s
Definition: glad.h:3009
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
int64 opInputs_input_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
An output stream object that owns its own string buffer storage.
bool getDoMaxBatch() const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
static void loadData(UT_IStream &is, bool &v)
bool operator==(const Outputs &src) const
**But if you need a result
Definition: thread.h:622
BatchMode getBatchMode() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
int64 opOutputs_output_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 getMaxBatch() const
UT_StringHolder createString(const UT_Array< Outputs > &list) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
UT_StringHolder opModelFile(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const Inputs &src) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
int64 opInputs_input_volorder(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint opInputs(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opInputs_input_name(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:493
static void saveData(std::ostream &os, UT_Matrix3D v)
int64 opinstOutputs_output_dtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
UT_StringHolder createString(const UT_Array< Inputs > &list) const
double fpreal64
Definition: SYS_Types.h:201
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:426
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setMaxBatch(int64 val)
int64 opinstInputs_input_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
UT_Matrix3D opOutputs_output_shape(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
static void loadData(UT_IStream &is, int64 &v)
exint length() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void loadFromOpSubclass(const LoadParms &loadparms) override
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:497
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
UT_StringHolder opInputs_input_data(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:271
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
UT_StringHolder input_data
int64 getDeviceid() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_StringHolder opOutputs_output_data(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
long long int64
Definition: SYS_Types.h:116
static void loadData(UT_IStream &is, UT_Vector3I &v)
void setBatchMode(BatchMode val)
bool operator!=(const Outputs &src) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
const UT_StringHolder & raw_getModelFile() const
UT_StringHolder input_name
void setDoMaxBatch(bool val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
static void saveData(std::ostream &os, UT_Vector2D v)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
BatchMode opBatchMode(const SOP_NodeVerb::CookParms &cookparms) const
int64 getProvider() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:306
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
GT_API const UT_StringHolder version
bool opOutputs_output_channelfirst(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 opOutputs_output_dtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:669
UT_Matrix3D opInputs_input_shape(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 opinstOutputs_output_volorder(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void copyFrom(const OP_NodeParms *src) override
UT_StringHolder output_name
UT_StringHolder opinstOutputs_output_data(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setModelFile(const UT_StringHolder &val)
const UT_Array< Outputs > & getOutputs() const
static void saveData(std::ostream &os, UT_Matrix2D v)
fpreal64 fpreal
Definition: SYS_Types.h:283
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
UT_StringHolder opOutputs_output_name(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void raw_setModelFile(const UT_StringHolder &val)
UT_Matrix3D opinstInputs_input_shape(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opMaxBatch(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:499
SYS_FORCE_INLINE void append(char character)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
bool getKeepInput() const
GLuint GLfloat * val
Definition: glcorearb.h:1608
bool load(UT_IStream &is)
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
#define SOP_API
Definition: SOP_API.h:10
static void saveData(std::ostream &os, int64 v)
int64 opinstInputs_input_dtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
int64 opinstOutputs_output_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:432
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
int64 opInputs_input_dtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
ParmType getNestParmType(TempIndex fieldnum) const override
const char * findChar(int c) const
Definition: UT_String.h:1421
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:165
static void saveData(std::ostream &os, UT_Vector3D v)
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
int64 opOutputs_output_volorder(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, UT_Vector4D v)
GLboolean r
Definition: glcorearb.h:1222
exint bread(uint8 *buffer, exint asize=1)
UT_StringHolder output_data
void setDeviceid(int64 val)
static void saveData(std::ostream &os, fpreal64 v)
static void loadData(UT_IStream &is, UT_Vector3D &v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:667
static void loadData(UT_IStream &is, UT_StringHolder &v)
exint opOutputs(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
UT_Matrix3D opinstOutputs_output_shape(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void saveData(std::ostream &os, bool v)
const UT_Array< Inputs > & getInputs() const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
static void loadData(UT_IStream &is, fpreal64 &v)
bool opinstOutputs_output_channelfirst(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
SYS_FORCE_INLINE UT_StringHolder getToken(BatchMode enum_value)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:428
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
SYS_FORCE_INLINE bool isstring() const
bool operator==(const Inputs &src) const
bool opKeepInput(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
int64 opDeviceid(const SOP_NodeVerb::CookParms &cookparms) const
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:665
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static int version()