o
    0h$5                     @   s   d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ G dd dZG dd deZG dd	 d	eZd
ejdejdejfddZG dd dZ dS )    N)Union)_keep_floatBitwiseFn_bitwise_andBitwiseFn_bitwise_orFloatPowFloatTrueDivFloorDiv
IntTrueDivMaxMinModOpaqueUnaryFn_expOpaqueUnaryFn_logOpaqueUnaryFn_log2OpaqueUnaryFn_sqrtPowByNaturalRoundDecimal
RoundToIntToFloat
TruncToIntc                   @   s  e Zd Zedd Zedd Zedd Zedd Zed	d
 Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Z ed9d: Z!ed;d< Z"ed=d> Z#ed?d@ Z$edAdB Z%edCdD Z&edEdF Z'edGdH Z(edIdJ Z)edKdL Z*edMdN Z+edOdP Z,edQdR Z-dSS )TReferenceAnalysisc                 C   
   t | S N)sympysympifycdtype r   P/var/www/vscode/kcb/lib/python3.10/site-packages/torch/utils/_sympy/reference.pyconstant'      
zReferenceAnalysis.constantc                 C      | |B S r   r   abr   r   r   or_+      zReferenceAnalysis.or_c                 C      | |@ S r   r   r#   r   r   r   and_/   r'   zReferenceAnalysis.and_c                 C   s,   t | tjst |tjrt| |S | |kS r   )
isinstancer   ExprEqr#   r   r   r   eq3   s   zReferenceAnalysis.eqc                 C   s   |  | ||S r   )not_r-   clsr$   r%   r   r   r   ne9      zReferenceAnalysis.nec                 C   s   | |k S r   r   r#   r   r   r   lt=   r'   zReferenceAnalysis.ltc                 C   s   | |kS r   r   r#   r   r   r   gtA   r'   zReferenceAnalysis.gtc                 C   s   | |kS r   r   r#   r   r   r   leE   r'   zReferenceAnalysis.lec                 C   s   | |kS r   r   r#   r   r   r   geI   r'   zReferenceAnalysis.gec                 C   s   t | trJ |  S r   )r*   boolr$   r   r   r   r.   M   s   zReferenceAnalysis.not_c                 C   s
   t d| S )Ng      ?r   xr   r   r   
reciprocalR   r!   zReferenceAnalysis.reciprocalc                 C   s
   t | dS )N   r   r:   r   r   r   squareV   r!   zReferenceAnalysis.squarec                 C      t | S r   )r   r;   r   r   r   r   trunc_to_intZ   r'   zReferenceAnalysis.trunc_to_intc                 C   r   r   )r   ceilingrA   r   r   r   ceil_to_int^   r!   zReferenceAnalysis.ceil_to_intc                 C   r   r   )r   floorrA   r   r   r   floor_to_intb   r!   zReferenceAnalysis.floor_to_intc                 C      t tj| S r   )r   r   rE   r:   r   r   r   rE   f      zReferenceAnalysis.floorc                 C   rG   r   )r   r   rC   r:   r   r   r   ceilj   rH   zReferenceAnalysis.ceilc                 C   s"   |t jkr	t| S td| dNz	to_dtype z NYI)torchfloat64r   NotImplementedErrorrA   r   r   r   to_dtypen   s   
zReferenceAnalysis.to_dtypec                 C   
   t | |S r   )r   r;   yr   r   r   modt   r!   zReferenceAnalysis.modc                 C   r@   r   )absr:   r   r   r   rS   x   r'   zReferenceAnalysis.absc                 C   s   |  S r   r   r:   r   r   r   neg|   s   zReferenceAnalysis.negc                 C   rO   r   r9   r#   r   r   r   truediv   r!   zReferenceAnalysis.truedivc                 C   rO   r   )r	   r#   r   r   r   int_truediv   r!   zReferenceAnalysis.int_truedivc                 C   rO   r   )r   r#   r   r   r   floordiv   r!   zReferenceAnalysis.floordivc                 C      t d)NzTODO: truncdivrM   r#   r   r   r   truncdiv   r'   zReferenceAnalysis.truncdivc                 C      t tj| |S r   )r   operatoraddr#   r   r   r   r]         zReferenceAnalysis.addc                 C   s
   t j| S r   )r   Add)r0   argsr   r   r   sym_sum   r!   zReferenceAnalysis.sym_sumc                 C   r[   r   )r   r\   mulr#   r   r   r   rb      r^   zReferenceAnalysis.mulc                 C   r[   r   )r   r\   subr#   r   r   r   rc      r^   zReferenceAnalysis.subc                 C   r@   r   )r   r:   r   r   r   exp   r'   zReferenceAnalysis.expc                 C   r@   r   )r   r:   r   r   r   log   r'   zReferenceAnalysis.logc                 C   r@   r   )r   r:   r   r   r   log2   r'   zReferenceAnalysis.log2c                 C   r@   r   )r   r:   r   r   r   sqrt   r'   zReferenceAnalysis.sqrtc                 C   s   t t| |S r   )r   r   r#   r   r   r   pow   rH   zReferenceAnalysis.powc                 C   rO   r   r>   r#   r   r   r   pow_by_natural   r!   z ReferenceAnalysis.pow_by_naturalc                 C   rO   r   )r   r#   r   r   r   minimum   r!   zReferenceAnalysis.minimumc                 C   rO   r   )r
   r#   r   r   r   maximum   r!   zReferenceAnalysis.maximumc                 C   r@   r   )r   r$   r   r   r   r   round_to_int   r'   zReferenceAnalysis.round_to_intc                 C   rO   r   )r   r#   r   r   r   round_decimal   r!   zReferenceAnalysis.round_decimalc                 C   rO   r   )r   r#   r   r   r   bitwise_and   r!   zReferenceAnalysis.bitwise_andc                 C   rO   r   )r   r#   r   r   r   
