a
    d-                     @   s~  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZ eeZzd dlZW n ey   ed Y n0 G dd dejZG dd	 d	ZG d
d deZe jG dd dZedZe jG dd dZe jG dd deZG dd deee Z G dd dZ!G dd de e! Z"da#G dd dZ$ee$dddZ%e jG dd dZ&dS )     N)ABCabstractmethod)contextmanager)CallableGenericList
NamedTupleOptionalSetTypeVarzNo sympy foundc                   @   sF   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
ed
ddZdd ZdS )GuardSourcer                     c                 C   s@   | t jt jt jt jfv r|S | t jt jfv r0|S tt| d S N)	r   LOCALLOCAL_NN_MODULE	SHAPE_ENVRANDOM_VALUEGLOBALGLOBAL_NN_MODULENotImplementedErrorstr)selfZlocals_globals_ r   V/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_guards.pyselect#   s    zGuardSource.selectreturnc                 C   s   | t jt jfv S r   )r   r   r   r   r   r   r   is_nn_module5   s    zGuardSource.is_nn_modulec                 C   s   | t jt jfv S r   )r   r   r   r#   r   r   r   is_local8   s    zGuardSource.is_localN)__name__
__module____qualname__r   r   r   r   CONSTANTr   r   r    boolr$   r%   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )GuardBuilderBaseNr&   r'   r(   r   r   r   r   r+   J   s   r+   c                   @   s    e Zd ZU ejed< eed< dS )
ShapeGuardexprstackN)r&   r'   r(   sympyExpr__annotations__r   r   r   r   r   r-   N   s   

r-   c                   @   s   e Zd ZU eed< eed< eed gdf ed< dZe	ed< dZ
eee  ed< dZeee  ed< dZee ed	< dZee ed
< dd Zdd Zdd Zedd Zdd ZeedddZdd Zdd Zdd ZdS )GuardnamesourceN	create_fnFis_volatileguard_types	code_listobj_weakrefguarded_class_weakrefc                 C   s   t | j| jt| jfS r   )hashr4   r5   idr6   r#   r   r   r   __hash__o   s    zGuard.__hash__c                 C   s(   | j r| j jndt| j| j| jjjfS )N)r5   valuelenr4   r6   __code__co_firstlinenor#   r   r   r   sort_keyr   s
    zGuard.sort_keyc                 C   s   |   |  k S r   )rD   r   otherr   r   r   __lt__z   s    zGuard.__lt__c                 C   sh   t | tjr\|  }|durFdtt|  d|jj dtt| dS dtt|  dS nt| S dS )a  
        This is a workaround of a Python weakref bug.

        `obj_weakref` is instance returned by `weakref.ref`,
        `str(obj_weakref)` is buggy if the original obj overrides __getattr__, e.g:

            class MyConfig(dict):
                def __getattr__(self, x):
                    return self[x]

            obj = MyConfig(offset=5)
            obj_weakref = weakref.ref(obj)
            str(obj_weakref)  # raise error: KeyError: '__name__'
        Nz<weakref at z; to 'z' at >z; dead>)
isinstanceweakrefReferenceTypehexr=   	__class__r&   r   )r:   objr   r   r   weakref_to_str}   s    ,zGuard.weakref_to_strc                 C   s^   d| j r| j j nd dt| j d| jj d| j d| j d| | j	 d| j
 d}|S )	Nz
              z.
            {
                'guard_types': z,
                'code': z!,
                'obj_weakref': z"
                'guarded_class': z
            }
            )r5   r4   lowerreprr6   r&   r8   r9   rO   r:   r;   )r   sr   r   r   __str__   s     
	zGuard.__str__)local_builderglobal_builderc                 C   s   |  | j||| S r   )r6   r5   r    )r   rV   rW   r   r   r   create   s    zGuard.createc                 C   s
   | j  S r   )r5   r$   r#   r   r   r   r$      s    zGuard.is_nn_modulec                 C   s
   | j  S r   )r5   r%   r#   r   r   r   r%      s    zGuard.is_localc                 C   sp   | j st | _ | j | | j|d fv s0J d|| _| jsD|| _n| j| | j|d fv sfJ d|| _d S )Nz+Guarded class id must be identical, or Nonez)Guarded object must be identical, or None)r8   listappendr;   r9   extendr:   )r   Z
