
    PhC                         d Z 	 ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlZdZg dZd Zd ZdefdZd	 Zd
 Zd ZdddZy)a-  
model_dump: a one-stop shop for TorchScript model inspection.

The goal of this tool is to provide a simple way to extract lots of
useful information from a TorchScript model and make it easy for humans
to consume.  It (mostly) replaces zipinfo, common uses of show_pickle,
and various ad-hoc analysis notebooks.

The tool extracts information from the model and serializes it as JSON.
That JSON can then be rendered by an HTML+JS page, either by
loading the JSON over HTTP or producing a fully self-contained page
with all of the code and data burned-in.
    N)Dicti @  )get_storage_infohierarchical_pickleget_model_infoget_inline_skeletonburn_in_infoget_info_and_burn_skeletonc                    t        | t        j                  j                  j                        sJ | j
                  dk(  sJ | j                  dk(  sJ | j                  J t        | j                  t              sJ t        | j                        dk(  sJ | j                  d   }t        |t              sJ t        |      dk(  sJ |d   dk(  sJ t        |d   t        j                  j                  j                        sJ |d   j
                  dk(  sJ |d   j                  j                  d      sJ |d   j                  j                  dd	      gt        |d
d        z   }|S )Npersobj   r      storagetorchStorage    )
isinstancer   utilsshow_pickle
FakeObjectmodulenamestateargstuplelen	FakeClassendswithreplacelist)r   sastorage_infos      jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/utils/model_dump/__init__.pyr   r   Z   sH   gu{{66AABBB>>V###<<5   ==   gllE***w||!!!	aBb%   r7a<<a5IbeU[[44>>???a5<<7"""a5::y)))qEJJ&&y"56bfEL    c           
         t        | t        t        t        t        t        d       f      r| S t        | t              r| D cg c]  }t        |       c}S t        | t              rdt        t        |             iS t        | t              rFdt        t        | j                                     t        t        | j                                     dS t        | t        j                  j                  j                        r| j                    d| j"                   }|j%                  d      r)| j&                  dk(  sJ |t        | j(                        dS |dk(  rb| j(                  J t+        | j&                        d	k(  r| j&                  \  }}}}}}n| j&                  \  }}}}}}}	t-        |      }
d
|
||||giS |dk(  r | j(                  J | j&                  \  }}}}}}}t-        |      }
t        |t              sJ t        |d   t        j                  j                  j.                        sJ |d   j                   dk(  sJ |d   j"                  dk(  rIt+        |      dk(  sJ t        |d   t              sJ t        |d   t              sJ t        |dd       }ng }|d   j"                  g|z   }d|
|||||giS |dk(  r:| j(                  J | j&                  \  }}t        |t              sJ t        |      S t1        j2                  d|      r9| j(                  J | j&                  \  }t        |t              sJ t        |      S |dk(  r0| j(                  J | j&                  \  }t        |t              sJ |S |dk(  r=| j(                  J | j&                  \  }t        |t              sJ |t        |f      dS t5        d|       t5        dt        |              c c}w )N__tuple_values__T)__is_dict__keysvalues.)z
__torch__.ztorch.jit.LoweredWrapper.ztorch.jit.LoweredModule. )__module_type__r   ztorch._utils._rebuild_tensor_v2   __tensor_v2__ztorch._utils._rebuild_qtensorr   r   per_tensor_affine   r   r   __qtensor__z"torch.jit._pickle.restore_type_tagz%torch\.jit\._pickle\.build_[a-z]+listztorch.devicezbuiltin.UnicodeDecodeErrorz*Can't prepare fake object of type for JS: z#Can't prepare data of type for JS: )r   boolintfloatstrtyper!   r   r   dictr)   r*   r   r   r   r   r   r   
startswithr   r   r   r   r   re	fullmatch	Exception)datadtypenamer   offsetsizestriderequires_gradhooksmetadatar#   	quantizerquantizer_extraquantizer_jsonr   typlsr   msgs                      r$   r   r   l   s   $sE3T
;<$0451#A&55$ 3DJ ?
 	
 $'TYY[(9:)$t{{}*=>
 	

 $//::;kk]!DII;/ gh99?"?#+,TZZ8  88::%%%499~"FJiiCv}ePTPYPYMv}eX+G4L#lFD&-%XYY66::%%%MQYYJGVT69mU+G4Li///ilEKK,C,C,M,MNNNQ<&&'111|  $779~***!)A,666!)A,444"&y1~"6"$'l//0?BN!L&$Xe#fgg;;::%%%yyHCc3'''&s++<<@(K::%%%))CBb$'''&r**~%::%%%IIEDdC(((K33::%%%99DCc3'''
 $,,cV4  DXJOPP