bitwise_or   r!   zReferenceAnalysis.bitwise_orN).__name__
__module____qualname__staticmethodr    r&   r)   r-   classmethodr1   r3   r4   r5   r6   r.   r<   r?   rB   rD   rF   rE   rI   rN   rR   rS   rT   rU   rV   rW   rZ   r]   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rm   rn   ro   rp   r   r   r   r   r   &   s    







































r   c                   @   s,  e Zd Zedd Zedd Zedd Zedd Zed	d
 Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zd1S )2PythonReferenceAnalysisc                 C   sD   |t ju r	t| S |t ju rt| S |t ju rt| S td| )Nunrecognized dtype )rK   int64intdoublefloatr7   AssertionErrorr   r   r   r   r       s   


z PythonReferenceAnalysis.constantc                 C   r   r   )rK   sym_notr8   r   r   r   r.      r!   zPythonReferenceAnalysis.not_c                 C   s`   t |dkrdS t |dkr|d S | |d |d }tdt |D ]
}| ||| }q#|S )Nr      r=   )lenr]   range)r0   r`   accir   r   r   ra      s   zPythonReferenceAnalysis.sym_sumc                 C   s   | | S r   r   r#   r   r   r   rW      r'   z PythonReferenceAnalysis.floordivc                 C   s   | | S r   r   rP   r   r   r   rR      r'   zPythonReferenceAnalysis.modc                 C      | | S r   r   r#   r   r   r   rZ      r'   z PythonReferenceAnalysis.truncdivc                 C   s$   |t jkr
t | S td| drJ   )rK   rL   	sym_floatrM   rA   r   r   r   rN      s   

z PythonReferenceAnalysis.to_dtypec                 C   rX   )Nz!exp is not valid shape sympy exprr|   r:   r   r   r   rd     r'   zPythonReferenceAnalysis.expc                 C   rX   )Nz!log is not valid shape sympy exprr   r:   r   r   r   re     r'   zPythonReferenceAnalysis.logc                 C   r   r   )rK   	_sym_log2r:   r   r   r   rf   	  r!   zPythonReferenceAnalysis.log2c                 C   r   r   )rK   	_sym_sqrtr:   r   r   r   rg     r!   zPythonReferenceAnalysis.sqrtc                 C      t | |S r   )rK   sym_minr#   r   r   r   rj        zPythonReferenceAnalysis.minimumc                 C   r   r   )rK   sym_maxr#   r   r   r   rk     r   zPythonReferenceAnalysis.maximumc                 C   r   r   )mathrE   rA   r   r   r   rF     r!   z$PythonReferenceAnalysis.floor_to_intc                 C   r   r   )r   rI   rA   r   r   r   rD     r!   z#PythonReferenceAnalysis.ceil_to_intc                 C      t t| S r   )r{   r   rE   r:   r   r   r   rE   !  rH   zPythonReferenceAnalysis.floorc                 C   r   r   )r{   r   rI   r:   r   r   r   rI   %  rH   zPythonReferenceAnalysis.ceilc                 C   r   r   r   r#   r   r   r   rU   )  r'   zPythonReferenceAnalysis.truedivc                 C      | | S r   r   r#   r   r   r   rh   -  r'   zPythonReferenceAnalysis.powc                 C   r   r   r   r#   r   r   r   ri   1  s   z&PythonReferenceAnalysis.pow_by_naturalc                 C   r@   r   roundrl   r   r   r   rm   8  r'   z$PythonReferenceAnalysis.round_to_intc                 C   s   t | |dS )N)ndigitsr   r#   r   r   r   rn   <  r   z%PythonReferenceAnalysis.round_decimalc                 C   r(   r   r   r#   r   r   r   ro   @  r'   z#PythonReferenceAnalysis.bitwise_andc                 C   r"   r   r   r#   r   r   r   rp   D  r'   z"PythonReferenceAnalysis.bitwise_orN)rq   rr   rs   rt   r    r.   ru   ra   rW   rR   rZ   rN   rd   re   rf   rg   rj   rk   rF   rD   rE   rI   rU   rh   ri   rm   rn   ro   rp   r   r   r   r   rv      sb    
























