a
    d                     @   s.  d dl Z d dlZd dlZd dlmZ ejd ejd ejd hZejdkrZeejd  ejdkrveejd	  neejd
  e	ej
ej Zdd eD Ze	ejZe	ejZejZdd Zdd Zdd Zdd Ze jG dd dZdd Ze jG dd dZe jG dd dZdd ZdS )    N)RealRETURN_VALUEJUMP_FORWARDRAISE_VARARGS)   	   RERAISE)r      ZJUMP_BACKWARDJUMP_ABSOLUTEc                 C   s   h | ]}t j| qS  )disopname).0opcoder   r   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/bytecode_analysis.py	<setcomp>       r   c                    sH   dd t D t  fdd  d fddt D S )zDead code eliminationc                 S   s   i | ]\}}t ||qS r   idr   iinstr   r   r   
<dictcomp>   r   z$remove_dead_code.<locals>.<dictcomp>c                    sd   t | tD ]P}|v r  d S | | }|jtv rN t|j  |jtv r d S qd S N)rangelenaddr   JUMP_OPCODESr   targetTERMINAL_OPCODES)startr   r   find_live_codeindexofinstructions	live_coder   r   r"      s    


z(remove_dead_code.<locals>.find_live_coder   c                    s   g | ]\}}| v r|qS r   r   r   )r%   r   r   
<listcomp>+   r   z$remove_dead_code.<locals>.<listcomp>)	enumeratesetr$   r   r!   r   remove_dead_code   s
    r*   c                    s.   dd t | | dd D   fdd| D S )z'Eliminate jumps to the next instructionc                 S   s,   h | ]$\}}|j d kr|j|u rt|qS )r
   )r   r   r   )r   abr   r   r   r   0   s   z)remove_pointless_jumps.<locals>.<setcomp>   Nc                    s   g | ]}t | vr|qS r   r   r   r   Zpointless_jumpsr   r   r&   5   r   z*remove_pointless_jumps.<locals>.<listcomp>)zipr)   r   r/   r   remove_pointless_jumps.   s    r1   c                    s&   d  fdd}| D ]}|| qdS )zEEnsure every instruction has line number set in case some are removedNc                    s   | j r| j   | _ d S r   starts_liner   Zcur_line_nor   r   populate_line_num<   s    z.propagate_line_nums.<locals>.populate_line_numr   )r$   r6   r   r   r5   r   propagate_line_nums8   s    r7   c                    s&   d  fdd}| D ]}|| qdS )z;Remove extra starts line properties before packing bytecodeNc                    s*   | j d u rd S | j  kr d | _ n| j  d S r   r2   r4   r5   r   r   remove_line_numL   s
    

z/remove_extra_line_nums.<locals>.remove_line_numr   )r$   r8   r   r   r5   r   remove_extra_line_numsG   s    	r9   c                   @   s&   e Zd ZU eed< eed< eed< dS )ReadsWritesreadswritesvisitedN)__name__
__module____qualname__r(   __annotations__r   r   r   r   r:   Y   s   
r:   c                    sh   dd t D  tt t t tt t t  fdd t|  jjB S )Nc                 S   s   i | ]\}}t ||qS r   r   r   r   r   r   r   a   r   z%livevars_analysis.<locals>.<dictcomp>c                    s   || j v rd S | j | t|tD ]}| }|jtv sH|jtv rd|jv s\d|jv rx|jj	vr| j
|j n*d|jv r| j	|j ntd|j |jtv rĈ t|j  } |jtv r( d S q(d S )NZLOADDELETEZSTOREz
unhandled )r=   r   r   r   r   HASLOCALHASFREEr   argvalr<   r;   NotImplementedErrorr   r   r   r   )stater    r   r   r#   r$   mayZmustwalkr   r   rJ   e   s"    



zlivevars_analysis.<locals>.walk)r'   r:   r(   r   r;   )r$   Zinstructionr   rH   r   livevars_analysis`   s    rK   c                   @   s   e Zd ZU dZeed< dS )FixedPointBoxTvalueN)r>   r?   r@   rM   boolrA   r   r   r   r   rL   ~   s   
rL   c                   @   s6   e Zd ZU eed< eed< eed< dd Zdd ZdS )		StackSizelowhighfixed_pointc                 C   s   d| _ d| _d| j_d S )Nr   F)rP   rQ   rR   rM   )selfr   r   r   zero   s    zStackSize.zeroc                 C   sP   | j | jf}t| j |j | | _ t| j|j| | _| j | jf|krLd| j_d S )NF)rP   rQ   minmaxrR   rM   )rS   othernZpriorr   r   r   	offset_of   s
    zStackSize.offset_ofN)r>   r?   r@   r   rA   rL   rT   rY   r   r   r   r   rO      s
   
rO   c              
      s.  | sJ t    fdd| D }|| d    tdD ]} jrF qd _t| | dd  d g D ]x\}}|| }|jtvr|d usJ d| || |t|j|j	dd	 |jt
v rd||j |t|j|j	dd	 qdq8td
d | D }tdd | D } jsJ d|dks*J |S )Nc                    s"   i | ]}|t td td qS )infz-inf)rO   floatr.   rR   r   r   r      s   z&stacksize_analysis.<locals>.<dictcomp>r   d   Tr-   zmissing next inst: F)Zjumpc                 S   s   g | ]
}|j qS r   )rP   r   xr   r   r   r&      r   z&stacksize_analysis.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   )rQ   r^   r   r   r   r&      r   zfailed to reach fixed point)rL   rT   r   rM   r0   r   r   rY   stack_effectargr   r   printrU   valuesrV   )r$   Zstack_sizes_r   Z	next_inst
stack_sizerP   rQ   r   r\   r   stacksize_analysis   s4    
 


	rf   )Zdataclassesr   sysZnumbersr   opmapr   version_infor   r(   hasjrelhasjabsr   ZJUMP_OPNAMEShaslocalrC   hasfreerD   r`   r*   r1   r7   r9   Z	dataclassr:   rK   rL   rO   rf   r   r   r   r   <module>   s:   