9$t*F
GGS 6s   O-c                   +,-. t        | t        j                        r0t        j                  |       }| j	                         j
                  }nt        | t              r0| }t        j                  |       j	                         j
                  }nCd}| j                  dt        j                         | j                         }| j                  d       |xs |}t        j                  |       5 .d,g }.j                         D ]  }t!        j"                  dd|j$                        },|,n|,k7  rt'        d, d|       |j)                  t+        |j$                  |j,                  |j.                  |j0                                ,J .j3                  ,d	z         j5                  d
      j7                         },.fd}	 |	d      }
 |	d      }i ++fd}i }.j                         D ]  }|j$                  j9                  d      s .j;                  |      5 }|j3                         }ddd       .j;                  |j$                  dz         5 }|j3                         }ddd       t=        j>                        }d-tA        |      dk(  r2t        |d   t              r|d   dk(  r|\  }-}-fd}tC        ||      }tE        |      }|s|j)                  d       |d   d   tA              k7  r|j)                  tA        |      df       g }tG        ||dd       D ]  \  }}|^}}}|d   }||kD  sJ |\  }}}|\  }} }!tA        |      tA        |jI                  d
            k7  rd}d}||| }"|j)                  |"j5                  d
       ||       |! ||      ||g        |||j$                  <    t!        jJ                  t!        jL                  ,      dz         }#i }$.j                         D ]m  }|#jO                  |j$                        s|j0                  |kD  r/.j;                  |      5 }	 tQ        jR                  |      }%|%|$|j$                  <   ddd       o dh}&i }'.j                         D ]  }|j$                  j9                  d      s.j;                  |      5 }tV        jX                  jZ                  j]                  |d      jS                         }(ddd       t        j^                         })ta        j`                  (|)       |)jc                         }*t        jd                  jg                  |j$                        |&vrtA        |*      |kD  r|*|'|j$                  <    	 ddd       dt+        ||tE        +      
$'
      iS # 1 sw Y   qxY w# 1 sw Y   GxY w# tP        jT                  $ r d|$|j$                  <   Y ~w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w) zGet JSON-friendly information about a model.

    The result is suitable for being saved as model_info.json,
    or passed to burn_in_info.
    bufferr   Nz/.*r   zMismatched prefixes: z != )filenamecompressioncompressed_size	file_sizez/versionzutf-8c                     J j                  d|  dz         5 }t        j                  j                  j	                  |d      j                         }t        |      cd d d        S # 1 sw Y   y xY w)N/.pklTcatch_invalid_utf8)openr   r   r   DumpUnpicklerloadr   )r   handlerawpath_prefixzfs      r$   
