
    Edq                          d dl mZmZ d dlmZ ddlmZ g dZ G d de          Z G d d	e          Z	 G d
 dee          Z
e	j        D ]Z ee	dez  e	j                   d ZdS )   )PythonCodePrinterMpmathPrinter)NumPyPrinter    )default_sort_key)r   r   r   LambdaPrinterr   IntervalPrinter
lambdareprc                   P     e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Z fd
Z xZS )r   zZ
    This printer converts expressions into strings that can be used by
    lambdify.
    _lambdacodec                 ,   dg}t          |j        t                    D ]B}|                    d|                     |          dg           |                    d           C|d d         }|                    d           d                    |          S )N(key)z and  sortedargsr   extend_printappendjoinselfexprresultargs       9lib/python3.11/site-packages/sympy/printing/lambdarepr.py
_print_AndzLambdaPrinter._print_And   s    $))9::: 	# 	#CMM3C 0 0#6777MM'""""cwwv    c                 ,   dg}t          |j        t                    D ]B}|                    d|                     |          dg           |                    d           C|d d         }|                    d           d                    |          S )Nr   r   r   z or r   r   r   r   s       r    	_print_OrzLambdaPrinter._print_Or%   s    $))9::: 	" 	"CMM3C 0 0#6777MM&!!!!cwwvr"   c                 t    dd|                      |j        d                   dg}d                    |          S )Nr   znot (r   ))r   r   r   r   r   r   r   s      r    
_print_NotzLambdaPrinter._print_Not.   s2    wDIaL 9 94@wwvr"   c                     dS )NTrue r   r   s     r    _print_BooleanTruez LambdaPrinter._print_BooleanTrue2   s    vr"   c                     dS )NFalser,   r-   s     r    _print_BooleanFalsez!LambdaPrinter._print_BooleanFalse5   s    wr"   c           	          d|                      |j        d                   d|                      |j        d                   d|                      |j        d                   dg}d                    |          S )	Nz((r   z) if (r   z) else (   r&   r   r'   r(   s      r    
_print_ITEzLambdaPrinter._print_ITE8   sb    $++dil++dkk$)A,//DIaL114

 wwvr"   c                      t          |          S N)strr-   s     r    _print_NumberSymbolz!LambdaPrinter._print_NumberSymbol@   s    4yyr"   c                 F     t          t          |           j        |fi |S r6   )superr   
_print_Pow)r   r   kwargs	__class__s      r    r;   zLambdaPrinter._print_PowC   s+     9u&--8HHHHHr"   )__name__
__module____qualname____doc__printmethodr!   r$   r)   r.   r1   r4   r8   r;   __classcell__r=   s   @r    r   r      s           K              I I I I I I I I Ir"   r   c            	       "    e Zd ZdZi ddddddddddd	d
ddddddddddddddddddddddddddddd d!Zd"Zd# Zd/d%Zd& Zd' Z	d( Z
d) ZexZxZxZxZxZxZxZZexZxZxZxZZd* Z fd+Z fd,Z fd-Z fd.Z xZS )0NumExprPrinter_numexprcodesincostanasinarcsinacosarccosatanarctanatan2arctan2sinhcoshtanhasinharcsinhacosharccoshatanharctanhlnlogexpsqrtabsconjimagrealwherecomplexcontains)Abs	conjugateimrerd   re   rf   numexprc                     dS )N1jr,   r-   s     r    _print_ImaginaryUnitz#NumExprPrinter._print_ImaginaryUnitm   s    tr"   , c                 R      fd|D             }|r|                     |          S dS )Nc                 :    g | ]}                     |          S r,   )r   ).0itemr   s     r    
<listcomp>z-NumExprPrinter._print_seq.<locals>.<listcomp>r   s%    ///4T[[///r"   r   )r   )r   seq	delimiterss   `   r    
_print_seqzNumExprPrinter._print_seqp   s;    ////3/// 	>>!$$$2r"   c                 "   |j         j        }| j                            |d           }|Gt	          |d          r%d|                      |j        |j                   z  S t          d|z            |d| 	                    |j                  dS )N_imp_z(%s)z&numexpr does not support function '%s'r   r   )
funcr>   _numexpr_functionsgethasattrr   rz   r   	TypeErrorrx   )r   e	func_namenstrs       r    _print_FunctionzNumExprPrinter._print_Functionx   s    FO	&**9d;; 	+q'"" +GAGQV,< = === H )!* + + +44!8!8!8!899r"   c                 l     fd|j         D             } fd|j         D             }g }d}d}t          ||          D ]E\  }}|dk    r|                    |           d} n"|                    d|d|d           |d	z  }F|s|                    d
           d                    |          d|z  z   S )zPiecewise function printerc                 D    g | ]}                     |j                  S r,   )r   r   rr   r   r   s     r    rt   z3NumExprPrinter._print_Piecewise.<locals>.<listcomp>   '    <<<3SX&&<<<r"   c                 D    g | ]}                     |j                  S r,   )r   condr   s     r    rt   z3NumExprPrinter._print_Piecewise.<locals>.<listcomp>   r   r"   r   Fr+   Tzwhere(ro   r   zlog(-1)r   r   )r   zipr   r   )r   r   exprscondsansparenthesis_countis_last_cond_Truer   s   `       r    _print_PiecewisezNumExprPrinter._print_Piecewise   s    <<<<$)<<<<<<<$)<<<
 !eU++ 	' 	'JD$v~ '

