
    ȅi                         S SK rS SKrS SKrS SKrS SKJr  SrS r " S S\R                  R                  5      rS r S
S jrS	 rg)    N)get_remote_module_template_remote_module_c                 L   [        U SS5      (       d   S5       e[        R                  R                  U 5      n[        R                  R
                  R                  nUR                  U5      nSUR                  5       ;   d   SUR                  5        35       eUR                  S5      n/ n/ nUc   eUR                   Hs  nUR                  UR                  5        UR                  5       (       a  SUR                   3nOSnUR                   SUR                   U 3n	UR                  U	5        Mu     US	S  nS
R!                  U5      n
US	S  nS
R!                  U5      n[#        UR$                  5      S	:X  d   eUR$                  S   n['        UR                  5      nXU4$ )N__torch_script_interface__FzGExpect a TorchScript class interface decorated by @torch.jit.interface.forwardz2Expect forward in interface methods, while it has z =  z:    z, r   )getattrtorch_jit_internal_qualified_namejit_state
_python_cuget_interfacegetMethodNames	getMethod	argumentsappendnamehas_default_valuedefault_valuetypejoinlenreturnsstr)module_interfacequalified_namecumodule_interface_cmethod_schemaarg_str_listarg_type_str_listargumentdefault_value_strarg_type_strargs_strarg_types_strreturn_type_strs                _/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributed/nn/jit/instantiator.py#get_arg_return_types_from_interfacer,      s   #%A5II QI ((889IJN				$	$B)).9*99;; 
<=O=^=^=`<ab; '00;ML$$$!++HMM*%%''"%h&<&<%= > ""--8==/:K9LM  . ,  #Lyy&H)!"-II/0M}$$%***$$Q'H(--(OO33    c                   |    \ rS rSrSrS\SS4S jrS\S\4S jrS	\S\4S
 jr	S\S\4S jr
S	\S\4S jrSS jrSrg)_StringLoader6   aa  
A custom loader for dynamically generated Python source code.

Inherits from SourceLoader for API compatibility but overrides exec_module()
to avoid bytecode caching issues. The default SourceLoader.exec_module() calls
cache_from_source() which fails with IndexError when the filename doesn't
correspond to a real filesystem path with a .py extension.
datareturnNc                     Xl         g Nr1   )selfr1   s     r+   __init___StringLoader.__init__@   s    	r-   fullnamec                     U R                   $ r4   r5   r6   r9   s     r+   
get_source_StringLoader.get_sourceC   s    yyr-   pathc                 8    U R                   R                  S5      $ )Nzutf-8)r1   encoder6   r>   s     r+   get_data_StringLoader.get_dataF   s    yy((r-   c                     SU S3$ )N<z>.py r;   s     r+   get_filename_StringLoader.get_filenameI   s    8*D!!r-   c                     [        S5      e)Nz4dynamically generated module has no filesystem stats)OSErrorrA   s     r+   
path_stats_StringLoader.path_statsL   s    LMMr-   c                     U R                  UR                  5      nU R                  UR                  5      n[        X#SSS9n[	        XAR
                  5        g)z
Execute the module by compiling and running the source directly.

This overrides SourceLoader.exec_module() to bypass the problematic
get_code() -> cache_from_source() code path that fails on dynamic modules.
execT)dont_inheritN)r<   __name__rG   compilerN   __dict__)r6   modulesourcefilenamecodes        r+   exec_module_StringLoader.exec_moduleP   sD     1$$V__5vdCT??#r-   r5   )r2   N)rP   
__module____qualname____firstlineno____doc__r   r7   r<   bytesrB   rG   dictrK   rW   __static_attributes__rF   r-   r+   r/   r/   6   sn    S T 3 3 )S )U )"S "S "Ns Nt N
$r-   r/   c                 h   U [         R                  ;   a  [         R                  U    $ [        [        U5      R                  " S0 UD65      n[
        R                  R                  XSS9nUc   e[
        R                  R                  U5      nU[         R                  U '   UR                  U5        U$ )Nz	torch-git)originrF   )
sysmodulesr/   r   format	importlibutilspec_from_loadermodule_from_specrW   )generated_module_namestr_dict!enable_moving_cpu_tensors_to_cudaloaderspecrS   s         r+   &_do_instantiate_remote_module_templatern   ]   s     +{{011"#DELLXxXF >>**k + D ^^,,T2F)/CKK%&
vMr-   c           
      \   [        U SS5      (       d  [        SU  S35      e[        R                  R	                  U 5      R                  SS5      n[         U 3nSU R                   SU R                   S	3n[        U 5      u  pVnS
nSU 3n	SU S3n
[        UUU	U
UUSS9n[        X;U5      $ )Nr   Fzmodule_interface_cls z8 must be a type object decorated by @torch.jit.interface._zfrom z import z as module_interface_clsr   z -> z -> Future[]z@torch.jit.script)assign_module_interface_cls	arg_typesarrow_and_return_typearrow_and_future_return_typeargskwargsjit_script_decorator)r
   
ValueErrorr   r   r   replace_FILE_PREFIXrY   rP   r,   r^   rn   )module_interface_clsrk   module_interface_cls_nameri   assign_module_interface_cls_strr(   r)   r*   
kwargs_strarrow_and_return_type_str arrow_and_future_return_type_strrj   s               r+   -instantiate_scriptable_remote_module_templater   p   s    ')EuMM#$8#9 :# #
 	
 !& 3 3 C C!gc3   ,n-F,GH $//0((
))A	C $ 0S0,H_ J"&&7 8)4_4EQ'G$$C7%E0H 2)J r-   c            
      J    [          S3n [        SSSSSSSS9n[        XS5      $ )	Nnon_scriptablezmodule_interface_cls = Nonez*argsz**kwargsz*args, **kwargsr   )rs   rw   rx   rt   ru   rv   ry   T)r|   r^   rn   )ri   rj   s     r+   1instantiate_non_scriptable_remote_module_templater      s?    +nN;$A# %'H 22GSWXXr-   )T)importlib.abcre   importlib.utilrb   r   9torch.distributed.nn.jit.templates.remote_module_templater   r|   r,   abcSourceLoaderr/   rn   r   r   rF   r-   r+   <module>r      sS      
 
 !#4L$$IMM.. $$N( =A&RYr-   