get_picklez"get_model_info.<locals>.get_pickle   sg    ***4&~56&kk--;;FW[;\aac*3/ 766s   AA,,A5r=   	constantsc                 2    | vrt              | <   |    S N)r   )sinterned_stringss    r$   istzget_model_info.<locals>.ist   s(    ((&)*:&; ##A&&r%   z.pyz
.debug_pklr1   FORMAT_WITH_STRING_TABLEc                 t    | \  }\  \  }}}}}}dj                  
fd|D              }
|   }	|||	|f||f|fS )Nr   c              3   (   K   | ]	  }|     y wra   r,   ).0x
text_tables     r$   	<genexpr>z;get_model_info.<locals>.parse_new_format.<locals>.<genexpr>  s     "G,Q:a=,s   )join)linenumtext_indexes	fname_idxr@   startendtagtextfnamerj   s             r$   parse_new_formatz(get_model_info.<locals>.parse_new_format  sV    PTMCH;<FUC#77"G,"GGD&y1E$v!6s CSHHr%   )r   )r   r   r   r   r   rw   r   z/extra/.*\.jsonzINVALID JSONzbytecode.pklrT   TrU   model)
titlerQ   version	zip_filesrc   
code_files
model_datar_   extra_files_jsonsextra_pickles)4r   osPathLikefspathstatst_sizer6   pathlibPathseekioSEEK_ENDtellzipfileZipFileinfolistr:   subrN   r<   appendr8   compress_typecompress_sizerQ   readdecodestripr   rW   pickleloadsr   mapr!   zipencodecompileescaper;   jsonrY   JSONDecodeErrorr   r   r   rX   StringIOpprintgetvaluepathbasename)/path_or_filerz   extra_file_size_limitdefault_titlerQ   r|   ziprefixr{   r^   r~   r_   rd   r}   rZ   raw_code	raw_debugdebug_info_t_contentrv   
debug_info
code_partsdidi_nextrq   source_rangerr   sources_starts_ends_texts_files_linert   extra_files_json_patternr   json_contentalways_render_picklesr   r   bufcontentsrc   r\   rj   r]   s/                                              @@@@r$   r   r      s|    ,,		,/ %%'//		L#	&$LL.335==	 !R[[) %%'	!"]E		&"	++-BVVE2r{{3F"$;&"7}D QRRT,, " 0 0,,	    &&&''+
23::7CIIK	0  '
{+	 -/	'
 
++-B;;''.!;;= |34"KKM	 5
 "<<	2LJL!Q&|A4 O'AA)5&:wI  ##3W=l+J!!":;"~a CM1!!3x=2E"FGJ":z!"~>G*,'|aajU{"{)5&)/&
 v;#fmmG&<"==GEc*!!4;;w#7VfcRXk[bdi"jk  ? '1Jr{{#c  f $&::bii.DGY.Y#Z ++-B+55bkkB||33D#'99V#4L5A%bkk2    !
 ++-B;;''/ kk--;;FW[;\aac	 
 ++-CMM#s#||~H ww,4IIM$99)1M"++&!  ] 
'@ T./+#  i 44r ++ D5C%bkk2D	  c 
'	&s   -D1W;V/&W;V+&GW;9W!;$V8AW;.:W.(BW;V(#W;+V50W;8"W	W!W	W!!W+&W;.W83W;;Xc                  |   ddl } | j                  j                  t        d      }| j                  j                  t        d      }dD ]]  }| j                  j	                  t        | d      }dt
        j                  j                  |      z   }|j                  d| d	|      }_ |j                  d
d|z         }|S )zGet a fully-inlined skeleton of the frontend.

    The returned HTML page has no external network dependencies for code.
    It can load model_info.json over HTTP, or be passed to burn_in_info.
    r   Nzskeleton.htmlzcode.js)preacthtmz.mjszdata:application/javascript,zhttps://unpkg.com/z?modulez src="./code.js">z>
)	importlib.resources	resources	read_text__package__read_binaryurllibparsequoter    )	importlibskeletonjs_code	js_modulejs_libjs_urls         r$   r   r   b  s     "",,[/JH!!++KCG&	$$004>PQ/&,,2D2DV2LL//$6yk"I6R '  3UW_EHOr%   c                 v    | j                  ddt        j                  |d      j                  dd      z         S )zBurn model info into the HTML skeleton.

    The result will render the hard-coded model info and
    have no external network dependencies for code or data.
    zBURNED_IN_MODEL_INFO = nullzBURNED_IN_MODEL_INFO = T	sort_keysrS   z\/)r    r   dumps)r   infos     r$   r   r   u  s=     %!DJJtt$D$L$LSRW$XXZ Zr%   c                 J    t        | fi |}t               }t        ||      }|S ra   )r   r   r   )path_or_bytesiokwargs
model_infor   pages        r$   r	   r	     s*    :6:J"$H*-DKr%   )stdoutc                    t        j                         }|j                  dddg       |j                  d       |j                  d       |j                  | dd        }t	        |j
                  |j                        }|xs t        j                  }|j                  dk(  r*|j                  t        j                  |d	
      dz          y |j                  dk(  r(t               }t        ||      }|j                  |       y t        d      )Nz--styler   html)choicesz--titlery   r   )rz   Tr   
zInvalid style)argparseArgumentParseradd_argument
parse_argsr   ry   rz   sysr   stylewriter   r   r   r   r<   )argvr   parserr   r   outputr   r   s           r$   mainr     s    $$&F
	FF+;<
	"
 T!"X&D$**DJJ7D!szzFzzVTZZ5<=	v	&(Hd+T((r%   )__doc__r   r   r   r   r:   r   r   r   r   r   urllib.parser   typingr   torch.utils.show_pickler   DEFAULT_EXTRA_FILE_SIZE_LIMIT__all__r   r   r   r   r   r	   r   r,   r%   r$   <module>r      s   /b  	 	  	        !* 9$MHd ;cL&Z   )r%   