rv   c                   @   s   e Zd Zedd ZdS ) OptimizedPythonReferenceAnalysisc                 C   r   r   )rK   ra   )r`   r   r   r   ra   L  r!   z(OptimizedPythonReferenceAnalysis.sym_sumN)rq   rr   rs   rt   ra   r   r   r   r   r   K  s    r   r;   r   returnc                 C      t jjj| |S r   )rK   opsprimsconvert_element_typedefaultrA   r   r   r   	_to_dtypeQ  s   r   c                   @   sX  e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	e
dd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Z ed9d: Z!ed;d< Z"ed=d> Z#ed?d@ Z$edAdB Z%edCdD Z&edEdF Z'edGdH Z(edIdJ Z)edKdL Z*edMdN Z+edOdP Z,edQdR Z-edSdT Z.edUdV Z/edWdX Z0edYdZ Z1ed[d\ Z2ed]d^ Z3ed_d` Z4edadb Z5dcS )dTensorReferenceAnalysisc                 C   s^   |t ju r
t| }n|t ju rt| }n|t ju rt| }ntd| t jjj	j
||dS )Nrw   )r   )rK   rx   ry   rz   r{   r7   r|   r   atenscalar_tensorr   )r   r   dr   r   r   r    f  s   





z TensorReferenceAnalysis.constantc                 C   r   r   )rK   r   r   
logical_orr   r#   r   r   r   r&   s  r2   zTensorReferenceAnalysis.or_c                 C   r   r   )rK   r   r   logical_andr   r#   r   r   r   r)   w  r2   zTensorReferenceAnalysis.and_c                 C      t jj| |S r   )rK   r   r   ro   r#   r   r   r   ro   {  r^   z#TensorReferenceAnalysis.bitwise_andc                 C   r   r   )rK   r   r   rp   r#   r   r   r   rp     r^   z"TensorReferenceAnalysis.bitwise_orc                 C   r   r   )rK   r   r   r-   Tensorr#   r   r   r   r-     r2   zTensorReferenceAnalysis.eqc                 C   s   t jjj||S r   )rK   r   r   r1   r   r/   r   r   r   r1     r2   zTensorReferenceAnalysis.nec                 C   r   r   )rK   r   r   r3   r   r#   r   r   r   r3     r2   zTensorReferenceAnalysis.ltc                 C   r   r   )rK   r   r   r4   r   r#   r   r   r   r4     r2   zTensorReferenceAnalysis.gtc                 C   r   r   )rK   r   r   r5   r   r#   r   r   r   r5     r2   zTensorReferenceAnalysis.lec                 C   r   r   )rK   r   r   r6   r   r#   r   r   r   r6     r2   zTensorReferenceAnalysis.gec                 C      t jjj| S r   )rK   r   r   logical_notr   r8   r   r   r   r.     r^   zTensorReferenceAnalysis.not_c                 C   r   r   )rK   r   r   r<   r   r:   r   r   r   r<     r^   z"TensorReferenceAnalysis.reciprocalc                 C   r   r   )rK   r   r   r?   r   r:   r   r   r   r?     s   zTensorReferenceAnalysis.squarec                 C      t tjjj| |S r   )r   rK   r   r   truncr   rA   r   r   r   rB        z$TensorReferenceAnalysis.trunc_to_intc                 C   r   r   )r   rK   r   r   rI   r   rA   r   r   r   rD     r   z#TensorReferenceAnalysis.ceil_to_intc                 C   r   r   )r   rK   r   r   rE   r   rA   r   r   r   rF     r   z$TensorReferenceAnalysis.floor_to_intc                 C   r   r   )rK   r   r   rE   r   r:   r   r   r   rE     r^   zTensorReferenceAnalysis.floorc                 C   r   r   )rK   r   r   rI   r   r:   r   r   r   rI     r^   zTensorReferenceAnalysis.ceilc                 C   rO   r   )r   rA   r   r   r   rN     r!   z TensorReferenceAnalysis.to_dtypec                 C   rX   )Nz8no C-style modulus operation available from frontend atmrY   rP   r   r   r   rR     s   zTensorReferenceAnalysis.modc                 C   r   r   )rK   r   r   rS   r   r:   r   r   r   rS     r^   zTensorReferenceAnalysis.absc                 C   r   r   )rK   r   r   rT   r   r:   r   r   r   rT     r^   zTensorReferenceAnalysis.negc                 C   r   r   )rK   r   r   true_divider   r#   r   r   r   rU     r2   zTensorReferenceAnalysis.truedivc                 C   rX   )Nz8Python int truediv difficult to implement in PyTorch atm)rM   rK   r   r   r   r   r   rL   r#   r   r   r   rV        z#TensorReferenceAnalysis.int_truedivc                 C   s   t jjjj| |ddS )NrE   )rounding_mode)rK   r   r   divTensor_moder#   r   r   r   rW     r   z TensorReferenceAnalysis.floordivc                 C   rX   )Nz9no C-style truncdiv operation available from frontend atmrY   r#   r   r   r   rZ     r   z TensorReferenceAnalysis.truncdivc                 C   r   r   )rK   r   r   r]   r   r#   r   r   r   r]     r2   zTensorReferenceAnalysis.addc                 C   r   r   )rK   r   r   rb   r   r#   r   r   r   rb     r2   zTensorReferenceAnalysis.mulc                 C   r   r   )rK   r   r   rc   r   r#   r   r   r   rc     r2   zTensorReferenceAnalysis.subc                 C   r   r   )rK   r   r   rd   r   r:   r   r   r   rd     r^   zTensorReferenceAnalysis.expc                 C   r   r   )rK   r   r   re   r   r:   r   r   r   re     r^   zTensorReferenceAnalysis.logc                 C   r   r   )rK   r   r   rf   r   r:   r   r   r   rf     r^   zTensorReferenceAnalysis.log2c                 C   r   r   )rK   r   r   rg   r   r:   r   r   r   rg     r^   zTensorReferenceAnalysis.sqrtc                 C   r   r   )rK   r   r   sinr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.sinc                 C   r   r   )rK   r   r   cosr   r:   r   r   r   r   
  r^   zTensorReferenceAnalysis.cosc                 C   r   r   )rK   r   r   tanhr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.tanhc                 C   r   r   )rK   r   r   sinhr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.sinhc                 C   r   r   )rK   r   r   coshr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.coshc                 C   r   r   )rK   r   r   tanr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.tanc                 C   r   r   )rK   r   r   acosr   r:   r   r   r   r     r^   zTensorReferenceAnalysis.acosc                 C   r   r   )rK   r   r   atanr   r:   r   r   r   r   "  r^   zTensorReferenceAnalysis.atanc                 C   r   r   )rK   r   r   asinr   r:   r   r   r   r   &  r^   zTensorReferenceAnalysis.asinc                 C   r   r   rK   r   r   rh   Tensor_Tensorr#   r   r   r   rh   *  r2   zTensorReferenceAnalysis.powc                 C   r   r   r   r#   r   r   r   ri   .  s   z&TensorReferenceAnalysis.pow_by_naturalc                 C   r   r   )rK   r   r   rj   r   r#   r   r   r   rj   3  r2   zTensorReferenceAnalysis.minimumc                 C   r   r   )rK   r   r   rk   r   r#   r   r   r   rk   7  r2   zTensorReferenceAnalysis.maximumc                 C   r   r   )rK   r   r   r   r   rl   r   r   r   rm   ;  r^   z$TensorReferenceAnalysis.round_to_intc                 C   rX   )Nz8round decimal doesn't support Tensor second argument atmrY   r#   r   r   r   rn   ?  r   z%TensorReferenceAnalysis.round_decimalN)6rq   rr   rs   rt   r    r&   r)   ro   rp   r-   ru   r1   r3   r4   r5   r6   r.   r<   r?   rB   rD   rF   rE   rI   rN   rR   rS   rT   rU   rV   rW   rZ   r]   rb   rc   rd   re   rf   rg   r   r   r   r   r   r   r   r   r   rh   ri   rj   rk   rm   rn   r   r   r   r   r   c  s    















































r   )!r   r\   typingr   r   rK   torch.utils._sympy.functionsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rv   r   r   r   r   r   r   r   r   r   <module>   s   T /w