guard_typeZguarded_classr9   r:   r   r   r   set_export_info   s(    zGuard.set_export_info)r&   r'   r(   r   r2   r   r   r+   r7   r*   r8   r	   r   r9   r:   objectr;   typer>   rD   rG   staticmethodrO   rU   rX   r$   r%   r\   r   r   r   r   r3   S   s$   

r3   Tc                   @   s   e Zd ZdS )GuardEnvExprNr,   r   r   r   r   ra      s   ra   c                   @   s&   e Zd ZU eed< eed< dd ZdS )DuplicateInputsinput_pos_ainput_pos_bc                 C   s   | j | jksJ d S r   )rc   rd   r#   r   r   r   __post_init__   s    zDuplicateInputs.__post_init__N)r&   r'   r(   intr2   re   r   r   r   r   rb      s   
rb   c                   @   s0   e Zd ZeedddZeedddZdS )Checkpointabler!   c                 C   s   d S r   r   r#   r   r   r   copy_graphstate   s    zCheckpointable.copy_graphstate)statec                 C   s   d S r   r   r   ri   r   r   r   restore_graphstate   s    z!Checkpointable.restore_graphstateN)r&   r'   r(   r   r`   rh   rk   r   r   r   r   rg      s   rg   c                   @   s8   e Zd ZU e Zee ed< dd Zdd Z	dd Z
dS )	GuardsCheckpointStatedynamo_guardsc                 C   s
   || _ d S r   )rm   )r   rm   r   r   r   __init__   s    zGuardsCheckpointState.__init__c                 C   s"   | j |j }t|dkrd S |S )Nr   )rm   
differencerA   )r   rF   rr   r   r   diff
  s    zGuardsCheckpointState.diffc                 C   s   |  |d u S r   )rq   rE   r   r   r   __eq__  s    zGuardsCheckpointState.__eq__N)r&   r'   r(   setrm   r
   r3   r2   rn   rq   rr   r   r   r   r   rl      s   

rl   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )GuardsContextc                 C   s   t  | _g | _d S r   )rs   rm   Zaotautograd_guardsr#   r   r   r   rn     s    zGuardsContext.__init__c                 C   s   t t| jS r   )rl   rs   rm   r#   r   r   r   rh   !  s    zGuardsContext.copy_graphstatec                 C   s   t |tsJ |j| _d S r   )rI   rl   rm   rj   r   r   r   rk   $  s    z GuardsContext.restore_graphstateN)r&   r'   r(   rn   rh   rk   r   r   r   r   rt     s   rt   c                   @   s.   e Zd ZdZeed  dddZdd ZdS )TracingContextz
    Provides the currently installed TracingContext, or None.

    Note that it is a staticmethod, and invocations outside of `with tracing()` (see below), are valid but
    will return NoNe.
    r!   c                   C   s   t S r   _CURRENT_TRACING_CONTEXTr   r   r   r   getF  s    zTracingContext.getc                 C   s   t  | _|| _d S r   )rt   Zguards_context	fake_mode)r   ry   r   r   r   rn   J  s    zTracingContext.__init__N)r&   r'   r(   __doc__r_   r	   rx   rn   r   r   r   r   ru   >  s   ru   )contextc                 c   s"   t }| a zt V  W |a n|a 0 d S r   rv   )r{   Zold_contextr   r   r   tracingV  s
    r|   c                   @   s6   e Zd Zdd Zdd Zdd Zddd	Zd
d ZdS )Sourcec                 C   s
   t  d S r   r   )r   Zcodegenr   r   r   reconstructd  s    zSource.reconstructc                 C   s
   t  d S r   r~   r#   r   r   r   guard_sourceg  s    zSource.guard_sourcec                 C   s
   t  d S r   r~   r#   r   r   r   r4   j  s    zSource.nameFc                 C   s*   |   tju rt t|  |   ||S r   )r   r   r)   r   r3   r4   )r   fnr7   r   r   r   
make_guardm  s    zSource.make_guardc                 C   s   |   tjtjfv S r   )r   r   r   r   r#   r   r   r   r$   r  s    zSource.is_nn_moduleN)F)r&   r'   r(   r   r   r4   r   r$   r   r   r   r   r}   b  s
   
r}   )'ZdataclassesenumloggingrJ   abcr   r   
contextlibr   typingr   r   r   r   r	   r
   r   	getLoggerr&   logr0   ImportErrorwarningEnumr   r+   r-   Z	dataclassr3   r`   ra   rb   rg   rl   rt   rw   ru   r|   r}   r   r   r   r   <module>   s<   $

0o

