o
    ,i=                     @   s   d dl Z d dl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 G dd dZG dd deZdS )    N)_keep_floatFloatPowFloatTrueDivFloorDiv
IntTrueDivModOpaqueUnaryFn_expOpaqueUnaryFn_log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)dKS )LReferenceAnalysisc                 C   
   t | S N)sympysympifycdtype r   Z/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/utils/_sympy/reference.pyconstant"      
zReferenceAnalysis.constantc                 C   s   | |B S r   r   abr   r   r   or_&      zReferenceAnalysis.or_c                 C   s   | |@ 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   eq.   s   zReferenceAnalysis.eqc                 C   s   |  | ||S r   )not_r%   )clsr   r   r   r   r   ne4   s   zReferenceAnalysis.nec                 C   s   | |k S r   r   r   r   r   r   lt8   r    zReferenceAnalysis.ltc                 C   s   | |kS r   r   r   r   r   r   gt<   r    zReferenceAnalysis.gtc                 C   s   | |kS r   r   r   r   r   r   le@   r    zReferenceAnalysis.lec                 C   s   | |kS r   r   r   r   r   r   geD   r    zReferenceAnalysis.gec                 C   s   t | trJ |  S r   )r"   boolr   r   r   r   r&   H   s   zReferenceAnalysis.not_c                 C   s
   t d| S )Ng      ?r   xr   r   r   
reciprocalM   r   zReferenceAnalysis.reciprocalc                 C   s
   t | dS )N   r   r0   r   r   r   squareQ   r   zReferenceAnalysis.squarec                 C      t | S r   )r   r1   r   r   r   r   trunc_to_intU   r    zReferenceAnalysis.trunc_to_intc                 C   r   r   )r   ceilingr7   r   r   r   ceil_to_intY   r   zReferenceAnalysis.ceil_to_intc                 C   r   r   )r   floorr7   r   r   r   floor_to_int]   r   zReferenceAnalysis.floor_to_intc                 C      t tj| S r   )r   r   r;   r0   r   r   r   r;   a      zReferenceAnalysis.floorc                 C   r=   r   )r   r   r9   r0   r   r   r   ceile   r>   zReferenceAnalysis.ceilc                 C   "   |t jkr	t| S td| dNz	to_dtype z NYI)torchfloat64r   NotImplementedErrorr7   r   r   r   to_dtypei      
