
    VhA                         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mZ ddl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)Pathi @  )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      O/home/dcms/DCMS/lib/python3.12/site-packages/torch/utils/model_dump/__init__.pyr   r   X   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(  r4| j(                  J | 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_r#   	quantizerquantizer_extraquantizer_jsonr   typlsr   msgs                     r$   r   r   j   s   $sE3T
;<$0451#A&55$ 3DJ ?
 	
 $'TYY[(9:)$t{{}*=>
 	

 $//::;kk]!DII;/ gh99?"?#+,TZZ8  88::%%%?Cyy<GVT6=1+G4L#lFD&-%XYY66::%%%JN))GGVT69ma+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GM 6s   N=c                   +,-. t        | t        j                        r0t        j                  |       }| j	                         j
                  }nyt        | t              r&| }t        |       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,                  |j.                                ,J .j1                  ,d	z         j3                  d
      j5                         },.fd}	 |	d      }
 |	d      }i ++fd}i }.j                         D ]  }|j"                  j7                  d      s .j9                  |      5 }|j1                         }ddd       .j9                  |j"                  dz         5 }|j1                         }ddd       t;        j<                        }d-t?        |      dk(  r2t        |d   t              r|d   dk(  r|\  }-}-fd}tA        ||      }tC        |      }|s|j'                  d       |d   d   t?              k7  r|j'                  t?        |      df       g }tE        ||dd       D ]  \  }}|^}}}|d   }||kD  sJ |\  }}}|\  }} }!t?        |      t?        |jG                  d
            k7  rd}d}||| }"|j'                  |"j3                  d
       ||       |! ||      ||g        |||j"                  <    t        jH                  t        jJ                  ,      dz         }#i }$.j                         D ]m  }|#jM                  |j"                        s|j.                  |kD  r/.j9                  |      5 }	 tO        jP                  |      }%|%|$|j"                  <   ddd       o dh}&i }'.j                         D ]  }|j"                  j7                  d      s.j9                  |      5 }tT        jV                  jX                  j[                  |d      jQ                         }(ddd       t        j\                         })t_        j^                  (|)       |)ja                         }*t        jb                  je                  |j"                        |&vrt?        |*      |kD  r|*|'|j"                  <    	 ddd       dt)        ||tC        +      
$'
      iS # 1 sw Y   qxY w# 1 sw Y   GxY w# tN        jR                  $ 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   sp    ***4&~56 0&kk--;;FW[;\aac*3/0 0 0s   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_pklr0   FORMAT_WITH_STRING_TABLEc                 t    | \  }\  \  }}}}}}dj                  
fd|D              }
|   }	|||	|f||f|fS )Nr   c              3   (   K   | ]	  }|     y wr_   r,   ).0x
text_tables     r$   	<genexpr>z;get_model_info.<locals>.parse_new_format.<locals>.<genexpr>  s     "GQ:a="Gs   )join)linenumtext_indexes	fname_idxr?   startendtagtextfnamerh   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   ru   r   z/extra/.*\.jsonzINVALID JSONzbytecode.pklrR   TrS   model)
titlerO   version	zip_filesra   
code_files
model_datar]   extra_files_jsonsextra_pickles)3r   osPathLikefspathstatst_sizer5   r   seekioSEEK_ENDtellzipfileZipFileinfolistr9   subrL   r;   appendr7   compress_typecompress_sizerO   readdecodestripr   rU   pickleloadsr   mapr!   zipencodecompileescaper:   jsonrW   JSONDecodeErrorr   r   r   rV   StringIOpprintgetvaluepathbasename)/path_or_filerx   extra_file_size_limitdefault_titlerO   rz   ziprefixry   r\   r|   r]   rb   r{   rX   raw_code	raw_debugdebug_info_trC   contentrt   
debug_info
code_partsdidi_nextro   source_rangerp   sources_starts_ends_texts_files_linerr   extra_files_json_patternr}   json_contentalways_render_picklesr~   r   bufcontentsra   rZ   rh   r[   s/                                              @@@@r$   r   r      s    ,,		,/ %%'//		L#	&$&++-55	 !R[[) %%'	!"]E		& ~2"	++- 	BVVE2r{{3F"$;&"7}D QRRT,, " 0 0,,	 	 &&&''+
23::7CIIK	0  '
{+	 -/	'
 
++- 1	1B;;''. )!;;=)|34 *"KKM	*
 "<<	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!"~> lG*,'|aajU{"{)5&)/&
 v;#fmmG&<"==GEc*!!4;;w#7VfcRXk[bdi"jkl '1Jr{{#c1	1f $&::bii.DGY.Y#Z ++- 
	DB+55bkkB||33 DD#'99V#4L5A%bkk2D D
	D !
 ++- 	2B;;''/ d kk--;;FW[;\aac	d
 ++-CMM#s#||~H ww,4IIM$99)1M"++&!	2]~2@ T./+#  i) )* *r ++ D5C%bkk2D	D Dd dc~2 ~2s   #D1W1V%&W1V!GW1/W1$V.AW1$:W$BW1VW1!V+&W1."W	WW	WW!W1$W.)W11W: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   ]  s     "",,[/JH!!++KCG& S	$$004>PQ/&,,2D2DV2LL//$6yk"I6RS  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_keysrQ   z\/)r    r   dumps)r   infos     r$   r   r   p  s=     %!DJJtt$D$L$LSRW$XXZ Zr%   c                 J    t        | fi |}t               }t        ||      }|S r_   )r   r   r   )path_or_bytesiokwargs
model_infor   pages        r$   r	   r	     s*    :6:J"$H*-DKr%   )stdoutc                J   t        j                  d       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      )NzUtorch.utils.model_dump is deprecated and will be removed in a future PyTorch release.z--styler   html)choicesz--titlerw   r   )rx   Tr   
zInvalid style)warningswarnargparseArgumentParseradd_argument
parse_argsr   rw   rx   sysr   stylewriter   r   r   r   r;   )argvr   parserr   r   outputr   r   s           r$   mainr     s    MMij$$&F
	FF+;<
	"
 T!"X&D$**DJJ7D!szzFzzVTZZ5<=	v	&(Hd+T((r%   )__doc__r   r   r   r   r   r   r9   r   urllib.parser   r   pathlibr   r   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$JH^ ;cL&Z   )r%   