/* Ċ Ġ* Ġ Ġ************************************************************************* ***** Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠThis Ġprogram Ġand Ġthe Ġaccompanying Ġmaterials Ġare Ġmade Ġavailable Ġunder Ġthe Ċ Ġ* Ġ Ġ* Ġterms Ġof Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġwhich Ġis Ġavailable Ġat Ċ Ġ* Ġ Ġ* Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ċ Ġ* Ġ Ġ* Ġ Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT Ċ Ġ* Ġ Ġ* ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe Ċ Ġ* Ġ Ġ* ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* Ġ Ġ************************************************************************* **** Ċ Ġ*/ Ċ package Ġorg . nd 4 j . same diff . framework import . runner Ċ Ċ import Ġorg . nd 4 j . aut od iff . functions . Differ ential Function Ċ import Ġorg . nd 4 j . aut od iff . same diff . Same Diff Ċ import Ġorg . nd 4 j . aut od iff . same diff . Variable Type Ċ import Ġorg . nd 4 j . common . io . Reflection Utils Ċ import Ġorg . nd 4 j . graph . Op Type Ċ import Ġorg . nd 4 j . ir . Op Namespace Ċ import Ġorg . nd 4 j . linalg . api . ndarray . IND Array Ċ import Ġorg . nd 4 j . linalg . api . ops . Custom Op Ċ import Ġorg . nd 4 j . linalg . api . ops . Dynamic Custom Op Ċ import Ġorg . nd 4 j . linalg . api . ops . Op Ċ import Ġorg . nd 4 j . linalg . factory . Nd 4 j Ċ import Ġorg . nd 4 j . same diff . framework import . context . Mapping Context Ċ import Ġorg . nd 4 j . same diff . framework import . convert Nd 4 j DataType FromName Space Tensor DataType Ċ import Ġorg . nd 4 j . same diff . framework import . ndarray FromName Space Tensor Ċ import Ġorg . nd 4 j . same diff . framework import . setName For Function From Descriptors Ċ import Ġorg . nd 4 j . shade . protobuf . GeneratedMessageV 3 Ċ import Ġorg . nd 4 j . shade . protobuf . Protocol Message Enum Ċ import Ġorg . nd 4 j . weight init . impl . Zero Init Scheme Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjava . lang . reflect . Modifier Ċ Ċ /** Ċ Ġ* ĠThe Ġdefault Ġimplementation Ġof Ġ[ Import Runner ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠAdam ĠG ib son Ċ Ġ*/ Ċ class ĠDefault Import Runner < GRAPH _ TYPE : ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠNODE _ TYPE Ġ: ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠOP _ DEF _ TYPE Ġ: ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠT ENSOR _ TYPE Ġ: ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠATTR _ DEF _ TYPE Ġ: ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠATTR _ VALUE _ TYPE Ġ: ĠGenerated Message V 3 , ĊĠĠĠĠĠĠĠ ĠDATA _ TYPE : ĠProtocol Message Enum > Ġ: ĠImport Runner < GRAPH _ TYPE , ĊĠĠĠĠĠĠĠ ĠNODE _ TYPE , ĊĠĠĠĠĠĠĠ ĠOP _ DEF _ TYPE , ĊĠĠĠĠĠĠĠ ĠT ENSOR _ TYPE , ĊĠĠĠĠĠĠĠ ĠATTR _ DEF _ TYPE , ĊĠĠĠĠĠĠĠ ĠATTR _ VALUE _ TYPE , ĊĠĠĠĠĠĠĠ ĠDATA _ TYPE > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< GRAPH _ TYPE Ġ: ĠGenerated Message V 3 , ĠNODE _ TYPE Ġ: ĠGenerated Message V 3 , ĠOP _ DEF _ TYPE Ġ: ĠGenerated Message V 3 , ĠT ENSOR _ TYPE Ġ: ĠGenerated Message V 3 , ĠATTR _ DEF _ TYPE Ġ: ĠGenerated Message V 3 , ĠATTR _ VALUE _ TYPE Ġ: ĠGenerated Message V 3 , ĠDATA _ TYPE Ġ: ĠProtocol Message Enum > Ġinit Attributes ( ĊĠĠĠĠĠĠĠ Ġdf : ĠD iffer ential Function , ĊĠĠĠĠĠĠĠ Ġsd : ĠSame Diff , ĊĠĠĠĠĠĠĠ Ġdescriptor And Context : ĠPair < Mapping Context < GRAPH _ TYPE , ĠNODE _ TYPE , ĠOP _ DEF _ TYPE , ĠT ENSOR _ TYPE , ĠATTR _ DEF _ TYPE , ĠATTR _ VALUE _ TYPE , ĠDATA _ TYPE >, ĠOp Namespace . Op Descriptor > ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġapplied Ġ= Ġdescriptor And Context ĊĠĠĠĠĠĠĠ Ġval Ġmapping Context Ġ= Ġapplied . first ĊĠĠĠĠĠĠĠ Ġwhen Ġ( df . op Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp . Type . CUSTOM , Op . Type . LOGIC Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdynamic Custom Op Ġ= Ġdf Ġas ĠDynamic Custom Op ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrouped Ġ= Ġdescriptor And Context . second . arg Descriptor List . groupBy Ġ{ Ġdescriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . arg Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Map Ġ= ĠHashMap < Op Namespace . Arg Descriptor . Arg Type , ĠList < Op Namespace . Arg Descriptor >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrouped . forEach Ġ{ Ġ( arg Type , Ġlist ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map [ arg Type ] Ġ= Ġlist . sorted By Ġ{ Ġarg Ġ-> Ġarg . arg Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map . forEach Ġ{ Ġ( arg Type , ĠlistOf Args Sorted ByIndex ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INPUT _ T ENSOR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( df . op Type () Ġ!= ĠOp . Type . LOGIC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġop Inputs Ġ= Ġsd . ops [ dynamic Custom Op . own Name ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( input Ġin Ġop Inputs !!. inputs To Op ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif ( mapping Context . graph (). has Constant Initializer ( input )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ input }: 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// re moves Ġthe Ġsuffix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! sd . has Variable ( input )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( mapping Context . graph (). has Constant Initializer ("${ input }: 0 ") Ġ|| Ġsd . has Variable ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsd . rename Variable ( name , input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġdynamic Custom Op . args () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarrays ToAdd Ġ= ĠArrayList < IND Array >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Indexed Ġ{ Ġindex , Ġarg Descriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Tensor Ġ= Ġndarray FromName Space Tensor ( arg Descriptor . input Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġargs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġargs [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg . variable Type Ġ!= ĠVariable Type . ARRAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg . shape Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Long Array Ġ= ĠLong Array ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg . set Shape (* empty Long Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrays ToAdd . add ( converted Tensor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// note Ġwe Ġdon 't Ġadd Ġarrays Ġone Ġat Ġa Ġtime Ġbecause Ġadd Input Argument Ġrequires Ġall Ġthe Ġinput Ġarrays Ġto Ġbe Ġadded Ġat Ġonce ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// dynamic Custom Op . add Input Argument (* array sTo Add . to Typed Array ()) ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 6 4 , ĠOp Namespace . Arg Descriptor . Arg Type . INT 3 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Ġ{ Ġdynamic Custom Op . add I Argument ( it . int 6 4 Value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . DOUBLE , ĠOp Namespace . Arg Descriptor . Arg Type . FLOAT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Ġ{ Ġdynamic Custom Op . add T Argument ( it . doubleValue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . OUTPUT _ T ENSOR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Tensor Ġ= Ġndarray FromName Space Tensor ( it . input Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Custom Op . add Output Argument ( converted Tensor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// allow Ġstrings , Ġbut Ġonly Ġfor Ġcases Ġof Ġsetting Ġa Ġvalue Ġin Ġjava ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . STRING Ġ-> Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . BOOL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Custom Op . add B Argument ( it . bool Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . DATA _ TYPE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Args Sorted ByIndex . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdtype Ġ= Ġconvert Nd 4 j DataType FromName Space Tensor DataType ( it . dataType Value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdtype Java Class Ġ= ĠClass . forName (" org . nd 4 j . linalg . api . buffer . DataType ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Custom Op . add D Argument ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . java Class . declared Fields . forEach Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Modifier . is Static ( field . modifiers ) Ġ&& Ġ! Modifier . is Final ( field . modifiers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġdtype Java Class . isAssignableFrom ( field . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( field , Ġdf , Ġdtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Illegal Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġany Ġleft Ġover Ġfields Ġif Ġthey 're Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetName For Function From Descriptors ( listOf Args Sorted ByIndex , Ġdf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Op Ġ= Ġdf Ġas ĠCustom Op ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// important Ġto Ġcall Ġthis Ġas Ġwe Ġmay Ġnot Ġhave Ġconfigured Ġall Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Op . configure From Arguments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . configure With Same Diff ( sd ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp . Type . SCAL AR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplied . second . arg Descriptor List . forEach Ġ{ Ġarg Descriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠReflection Utils . find Field ( df . java Class , Ġarg Descriptor . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg Descriptor . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x ", Ġ" y ", Ġ" z " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated ND Array Ġ= Ġmapping Context . tensor Input For ( arg Descriptor . name ). to Nd 4 j ND Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( field , Ġdf , Ġcreated ND Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscalar Field Ġ= ĠReflection Utils . find Field ( df . java Class , Ġ" scalar Value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscalar Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// access Ġthe Ġfirst Ġinput Ġ( should Ġhave Ġbeen Ġset ) Ġand Ġmake Ġsure Ġthe Ġscalar Ġtype Ġis Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// the Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Value Ġ= Ġdf . arg ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdtype Ġ= Ġfirst Value . dataType () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg Descriptor . arg Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . DOUBLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . doubleValue ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . FLOAT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . float Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 3 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . int 3 2 Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 6 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . int 6 4 Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg Descriptor . arg Type Ġin ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 6 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . DOUBLE , ĠOp Namespace . Arg Descriptor . Arg Type . INT 3 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . FLOAT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscalar Field Ġ= ĠReflection Utils . find Field ( df . java Class , Ġ" scalar Value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscalar Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// access Ġthe Ġfirst Ġinput Ġ( should Ġhave Ġbeen Ġset ) Ġand Ġmake Ġsure Ġthe Ġscalar Ġtype Ġis Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// the Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġir Node Ġ= Ġmapping Context . ir Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Value Ġ= Ġsd . get Variable ( ir Node . input At ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdtype Ġ= Ġfirst Value . dataType () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg Descriptor . arg Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . DOUBLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . doubleValue ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . FLOAT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . float Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 3 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . int 3 2 Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOp Namespace . Arg Descriptor . Arg Type . INT 6 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnd 4 j Scalar Value Ġ= ĠN d 4 j . scalar ( arg Descriptor . int 6 4 Value ). cast To ( dtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( scalar Field , Ġdf , Ġnd 4 j Scalar Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġany Ġleft Ġover Ġfields Ġif Ġthey 're Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetName For Function From Descriptors ( applied . second . arg Descriptor List , Ġdf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhas Dimensions Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( df . op Type () Ġ== ĠOp . Type . RED UCE _ LONG Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . op Type () Ġ== ĠOp . Type . RED UCE _ BOOL Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . op Type () Ġ== ĠOp . Type . RED UCE _ FLOAT Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . op Type () Ġ== ĠOp . Type . RED UCE _ SAME Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . op Type () Ġ== ĠOp . Type . INDEX RED UCE Ġ&& Ġdf . args (). size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dimensions Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplied . second . arg Descriptor List . forEach Ġ{ Ġarg Descriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg Descriptor . name Ġ== Ġ" dimensions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Dimensions Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠReflection Utils . find Field ( df . java Class , Ġarg Descriptor . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( arg Descriptor . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x ", Ġ" y ", Ġ" z " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated ND Array Ġ= Ġmapping Context . tensor Input For ( arg Descriptor . name ). to Nd 4 j ND Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( field , Ġdf , Ġcreated ND Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" keep Dims " Ġ-> ĠReflection Utils . setField ( field , Ġdf , Ġarg Descriptor . bool Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Dimensions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// dimensions Ġsorted Ġby Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdim Args : ĠInt Array Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . args (). size Ġ> Ġ 1 Ġ&& Ġdf . arg ( 1 ). arr Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf . arg ( 1 ). arr . toInt Vector () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplied . second . arg Descriptor List . filter Ġ{ Ġarg Descriptor Ġ-> Ġarg Descriptor . name . contains (" dimensions ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġarg Descriptor Ġ-> Ġarg Descriptor . arg Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġarg Descriptor Ġ-> Ġarg Descriptor . int 6 4 Value . toInt () Ġ}. to IntArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdimensions Field Ġ= ĠReflection Utils . find Field ( df . java Class , Ġ" dimensions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdimension z Field Ġ= ĠReflection Utils . find Field ( df . java Class , Ġ" dimension z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisEmpty Reduce Ġ= ĠReflection Utils . find Field ( df . java Class ," isEmpty Reduce ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dimensions Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimensions Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( int ArrayOf ( 0 ). java Class . isAssignableFrom ( dimensions Field . type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( dimensions Field , Ġdf , Ġdim Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dimension z Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdimension z Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( IND Array :: class . java . isAssignableFrom ( dimension z Field . type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠN d 4 j . create Buffer ( dim Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Arr Ġ= ĠN d 4 j . create ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( dimension z Field , Ġdf , Ġcreated Arr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isEmpty Reduce Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Reduce . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( dim Args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReflection Utils . setField ( isEmpty Reduce , df , true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġany Ġleft Ġover Ġfields Ġif Ġthey 're Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetName For Function From Descriptors ( applied . second . arg Descriptor List , Ġdf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }