
    Ph                        U d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZmZmZmZmZ i Zeeee   f   ed<   e	j0                  j2                  d        Zde	j6                  j8                  fdZ	 	 ddddd	d
dee   dee   dee   dee   dee   dee   deddfdZdede	j6                  j@                  defdZ!dede	j6                  j@                  dee	jD                  jF                     fdZ$dede	j6                  j@                  defdZ%dede	j6                  j@                  dee	jL                     fdZ'y)    N)AnyDictIterableListOptionalTupleType)ExportedProgram)_register_pytree_nodeContextDumpableContextFlattenFuncFromDumpableContextFnToDumpableContextFntree_flattenUnflattenFunc(SERIALIZED_DATACLASS_TO_PYTHON_DATACLASSc                 |    t        |      \  }} t        | j                  | j                  | j                        | S )N)range_constraintsequality_constraints)r   "_check_input_constraints_for_graphgraphr   r   )selfargskwargs	flat_args_s        ^C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_export/utils.py!_check_input_constraints_pre_hookr      sE    %LIq-

00!66 	     r   c                 *     ddl m  fd}|S )Nr   )'_AddRuntimeAssertionsForConstraintsPassc                     t         j                  j                  i t         j                  j                               }j                  D ]H  }|j
                  dk7  r|j                  j                  |j                        }|j                  |_	        J |j                  j                  d               |      }|J |j                  } ||   y )Nplaceholder )torchfxGraphModuleGraphnodesopr   r$   namemetaoutputgraph_module)	r   _assertion_graphpnew_p_assertion_graph_resr"   r   r   r   s	        r   innerz1_check_input_constraints_for_graph.<locals>.inner)   s     88//EHHNN4DEAtt}$$**66qvv>EEJ	 
 	%%b) 
F  
   $////<<$r    )@torch._export.passes.add_runtime_assertions_for_constraints_passr"   )r   r   r   r4   r"   s   ``` @r   r   r   "   s     " Lr    F)serialized_type_nameto_dumpable_contextfrom_dumpable_contextreturn_none_fieldscls
flatten_fnunflatten_fnr6   r7   r8   r9   returnc                    t        j                         s
J d          j                   d j                    t        <   dt
        dt        t        t
           t        f   f fd}dt        t
           dt        dt
        fd}dt        dt        ffd	}	d
t        dt        fd}
||n|}||n|}|d u |d u z  rt        d  d      ||n|	}||n|
}t         |||||       y )Nz7Only dataclasses can be registered with this function: .objr=   c                    g }g }g }t        j                  |       D ]\  }|j                  t        | |j                        }}|r#|j	                  |       |j	                  |       L|j	                  |       ^ |||ffS )N)dataclassesfieldsr,   getattrappend)	r@   	flattened
flat_names
none_namesfr,   valr:   r9   s	          r   default_flatten_fnz=register_dataclass_as_pytree_node.<locals>.default_flatten_fnN   s    	

##C(AQVV 4#D"4  %!!$'!!$' ) 3
J777r    valuescontextc           
      p    |\  }}} |di t        t        ||             |D ci c]  }|d  c}S c c}w )Nr%   )dictzip)rL   rM   typrG   rH   ks         r   default_unflatten_fnz?register_dataclass_as_pytree_node.<locals>.default_unflatten_fn[   sC    &-#ZTT#j&12T
6S
1q$w
6STT6Ss   
3c                     | d   | d   fS )N      r%   )rM   serialized_types    r   default_to_dumpable_contextzFregister_dataclass_as_pytree_node.<locals>.default_to_dumpable_context_   s    WQZ88r    dumpable_contextc                 ,    t         | d      | d   | d   fS )Nr   rU   rV   )r   )rY   s    r   default_from_dumpable_contextzHregister_dataclass_as_pytree_node.<locals>.default_from_dumpable_contextb   s*    45Ea5HIQQ
 	
r    z7Both to_dumpable_context and from_dumpable_context for z must be None or registered.)r6   r7   r8   )rB   is_dataclass
__module____qualname__r   r   r   r   r   r   r   
ValueErrorr   )r:   r;   r<   r6   r7   r8   r9   rK   rS   rX   r[   rW   s   `     `    @r   !register_dataclass_as_pytree_noder`   =   sW    ## G	@FG  (#*:*:);<O@C,_=8 8d3i.@(A 8UXc] UW U U9W 9 9
 
G 
  *5;MJ#/#;<AULt#(=(EFEcU K% %
 	
 * 	(  !, 	*  1/3r    programnodec                 F    |j                   | j                  j                  v S )zM
    Checks if the given node is a parameter within the exported program
    )r,   graph_signatureinputs_to_parametersra   rb   s     r   is_paramrg      s    
 99//DDDDr    c                     t        | |      r2| j                  j                  |j                     }| j                  |   S y)z
    Returns the parameter associated with the given node in the exported program.
    Returns None if the node is not a parameter within the exported program
    N)rg   rd   re   r,   
state_dict)ra   rb   parameter_names      r   	get_paramrk      s<      00EEdiiP!!.11r    c                 F    |j                   | j                  j                  v S )zJ
    Checks if the given node is a buffer within the exported program
    )r,   rd   inputs_to_buffersrf   s     r   	is_bufferrn      s    
 99//AAAAr    c                     t        | |      r2| j                  j                  |j                     }| j                  |   S y)z
    Returns the buffer associated with the given node in the exported program.
    Returns None if the node is not a buffer within the exported program
    N)rn   rd   rm   r,   ri   )ra   rb   buffer_names      r   
get_bufferrq      s<     $--??		J!!+..r    )NN)(rB   typingr   r   r   r   r   r   r	   r&   torch._exportr
   torch.utils._pytreer   r   r   r   r   r   r   r   r   str__annotations___dynamodisabler   r'   r)   r   boolr`   Noderg   nn	Parameterrk   rn   Tensorrq   r%   r    r   <module>r~      s    C C C  )	 	 	 BD ($sDI~*> C  88>>: )-,0G
 +/9==A$G	cG%G =)G
 #3-G ""56G $$9:G G 
GTEo EUXX]] Et E
((-- ehh  ! B Behhmm B B
((-- ellr    