/usr/local/lib64/python3.6/site-packages/caffe2/python/onnx/__pycache__
NameSizeModeActions
backend.cpython-36.pyc289010644editdlrm
backend_cpp_rep.cpython-36.pyc18690644editdlrm
backend_rep.cpython-36.pyc20610644editdlrm
error.cpython-36.pyc4500644editdlrm
frontend.cpython-36.pyc103440644editdlrm
helper.cpython-36.pyc36290644editdlrm
onnxifi.cpython-36.pyc16310644editdlrm
test_onnxifi.cpython-36.pyc61310644editdlrm
workspace.cpython-36.pyc25900644editdlrm
__init__.cpython-36.pyc1540644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/caffe2/python/onnx/__pycache__/backend.cpython-36.pyc (28901B)
3 EgР@sfdZddlZddlZddlZddlZddlZddlmZm Z m Z m Z ddl m Z ddlmZddlZddlZddlZddlmZddlZddlZddlZddlZddlmZmZmZmZddlmZdd l m!Z!ddl"j#j$Z%ddl&Z&d d Z'd d Z(Gddde)Z*ddZ+Gddde,Z-ej.ddddgZ/GdddeZ0e0j1Z1e0j2Z2e0j3Z3e0j4Z4e0j5Z5e0j6Z6dS)zaBackend for running ONNX on Caffe2 To run this, you will need to have Caffe2 installed as well. N)core workspacernn_cellgru_cell) ModelHelper) caffe2_pb2) TensorProto)BackendDevice DeviceTypenamedtupledict) Workspace) Caffe2Repc Cs$y |jdStk r|SXdS)Nzutf-8)decodeAttributeError)srF/usr/local/lib64/python3.6/site-packages/caffe2/python/onnx/backend.py force_unicode's rcCs(tjtjtjtji}tj||j|j S)N) r CPUrZCUDArZ GpuDeviceTyperZ DeviceOptiontypeZ device_id)devicemrrrget_device_option-s rc@s,eZdZdZeddZddfddZdS) OnnxAttributeszx This is a more convenient way to work with ONNX/Caffe2 attributes that is not the protobuf representation. cCs&t}x|D]}t|||j<q W|S)N)rconvertAttributeProtoname)argsdargrrr from_onnx8s zOnnxAttributes.from_onnxcCs|S)Nr)krrr?szOnnxAttributes.ccs<x6|jD]*\}}||dkr tjjj|||Vq WdS)N)itemscaffe2pythonutils MakeArgument)selfkmapr!vrrrr%?s zOnnxAttributes.caffe2N)__name__ __module__ __qualname____doc__ staticmethodr r%rrrrr3s rcCs|jdr|jS|jdr |jS|jdr0|jS|jdr@|jS|jdrZtj|jtjSt |j rnt |j St |j rt |j St |j rt |j St |jrg}x"|jD]}|jtj|tjqW|Stdj|dS)z Convert an ONNX AttributeProto into an appropriate Python object for the type. NB: Tensor attribute gets returned as the straight proto. firtgzUnsupported ONNX attribute: {}N)HasFieldr1r2rr3 Caffe2Backend _graph_to_netr4_known_opset_versionlenfloatslistintsstringsgraphsappend ValueErrorformat)Zonnx_argretvalr4rrrrEs,             rc@seZdZdZddZdS)OnnxNodeaX Reimplementation of NodeProto from ONNX, but in a form more convenient to work with from Python. We may temporarily edit these nodes to get them into Caffe2 form, before actually translating into the Caffe2 protobuf, since this is easier than decomposing everything, and putting it back together when we're ready. cCsBt|j|_t|j|_tj|j|_t|j|_ t|j |_ dS)N) strrop_typerr attributeattrsr;inputinputsoutputoutputs)r)noderrr__init__qs    zOnnxNode.__init__N)r,r-r.r/rMrrrrrCgs rC Caffe2Opsopsinit_opsinterface_blobscseZdZdZiZdddddddd d dd d d ddddddZddiZddiddiddidddddiddidd d!d"d#d$d%Zd&d&d&d'd(d)d*d+Ze j Z e d,d-Z e d.ed/ffd0d1 Ze ded2d3Ze d4d5Ze d6d7Ze d8d9Ze d:d;Ze dd?Ze d@dAZe dBdCZe dDdEZe dFdGZe dHdIZe dJdKZedfdMdNZe dgdOdPZe dhfdQdR Ze dSdTZ dUdVhZ!e dWdXZ"edYdZZ#e d[d\Z$e d]d^Z%e d.efd_d`Z&e dadbZ'e difdcdd Z(Z)S)jr6 ZMaxPoolZ AveragePoolZPadImageZNegativeZ SpatialBNZ InstanceNormZ BatchMatMulZ ResizeNearestCopyZEQLTGT ExpandDims ONNXWhileZ NumpyTileZ GaussianFillZ UniformFill)Z GlobalMaxPoolZGlobalAveragePoolZPadZNegZBatchNormalizationInstanceNormalizationZMatMulUpsampleZIdentityrXZEqualZLessZGreater UnsqueezeLoopTile RandomNormal RandomUniformZ kernel_shapeZkernelsaxesdimsZpermr#)modeZscalesZoutput_paddingZadjsgammaZscalethen_netelse_net)Z then_branchZ else_branchminmax)lowhigh)SqueezerZ TransposerYZ ConvTransposeZSeluIfr^_create_rnn_variant _create_loop _create_ifZ_create_upsampleZ_create_gaussian_fill)LSTMGRURNNr[rkrYr]cCs |jjS)N) _dummy_nameZnew_dummy_name)clsrrr dummy_nameszCaffe2Backend.dummy_namerNcstt|j|||||dg}tt|}ttj|jt|t rx|j D]<\}} j || |j t jj|t jj| j| jdjqRWn~t|jt|kstdj|jt|jt|xLt|j|D]<\}} j || |j t jj|t jj| j| jdjqWg} tj|j} | j|j||} xB| d| dD].} tj}|j | |j!j"|| j |qFWj#| fdd|j$D}t%d|j$|SQRXdS) N)r outputs_info opset_version)r elem_typeshapez{}: expected {} but got {}rcsg|]}j|qSr)Z FetchBlob).0r)wsrr sz*Caffe2Backend.run_node..ZOutputs)&superr6run_noderr r rZ DeviceScope isinstancedictr$FeedBlobr?onnxhelperZmake_tensor_value_infomappingZNP_TYPE_TO_TENSOR_TYPEdtyperxSerializeToStringr9rHAssertionErrorrArEzipCrr convert_noder OperatorDefParseFromString device_optionCopyFromZRunOperatorsOncerJr )rsrLrIrrvru value_infosrkeyvaluerOcbackendZops_strropZ output_values) __class__)r{rr~s@             zCaffe2Backend.run_nodecCsl|s|jst|p|j}tj}|jj}d|_dd}|jtjgkr^d|_ |j j ||n|jtj gkrd|_ |j j ||n|jtj tjgkrd|_ |jj ||n|jtjtjtjtjtjgkrd|_ |jj ||nZ|jtjkr d|_ |jj ||n4|jtjkr.d |_ |jj |jntd j|j|jj}d |_|jj |j|jj||S) z Given an Onnx TensorProto, translate it into a Caffe2 operator which produces the given tensor filling op. valuescSstjj|jjS)N)r numpy_helperto_arrayflattentolist) onnx_tensorrrr tensor2listsz.tensor2listZGivenTensorFillZGivenTensorDoubleFillZGivenTensorInt64FillZGivenTensorIntFillZGivenTensorBoolFillZGivenTensorStringFillzunrecognized tensor type {}rx)rrrrraddZ data_typerFLOATrr:extendZDOUBLEZINT64ZUINT32r<ZUINT8ZINT8ZUINT16ZINT16INT32ZBOOLSTRINGr=Z string_data RuntimeErrorrAr`rJr?)rsrrc2_opZ c2_valuesrZc2_shaperrr_create_tensor_filling_opsH      z'Caffe2Backend._create_tensor_filling_opcsx|D]\}}} fdd|DxLtD]@\} } | || d|f} t| f| \} }|j|| | |dq0W|rfdd|D}|j|df|jgddqWdS) Ncsg|]}d|fqS)z%s/%s_%sr)rzprefix)rname_torrr|+sz5Caffe2Backend._rnn_reform_weights..ry)startsendscsg|] }|qSrr)rzr2) gate_blobsrrr|1sz%s/%sr)axis) enumeraterSliceConcatrt)rsreformsr hidden_sizeinit_netZgatesZreorder_indicesZ name_fromZ do_concatZ extra_dimsr2xZdim0rrZreordered_gate_blobsr)rrrr_rnn_reform_weights(sz!Caffe2Backend._rnn_reform_weightsc" CsX|j}| | }d| |}| |}|j||| |d|g|d|gd} |j||||d|g|d|gd}|j||||d|dg|d|dgd}|j||||d|dg|d|dgd}g}xB|D]:\}}|j|jj|||| dddg| dddgdqW| dkr|dk r6|}n|jj||d}|jj||ddgdgd}|jj||ddgdgd}|jj||g|ddd }|jj|||jgdgd |jj||d tj j d }|| ||||| || dkr|jj ||g|d } n|} |t ||| ||| | |ddd }!| dkrT|jj |!d|g|d|!d<|!S)Nrry)rrz /input_shapez/batch_size_slicez/seq_len_slicez/dummy_sequence_lens)r)rxz/seq_lens_for_reverse)Ztoz/input-reversedFT)Z drop_statesZ forward_onlyz/output-reversedrrrr) rtrr?netZShaper\ReshapeZCastrZDataTyperZReversePackedSegsr;)"rs input_blobBWRZinitial_states_and_names sequence_lenspred_mhr input_sizerZ num_gatesdirection_offsetBiBrW_R_reform make_cellZ keep_outputsrZgates_hidden_sizeZ bias_offsetZ weight_offsetZinitial_states_slicedZ initial_stateZ name_suffixZseq_lens_for_reverseZ input_shapeZ batch_sizeZseq_lenZdummy_sequence_lensrHrKrrr_make_rnn_direction4sd             z!Caffe2Backend._make_rnn_directioncs|dk std|dk s tdt|j}|jdt|jdd}|jdkrht|jdd*djn|jd kr~|jd d | std t|j|d+kstd |jd,kr|j \ n|jdkr|j \ dkrdxRt j |j j |j j|j j |j jD]&}|jkr|jjjjdj PqWtdttjdjjgdd-dgdjdgdjjgdd.dgdjdgdjjgdd/gdjdgd|jdkr(ddfdd  f dd}n|jd krrfdd fdd  f dd}nF|jdkrfddd d  fd!d}|dkrF|dx0tdtD]} jj| |j | qWdk r"jj!dgdgjj"dg|j dgdgdn|d kr>|d} |d} jj#| d| dgjjgdd"\} } dk rjj!| g| gjj| jjgddd0dgd\}} jj$||j ddddd#gd$xFtdt|j D]2} jj#| | | | g|j | jgdd"qWd%d&|j j%D d'd&|j j&Dt' fd(d)fD}g}g}|r|n|j(j)j*|j(j)j*t+||t,j)j-S)1Nz4cannot convert RNNs without access to the full modelr directionforwardrqZ activationstanhrrplinear_before_resetzunsupported RNN attributes: bidirectionalz"unsupported backwards RNN/GRU/LSTMror#rz3best-effort shape inference for RNN/GRU/LSTM failedzinit-netry)rx)r`cWsdS)Nr)rrrrrsz1Caffe2Backend._create_rnn_variant..reformcstj|di|S)N activation)rZBasicRNN)rkwargs)rrrrsz4Caffe2Backend._create_rnn_variant..make_cellcs8jdfg d|dddd ddS) Nz /initial_hryz/i2h_bz /gates_t_bz/i2h_wz /gates_t_wcSs|S)Nr)rrrrr"szECaffe2Backend._create_rnn_variant..make_rnn..)r)r) rrrrsrr initial_hrrrrrrrrmake_rnns  z3Caffe2Backend._create_rnn_variant..make_rnnc sT|dddgf|dddgf|ddgf|ddgff}j||||d d d gddd gdS)Ni2h_wTrryZgate_t_wFi2h_bZgate_t_bupdateresetrJrr)rrr)rr)r)rrrrrrrr)rsrrrs     cstj|di|S)Nr)rrp)rr)rrrrscs8jdfg d|dddd ddS) Nz /initial_hZ _bias_i2hZ _bias_gatesz /i2h_w_prez/gates_t_w_precSs|S)Nr)rrrrr"szECaffe2Backend._create_rnn_variant..make_rnn..)r)r) rrrrsrrrrrrrrrrrrs  c sX|dddgf|dddgf|ddgf|ddgff}j||||dd d d gdd dd gdS)NrTrryZ gates_t_wrZ gates_t_brHrJZforgetcellrrr)rrr)rr)r)rrrrrrrr)rsrrrs     c_s tj||S)N)rro)rrrrrrscs>jdfdfg  d|dddd dd S) Nz /initial_hz /initial_cz/i2h_bz /gates_t_bz/i2h_wz /gates_t_wcSs|d|d|dgS)Nrryrr)rrrrr"szECaffe2Backend._create_rnn_variant..make_rnn..)r)r)rrrrsrr initial_crrrrrrrrrrs  )rr)r_cSsh|] }|jqSr)r)rzr2rrr sz4Caffe2Backend._create_rnn_variant..cSsh|]}|jD]}|qqSr)rJ)rzrLrJrrrrsc3s|]}|kp|kVqdS)Nr)rzr) initializersrKrr sz4Caffe2Backend._create_rnn_variant..)r)rr)rqrprrrr).rrrGpoprrElowerrDkeysrI itertoolschaingraphrH value_inforr tensor_typerxdim dim_valuerrrZNetrrtriranger9rrSrKZVariableLengthSequencePaddingrVrrj initializerrLallrZProtorrNr;external_input)rs init_model pred_modelnrvrGrrrr2Z outputs_fZ outputs_bZconcatted_output_Zreshaped_outputZhas_initializersZpred_opsrPr)rrrrrsrrrrrrrrrrKrrrrrlys            &  &  &  $ ( *  z!Caffe2Backend._create_rnn_variantcCsHg}d|jkr|j|jd|j||||}|jj|t|gggS)N__control_inputs)rGr_common_onnx_node_to_caffe2_opZ control_inputrN)rsrrrrvcontrol_inputsrLrrr_create_control_ops   z Caffe2Backend._create_control_opcCspx<|jD]2}x,t|jD]\}}||kr|||j|<qWqWx,t|jD]\}}||krJ|||j|<qJWdS)N)rrrJexternal_output)rsrZ remap_dictrr2routrrr _remove_ssas zCaffe2Backend._remove_ssacCs|j||||}|ddjdks&t|dd}d}}g} x>|jD]4} | jdkrZ| j}| jdkrj| j}| jdkrF| j} qFW|r|st|j} |j} |j} t | t | kstt | t | kstx>|jD]4} | jdkr| jj j | | jdkr| jj j | qW|S)Nrrkrcrdr) rrrrrrr=rrJr9rr)rsrrrrvrOZif_oprcrdrrZ then_net_outsZ else_net_outsZ op_outputsrrrrn!s0          zCaffe2Backend._create_ifc Cs|j||||}|ddjdks&t|dd}|jjtjjjddg|jjtjjjddg|jjtjjjddgg}x|jD]}|j dkr|j }qWd} x6|jD],}|j dkrt |j j d } |j j j|qW|jjtjjjd | g|S) NrrWZhas_trip_countTZhas_condZdisable_scopesrbodyrnum_loop_carried_deps)rrrrrr%r&r'r(rr=r9rr) rsrrrrvrOZwhile_oprrrrrrrm?s&        zCaffe2Backend._create_loopcCsD|jdr@|jtdkr@|j|kr4tdj|jn ||j|_dS)Nraw_datas __EXTERNALzBTensorProto for value {} referenced raw data but it was not found!)r5rbytesrrrA)rstpraw_values_dictrrr_substitute_raw_valueWs z#Caffe2Backend._substitute_raw_valuecCsx|D]}xz|jD]p}|jdr.|j|j|x|jD]}|j||q6W|jdrd|j|jj|x|jD]}|j|j|qlWqWqWdS)Nr3r4) rFr5rr3Ztensors _visit_and_substitute_raw_valuesr4rLr>)rsZnodesrrLattrr3r4rrrr_s      z.Caffe2Backend._visit_and_substitute_raw_valuescCs2x|jjD]}|j||q W|j|jj|dS)N)rrrrrL)rsmodelrinitrrr_external_value_resolution_passlsz-Caffe2Backend._external_value_resolution_passcCs*x$|D]}|j|jtjj||qWdS)N)rrrrr)rsrr{rrrrr_direct_initialize_parametersts z+Caffe2Backend._direct_initialize_parameterscCs`xZ|D]R}|j|krqtdd|jjjjD}|j|jtj|t j j |jjj d|qWdS)Ncss|] }|jVqdS)N)r)rzrrrrr~sz:Caffe2Backend._direct_initialize_inputs..)r) rr;rrrxrrnpZonesrrZTENSOR_TYPE_TO_NP_TYPErw)rsrI initializedr{rrrxrrr_direct_initialize_inputsys  z'Caffe2Backend._direct_initialize_inputsFcCs:ddddg}|r|jd|r(|jdtjj||}|S)NZfuse_consecutive_transposesZeliminate_nop_transposeZfuse_transpose_into_gemmZlift_lexical_referencesZ split_initZ split_predict)r?rZ optimizeroptimize)rHrpredictZpassesrrrr optimize_onnxs  zCaffe2Backend.optimize_onnxc Kstj|ddr}|jdd}tj|}WdQRXt|jtd}i}x0|D](} |j| d} | j|| <WdQRXqPWWdQRX|j||fd|i|S)Nr)raZ __MODEL_PROTOr) zipfileZipFileopenrloadsetnamelistreadprepare) rsfilerrzr1rZ blob_namesrrZ blob_filerrrprepare_zip_archives $z!Caffe2Backend.prepare_zip_archivec sp|jdds"tt|j||f|d}x`|jD]V}|jd sH|jdkrr|j}|j|jkrt j dj |j|jq.t j dj |jq.W|dkr|j dkrt d nd }ytjj|}Wnt k rt j d YnXt}tt|}|j|||d\} } |r|j|||j|jj||d d |jjD|j|jj||fdd|jjD} t| | || } | S)a For Onnx Caffe2Backend, we require that init_graph don't initialize the actual input of the predict_graph, for example, if "img" is the input blob for the predict_net, we require that in init_graph and in initializer of the predict_graph, "img" is not initalized. We don't have a check for this, since there is no way we can know which blob is the input of the predict_graph. Zno_check_UNSAFEFNdomainr#aThis version of onnx-caffe2 targets ONNX operator set version {}, but the model we are trying to import uses version {}. We will try to import it anyway, but if the model uses operators which had BC-breaking changes in the intervening versions, import will fail.zUnrecognized operator set {}rz^Model with IR version >= 3 did not specify ONNX operator set version (onnx-caffe2 requires it)ryzGShapeInferenceWarning: Inferred shape and existing shape differ in rankcSsh|] }|jqSr)r)rzrrrrrsz(Caffe2Backend.prepare..csg|]}|jkr|jqSr)r)rzr)rrrr|sz)Caffe2Backend.prepare..)rr}r6r Z opset_importr5rversionr8warningswarnrAZ ir_versionrrZshape_inferenceZ infer_shapesr rr _onnx_model_to_caffe2_netrrrrrrHr) rsrrrrrvimpr{rrZ predict_netZ uninitializedrB)r)rrr sF       zCaffe2Backend.preparecCs^tj|j}|j|jrg}xR|jD]H}|dk r$x:tj|jj|jj |jj D]}|j |krL|j |j qLWq$W|j|j ||} g} x,| dD] } tj} | j| | j | qWg} x,| dD] } tj} | j| | j | qWt| | gS|j|jkrt||j|j}n|j}|||t||} t| tr<| St| tjjsR| g} t| ggS)Nrry)rr6rrZsupport_onnx_importrErHrrrrJrrr?rrrrrrN_special_operatorsgetattrrrCr collectionsabcIterable)rsrrZnode_defrvrrrviZop_strsrPrrrOZ translatorrrr_onnx_node_to_caffe2_ops>         z%Caffe2Backend._onnx_node_to_caffe2_opAddSubc s tj}|jj|j|jj|j|j|_|jj j t d}||kr^t dj ||jj |_tj|jst dj fdd}|jj|jj|d|dkr|jjkrd}x|jD]} | jd krd }qW|s|jjtjjjd d g|S) a This translator performs the basic translation of ONNX nodes into Caffe2 operators. Besides doing a straightforward marshalling from one format to another, it also does these extra things: - Renames operators based on '_renamed_operators' - Renames attributes based on '_global_renamed_attrs' and '_per_op_renamed_attrs' If you're writing a custom translator, consider calling this first, and then fixing things up further. ZInfzXDon't know how to translate op {} in ONNX operator set v{} (I only support prior to v{})z!Don't know how to translate op {}cs>jkr&|jkr&j|S|jkr:j|S|S)N)_per_op_renamed_attrs_global_renamed_attrs)r!)rs onnx_op_typerrr*,s    z:Caffe2Backend._common_onnx_node_to_caffe2_op..kmap)r*F broadcastTry)rrrHrrIrJrKrrE_broken_operatorsgetfloatr@rA_renamed_operatorsrrZ IsOperatorrrGr%_broadcast_operatorsr&r'r() rsrrZ onnx_nodervrZbroken_versionr*Zalready_broadcastrr)rsr"rr s0     z,Caffe2Backend._common_onnx_node_to_caffe2_opcCsl|dkrtSt}|jdd|jD|jdd|jDx&|jD]}|j|j|j|jqHW|S)Ncss|] }|jVqdS)N)r)rzrrrrrHsz4Caffe2Backend._all_names_in_graph..css|] }|jVqdS)N)r)rzrrrrrIs)r rrHrJrL)rnamesrLrrr_all_names_in_graphBs  z!Caffe2Backend._all_names_in_graphcCstj}x||jD]r}y|jdd||}Wn.tk rV}ztd|wWYdd}~XnX|jj|j|jj|j |j j|j qW|j jdd|j D|j jdd|jD|S)Nz ONNX FATAL:css|] }|jVqdS)N)r)rzrrrrr]sz.Caffe2Backend._graph_to_net..css|] }|jVqdS)N)r)rzrrrrr_s)rNetDefrLr ExceptionprintrrrPrOrrQrrJrH)rsZ onnx_graphrvrrLc2opserrrr7Os   zCaffe2Backend._graph_to_netc#sVtt|}ytjj|}WnBtk r:tjdYn&tk r^tjdj tj YnXy j |dd}j |dd}Wn.tk rtjdj tj |}|}YnXt j }t j } |jjd|_|jjd| _|r|jjfd d |jjDjjj|jj|jBg} x||f| |ffD]\} } | jj|x| jjD]} yj||| |}WnNtk r}z0d j | |}| j|td |tjd wTWYdd}~XnX|jj|j| jj|j | j!j|j"qTW| j#jdd | jj$D| j!jdd | jj%Dq6Wt&| dkrNtdj t&| dj'| || fS)NzGShapeInferenceWarning: Inferred shape and existing shape differ in rankz@ShapeInferenceWarning: utils module not found in ONNX version {}T)r)rz?OptimizerWarning: optimizer module not found in ONNX version {}_initZ_predictc3s|]}j|VqdS)N)r)rzr)rsrrrsz:Caffe2Backend._onnx_model_to_caffe2_net..z.Error while processing node: {}. Exception: {}z ONNX FATAL:)rcss|] }|jVqdS)N)r)rzrrrrrscss|] }|jVqdS)N)r)rzrrrrrsrz2ONNX conversion failed, encountered {} errors: {}z )(rr rr'Z polish_modelrrrrrA __version__rrr,rrrrrrrrr+rrrLrr-r?r.sysstderrrPrOrrQrrJrHr9join)rsZ onnx_modelrrvinclude_initializersrrrrZpred_neterrorsrrrLr/r0msgr)rsrrbsZ      z'Caffe2Backend._onnx_model_to_caffe2_netcCs|j|||ddS)NT)rrvr6)r)rsrrrvrrronnx_graph_to_caffe2_netsz&Caffe2Backend.onnx_graph_to_caffe2_netcCs.t|}|jtjkrdStj|jr*tjSdS)NTF)r rr rrZIsGPUDeviceTyperZhas_gpu_support)rsZ device_strrrrrsupports_devices   zCaffe2Backend.supports_devicec s>ttt|dr:ttt|jr:tt|j||f|s:dSdS)N is_compatibleFT)hasattrr}r6callabler;)rsrrr)rrrr;s zCaffe2Backend.is_compatible)N)FF)r)rN)r)*r,r-r.r8r%r(r!r rrZ DummyNamerr classmethodrtr~rrrrlrrrnrmrrrrrr0rrr rr)rr+r7rr9r:r; __classcell__rr)rrr6|s    % 4 E         > + 5  > r6)7r/rr3rrZ onnx.backendrZ caffe2.pythonrrrrZcaffe2.python.model_helperrZ caffe2.protorZcaffe2.python.utilsr%ZnumpyrrZonnx.numpy_helperZ onnx.defsZonnx.shape_inferenceZ onnx.utilsZonnx.backend.baser r r r Zcaffe2.python.onnx.workspacer Zcaffe2.python.onnx.backend_reprZ!caffe2.python._import_c_extensionr&Z_import_c_extensionrrrrrrrobjectrC namedtuplerNr6r rr~Z run_modelr:r;rrrrsP      "@