zReferenceAnalysis.to_dtypec                 C   
   t | |S r   )r   r1   yr   r   r   modo   r   zReferenceAnalysis.modc                 C   r6   r   )absr0   r   r   r   rK   s   r    zReferenceAnalysis.absc                 C   s   |  S r   r   r0   r   r   r   negw   s   zReferenceAnalysis.negc                 C   rG   r   r/   r   r   r   r   truediv{   r   zReferenceAnalysis.truedivc                 C   rG   r   )r   r   r   r   r   int_truediv   r   zReferenceAnalysis.int_truedivc                 C   rG   r   )r   r   r   r   r   floordiv   r   zReferenceAnalysis.floordivc                 C      t d)NzTODO: truncdiv)rD   r   r   r   r   truncdiv   r    zReferenceAnalysis.truncdivc                 C      t tj| |S r   )r   operatoraddr   r   r   r   rT         zReferenceAnalysis.addc                 C   rR   r   )r   rS   mulr   r   r   r   rV      rU   zReferenceAnalysis.mulc                 C   rR   r   )r   rS   subr   r   r   r   rW      rU   zReferenceAnalysis.subc                 C   r6   r   )r   r0   r   r   r   exp   r    zReferenceAnalysis.expc                 C   r6   r   )r	   r0   r   r   r   log   r    zReferenceAnalysis.logc                 C   r6   r   )r
   r0   r   r   r   sqrt   r    zReferenceAnalysis.sqrtc                 C   s   t t| |S r   )r   r   r   r   r   r   pow   r>   zReferenceAnalysis.powc                 C   rG   r   r4   r   r   r   r   pow_by_natural   r   z ReferenceAnalysis.pow_by_naturalc                 C      t | |S r   )r   Minr   r   r   r   minimum      zReferenceAnalysis.minimumc                 C   r]   r   )r   Maxr   r   r   r   maximum   r`   zReferenceAnalysis.maximumc                 C   r6   r   )r   r   r   r   r   r   round_to_int   r    zReferenceAnalysis.round_to_intc                 C   rG   r   )r   r   r   r   r   round_decimal   r   zReferenceAnalysis.round_decimalN)*__name__
__module____qualname__staticmethodr   r   r!   r%   classmethodr(   r)   r*   r+   r,   r&   r2   r5   r8   r:   r<   r;   r?   rE   rJ   rK   rL   rM   rN   rO   rQ   rT   rV   rW   rX   rY   rZ   r[   r\   r_   rb   rd   re   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d)S )*PythonReferenceAnalysisc                 C   sD   |t ju r	t| S |t ju rt| S |t ju rt| S td| )Nzunrecognized dtype )rB   int64intdoublefloatr-   AssertionErrorr   r   r   r   r      s   


z PythonReferenceAnalysis.constantc                 C   r   r   )rB   sym_notr.   r   r   r   r&      r   zPythonReferenceAnalysis.not_c                 C   s   | | S r   r   r   r   r   r   rO      r    z PythonReferenceAnalysis.floordivc                 C   s   | | S r   r   rH   r   r   r   rJ      r    zPythonReferenceAnalysis.modc                 C      | | S r   r   r   r   r   r   rQ      r    z PythonReferenceAnalysis.truncdivc                 C   r@   rA   )rB   rC   ro   rD   r7   r   r   r   rE      rF   z PythonReferenceAnalysis.to_dtypec                 C   rP   )Nz!exp is not valid shape sympy exprrp   r0   r   r   r   rX      r    zPythonReferenceAnalysis.expc                 C   rP   )Nz!log is not valid shape sympy exprrs   r0   r   r   r   rY      r    zPythonReferenceAnalysis.logc                 C   r   r   )rB   	_sym_sqrtr0   r   r   r   rZ      r   zPythonReferenceAnalysis.sqrtc                 C   r]   r   )rB   sym_minr   r   r   r   r_      r`   zPythonReferenceAnalysis.minimumc                 C   r]   r   )rB   sym_maxr   r   r   r   rb      r`   zPythonReferenceAnalysis.maximumc                 C   r   r   )mathr;   r7   r   r   r   r<      r   z$PythonReferenceAnalysis.floor_to_intc                 C   r   r   )rw   r?   r7   r   r   r   r:      r   z#PythonReferenceAnalysis.ceil_to_intc                 C      t t| S r   )ro   rw   r;   r0   r   r   r   r;      r>   zPythonReferenceAnalysis.floorc                 C   rx   r   )ro   rw   r?   r0   r   r   r   r?     r>   zPythonReferenceAnalysis.ceilc                 C   rr   r   r   r   r   r   r   rM     r    zPythonReferenceAnalysis.truedivc                 C      | | S r   r   r   r   r   r   r[   	  r    zPythonReferenceAnalysis.powc                 C   ry   r   r   r   r   r   r   r\     s   z&PythonReferenceAnalysis.pow_by_naturalc                 C   r6   r   roundrc   r   r   r   rd     r    z$PythonReferenceAnalysis.round_to_intc                 C   s   t | |dS )N)ndigitsrz   r   r   r   r   re     r`   z%PythonReferenceAnalysis.round_decimalN)rf   rg   rh   ri   r   r&   rO   rJ   rQ   rE   rX   rY   rZ   r_   rb   r<   r:   r;   r?   rM   r[   r\   rd   re   r   r   r   r   rk      sR    



















rk   )rw   rS   r   rB   torch.utils._sympy.functionsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   rk   r   r   r   r   <module>   s   @ 