4   $(!


tttTTT:;;;!Q&!!  	" JJy!!!wws||c$5555r"   c                 ^    ddl m} |                     |                    |                    S )Nr   )	Piecewise)$sympy.functions.elementary.piecewiser   r   rewrite)r   r   r   s      r    r4   zNumExprPrinter._print_ITE   s2    BBBBBB{{4<<	22333r"   c                 :    t          d|j        j        z            )Nznumexpr cannot be used with %s)r   r=   r>   r-   s     r    blacklistedzNumExprPrinter.blacklisted   s$    8/0 1 1 	1r"   c                 |    |                      | j        dz             }|d|                     |j                  dS )Nz	.evaluatez('z', truediv=True))_module_formatmoduler   r   )r   r   evaluates      r    _print_NumExprEvaluatez%NumExprPrinter._print_NumExprEvaluate   s?    &&t{K'?@@+388T[[5K5K5K5KLLr"   c                     ddl m} ddlm} t	          ||          s ||          }t                                          |          S )Nr   
CodegenASTNumExprEvaluate)sympy.codegen.astr   sympy.codegen.pynodesr   
isinstancer:   doprint)r   r   r   r   r=   s       r    r   zNumExprPrinter.doprint   s^    000000999999$
++ 	)"?4((Dwwt$$$r"   c                     ddl m} |j        \  }t          ||          s|                     ||                    }t                                          |          S Nr   r   )r   r   r   r   r{   r:   _print_Return)r   r   r   rr=   s       r    r   zNumExprPrinter._print_Return   sc    999999Y!_-- 	199__Q//00Dww$$T***r"   c                     ddl m} |j        ^}}}t          ||          s |j        | ||          g|R  }t                                          |          S r   )r   r   r   r   r{   r:   _print_Assignment)r   r   r   lhsrhsr   r=   s         r    r   z NumExprPrinter._print_Assignment   sq    999999)S4#// 	?49S//#"6"6>>>>Dww((...r"   c                     ddl m ddlm fd|j        D             }t                                          |  |j        |           S )Nr   r   r   c                 J    g | ]}t          |          r|n
 |           S r,   )r   )rr   r   r   r   s     r    rt   z3NumExprPrinter._print_CodeBlock.<locals>.<listcomp>   s7    dddRU
3
33M9M9Mdddr"   )r   r   r   r   r   r:   _print_CodeBlockr{   )r   r   r   r   r   r=   s      @@r    r   zNumExprPrinter._print_CodeBlock   sl    000000999999dddddY]Ybdddww''idi.>???r"   )ro   )r>   r?   r@   rB   r|   r   rn   rx   r   r   r4   r   _print_SparseRepMatrix_print_MutableSparseMatrix_print_ImmutableSparseMatrix_print_Matrix_print_DenseMatrix_print_MutableDenseMatrix_print_ImmutableMatrix_print_ImmutableDenseMatrix_print_list_print_tuple_print_Tuple_print_dict_print_Dictr   r   r   r   r   rC   rD   s   @r    rF   rF   K   ss        !K 	 		
 	 	 	) 	 	 	 	 	 	 	u 	u  	u!" 	#$ 1  6 F     : : :#6 #6 #6J4 4 41 1 1     	
   K  M M M% % % % %+ + + + +/ / / / /@ @ @ @ @ @ @ @ @r"   rF   c                   @     e Zd ZdZ fdZ fdZ fdZ fdZ xZS )r	   z?Use ``lambda`` printer but print numbers as ``mpi`` intervals. c                 Z    dt          t          |                               |          z  S Nz	mpi('%s'))r:   r   _print_Integerr   r   r=   s     r    r   zIntervalPrinter._print_Integer   s'    U#4d;;JJ4PPPPr"   c                 Z    dt          t          |                               |          z  S r   r:   r   _print_Rationalr   s     r    r   zIntervalPrinter._print_Rational   '    U#4d;;KKDQQQQr"   c                 Z    dt          t          |                               |          z  S r   r   r   s     r    _print_HalfzIntervalPrinter._print_Half   r   r"   c                 X    t          t          |                               |d          S )NT)rational)r:   r   r;   r   s     r    r;   zIntervalPrinter._print_Pow   s&    ]D))44TD4IIIr"   )	r>   r?   r@   rA   r   r   r   r;   rC   rD   s   @r    r	   r	      s        IIQ Q Q Q QR R R R RR R R R RJ J J J J J J J Jr"   r	   z	_print_%sc                 F    t          |                              |           S )z2
    Returns a string usable for lambdifying.
    )r   r   )r   settingss     r    r
   r
      s      ""**4000r"   N)pycoder   r   numpyr   sympy.core.sortingr   __all__r   rF   r	   r|   ksetattrr   r
   r,   r"   r    <module>r      sT                 / / / / / /  2I 2I 2I 2I 2I% 2I 2I 2InV@ V@ V@ V@ V@] V@ V@ V@rJ J J J Jm] J J J  
	* M MAGNK!O^-KLLLL1 1 1 1 1r"   