a
    d^                     @   s   d dl Zd dlmZ d dlZd dlZd dlm  mZ	 d dl
Z
ddgZedd Zedd ZdZdd	 Zed
d Zdd Zdd ZG dd dZeedddZdd Zedd ZdS )    N)contextmanagerenable_python_dispatcherno_python_dispatcherc                  c   s    t j } zd V  W ~ n~ 0 d S N)torch_CZ_DisablePythonDispatcherg r
   _/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dispatch/python.pyr   
   s    
c                  c   s    t j } zd V  W ~ n~ 0 d S r   )r   r   Z_EnablePythonDispatcherr   r
   r
   r   r      s    
Fc                  c   sF   t jD ]:} tt j| }|D ]$}t||}|D ]}t||V  q,qqd S r   )r   opsgetattr)nsZpacketsZop_namepacketoverloadr
   r
   r   all_known_overloads   s    

r   c               	   c   sZ   t jt jjj} t j }| r(t   zd V  W | rVt j|d n| rTt j|d 0 d S )N)Zreapply_views)r   r   Z&_dispatch_tls_is_dispatch_key_includedDispatchKeyFunctionalizeZ$_functionalization_reapply_views_tlsZ_disable_functionalizationZ_enable_functionalization)Zf_tlsZf_rvr
   r
   r   suspend_functionalization$   s    
r   c              	   C   s   t |sJ |  | ks>J |  d|   d|  | j|jkshJ |  d| j d|j tjj| |dd\}}|sJ |  d|   d|  d| dd S )	Nz: sizes  != z: dtype F)Z	only_cudaz
: strides z (mismatch at index ))callablesizedtyper   Z_prims_commonZcheck_significant_stridesstride)nvrvdescZsame_stridesidxr
   r
   r   check_tensor_metadata_matches0   s
    2*r   c           	         s   t  sJ t| \}}t|\}}t|t|ksRJ t| dt| ttt|||D ].\}}t|tjs~qft	|| fdd qfd S )Nr   c                      s      d S )Nz output r
   r
   r   ir
   r   <lambda>A       z(check_metadata_matches.<locals>.<lambda>)
r   pytreeZtree_flattenlenziprange
isinstancer   Tensorr   )	nrr   Zn_valsZn_specZr_valsZr_specr   r   r
   r    r   check_metadata_matches7   s    *r,   c                   @   s   e Zd Zdd Zdd ZdS )Litc                 C   s
   || _ d S r   s)selfr/   r
   r
   r   __init__D   s    zLit.__init__c                 C   s   | j S r   r.   )r0   r
   r
   r   __repr__G   s    zLit.__repr__N)__name__
__module____qualname__r1   r2   r
   r
   r
   r   r-   C   s   r-   )areturnc                 C   s>   t | tjr6tdt|   d|   d| j dS | S d S )Nztorch.empty_strided(, z, dtype=r   )r(   r   r)   r-   tupler   r   r   )r6   r
   r
   r   _fmtJ   s    *r:   c                    s4   ddl m  tjjjjkr S  fdd}|S )Nr   )FakeTensorModec            	   	      s      fdd}dd }t  j t|| |f\}}t|||f\  |i |}W d    n1 sr0    Y  W d    n1 s0    Y  jg| R i |}fdd}t||| |S )Nc                    s\   t | tjrXt| rJt| }|  | ks4J |  | ksNJ n| } |S | S r   )r(   r   r)   Z_is_functional_tensorZ_from_functional_tensorr   r   Zfrom_tensor)tr+   )	fake_moder
   r   fakeify_defunY   s    


zCmake_crossref_functionalize.<locals>.handler.<locals>.fakeify_defunc                 S   s   t | tjr|  S | S d S r   )r(   r   r)   detach)r<   r
   r
   r   maybe_detachi   s    zBmake_crossref_functionalize.<locals>.handler.<locals>.maybe_detachc                     s:   d tdd D dd  D }   d|  dS )Nr8   c                 s   s   | ]}t tt|V  qd S r   )reprr$   tree_mapr:   ).0r6   r
   r
   r   	<genexpr>y   r#   zMmake_crossref_functionalize.<locals>.handler.<locals>.desc.<locals>.<genexpr>c                 s   s(   | ] \}}| d t t| V  qdS )=N)r$   rB   r:   )rC   kvr
   r
   r   rD   z   r#   (r   )join	itertoolschainitems)Zfmt_args)oporig_f_argsorig_f_kwargsr
   r   r   v   s    z:make_crossref_functionalize.<locals>.handler.<locals>.desc)r   r$   rB   Z_op_dkr,   )	argskwargsr>   r@   Zf_argsZf_kwargsZf_rr+   r   r;   	final_keyrM   )r=   rN   rO   r   handlerV   s    Jz,make_crossref_functionalize.<locals>.handler)Ztorch._subclasses.fake_tensorr;   r   r   ZatenZ
lift_freshdefault)rM   rS   rT   r
   rR   r   make_crossref_functionalizeP   s
    *rV   c               
   c   s   t  D ]} | tjjj qzzt D tj	dd d V  W d    n1 sP0    Y  W d    n1 sn0    Y  W t  D ]} | tjjj qnt  D ]} | tjjj q0 d S )Nz-torch._dispatch.python.CROSSREF_FUNCTIONALIZET)
r   Z_uncache_dispatchr   r   r   r   r   unittestZmockpatch)rM   r
   r
   r   enable_crossref_functionalize   s    
D

rY   )Ztorch._Cr   
contextlibr   Zunittest.mockrW   Ztorch.utils._pytreeutilsZ_pytreer$   rJ   __all__r   r   ZCROSSREF_FUNCTIONALIZEr   r   r   r,   r-   objectr:   rV   rY   r
   r
   r
   r   <module>   s*   


4