o
    8VaW-                     @   sp   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z ddlmZmZ G dd	 d	eZeed
d ZdS )z
A Printer for generating executable code.

The most important function here is srepr that returns a string so that the
relation eval(srepr(expr))=expr holds in an appropriate environment.
    )AnyDict)AppliedUndef)Mul)repr_dpsto_str   )Printerprint_functionc                   @   s  e Zd ZdZdddZdd Zdd Zdid	d
Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zdid9d:Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6dS )jReprPrinterZ
_sympyreprNT)orderperm_cyclicc                    s   |  fdd|D S )zG
        Prints each item in `args` and joins them with `sep`.
        c                       g | ]}  |qS  doprint).0itemselfr   5/usr/lib/python3/dist-packages/sympy/printing/repr.py
<listcomp>       z'ReprPrinter.reprify.<locals>.<listcomp>)join)r   argssepr   r   r   reprify   s   zReprPrinter.reprifyc                 C   s   t |tr|S t|dr| S t|dr6t|jdr6g }|jD ]
}|| | q |jjdd	|  S t|drHt|drHd|j
|jf S t|S )	z'
        The fallback printer.
        	__srepr__r   __iter__(%s), 
__module____name__z	<'%s.%s'>)
isinstancestrhasattrr   r   append_print	__class__r"   r   r!   )r   exprlor   r   r   emptyPrinter   s   


zReprPrinter.emptyPrinterc                 C   sX   | j ||d}t|}t| j|}t|j}|dkr#|dd|  S |dd|  S )N)r      (*[%s])r    r   )Z_as_ordered_termslenmapr'   typer"   r   r   r)   r   r   nargsZclsnamer   r   r   
_print_Add1   s   
zReprPrinter._print_Addc                 C   s   |  S N)__repr__r   r)   r   r   r   _print_Cycle:      zReprPrinter._print_Cyclec                 C   sH  ddl m}m} ddlm} |j}|d ur&|d|d|ddd  n| j	d	d
}|rf|j
s4dS |||j
d  tdd  }|d}|dksbd||d  vrb||d  |d |  }d| S | }|s}|j
dk rxdt|j S d|j
 S t|jd |d d  d|j
  }t|j }	}
t|t|
k r|}	d|	 S )Nr   )PermutationCycle)SymPyDeprecationWarningzPermutation.print_cyclic = {}zinit_printing(perm_cyclic={})ia;  z1.6)ZfeatureZ
useinsteadZissueZdeprecated_since_versionr   TzPermutation()r   r;   (,zPermutation%s   zPermutation(%s)zPermutation([], size=%s)z	, size=%s)Z sympy.combinatorics.permutationsr:   r;   Zsympy.utilities.exceptionsr<   Zprint_cyclicformatwarnZ	_settingsgetsizer6   r/   rfindZsupportr$   Z
array_form)r   r)   r:   r;   r<   r   sZlastZtrimZuseZfullr   r   r   _print_Permutation=   s>   "


$zReprPrinter._print_Permutationc                    2     |j}|dd fdd|jD  7 }|S )Nr   r    c                    r   r   r'   r   ar   r   r   r   d   r   z/ReprPrinter._print_Function.<locals>.<listcomp>)r'   funcr   r   r   r)   rr   r   r   _print_Functionb   s   "zReprPrinter._print_Functionc                    rH   )Nr   r    c                    r   r   rI   rJ   r   r   r   r   k   r   z0ReprPrinter._print_Heaviside.<locals>.<listcomp>)r'   rL   r   ZpargsrM   r   r   r   _print_Heavisideg   s   "zReprPrinter._print_Heavisidec                 C   s   t |tr
d|j S |jS )NzFunction(%r))
issubclassr   r"   r7   r   r   r   _print_FunctionClassn   s   

z ReprPrinter._print_FunctionClassc                 C      dS )NzRational(1, 2)r   r7   r   r   r   _print_Halft      zReprPrinter._print_Halfc                 C      t |S r5   r$   r7   r   r   r   _print_RationalConstantw   r9   z#ReprPrinter._print_RationalConstantc                 C   rV   r5   rW   r7   r   r   r   _print_AtomicExprz   r9   zReprPrinter._print_AtomicExprc                 C   rV   r5   rW   r7   r   r   r   _print_NumberSymbol}   r9   zReprPrinter._print_NumberSymbolc                 C   
   d|j  S )NzInteger(%i))pr7   r   r   r   _print_Integer      
zReprPrinter._print_Integerc                 C   rS   )NZIntegersr   r7   r   r   r   _print_Integers   rU   zReprPrinter._print_Integersc                 C   rS   )NZNaturalsr   r7   r   r   r   _print_Naturals   rU   zReprPrinter._print_Naturalsc                 C   rS   )NZ	Naturals0r   r7   r   r   r   _print_Naturals0   rU   zReprPrinter._print_Naturals0c                 C   rS   )NZRealsr   r7   r   r   r   _print_Reals   rU   zReprPrinter._print_Realsc                 C   rS   )NZEmptySetr   r7   r   r   r   _print_EmptySet   rU   zReprPrinter._print_EmptySetc                 C   rS   )NZEmptySequencer   r7   r   r   r   _print_EmptySequence   rU   z ReprPrinter._print_EmptySequencec                 C   s   d|  |d S )Nz[%s]r    r   r7   r   r   r   _print_list   s   zReprPrinter._print_listc                    s(   d} fdd|  D }d|| S )Nr    c                    s(   g | ]\}}d   |  |f qS )z%s: %sr   )r   keyvaluer   r   r   r      s   ( z+ReprPrinter._print_dict.<locals>.<listcomp>{%s})itemsr   )r   r)   r   Zdict_kvsr   r   r   _print_dict   s   zReprPrinter._print_dictc                 C   s   |sdS d|  |d S )Nzset()ri   r    re   r7   r   r   r   
_print_set   s   zReprPrinter._print_setc                 C   s   |j dk|jdkA rd|jj| |j | |j| g f S g }t|j D ]}|g  t|jD ]}|d |||f  q2q&d|jj| |f S )Nr   %s(%s, %s, %s)r@   %s(%s))ZrowsZcolsr(   r"   r'   ranger&   )r   r)   r*   ijr   r   r   _print_MatrixBase   s   


zReprPrinter._print_MatrixBasec                 C   rS   )Ntruer   r7   r   r   r   _print_BooleanTrue   rU   zReprPrinter._print_BooleanTruec                 C   rS   )NZfalser   r7   r   r   r   _print_BooleanFalse   rU   zReprPrinter._print_BooleanFalsec                 C   rS   )Nnanr   r7   r   r   r   
_print_NaN   rU   zReprPrinter._print_NaNc                 C   sh   | j dvr
| }nt|}t|}t| j|}t|j}|dkr+|dd	|  S |dd	|  S )N)oldZnoner-   r.   r    r   )
r   Zas_ordered_factorsr   Z	make_argsr/   r0   r'   r1   r"   r   r2   r   r   r   
_print_Mul   s   



zReprPrinter._print_Mulc                 C      d|  |j|  |jf S )NzRational(%s, %s))r'   r\   qr7   r   r   r   _print_Rational      zReprPrinter._print_Rationalc                 C   s   d|j j|j|jf S )Nz
%s(%d, %d))r(   r"   r\   r{   r7   r   r   r   _print_PythonRational   s   z!ReprPrinter._print_PythonRationalc                 C   rz   )NzFraction(%s, %s))r'   	numeratordenominatorr7   r   r   r   _print_Fraction   r}   zReprPrinter._print_Fractionc                 C   s&   t |jt|j}d|jj||jf S )Nz%s('%s', precision=%i))mlib_to_strZ_mpf_r   Z_precr(   r"   rM   r   r   r   _print_Float   s   zReprPrinter._print_Floatc                 C   s0   d|  |j|  |j|  |j|  |jf S )NzSum2(%s, (%s, %s, %s)))r'   frp   rK   br7   r   r   r   _print_Sum2   s   zReprPrinter._print_Sum2c                 C   s   d|j j| |jf S Nrn   )r(   r"   r'   name)r   rF   r   r   r   
_print_Str   s   zReprPrinter._print_Strc                 C   sj   |j j}|jr|j|d< |i krd|jj| |jf S dd | D }d|jj| |jd	|f S )Ndummy_indexrn   c                 S      g | ]
\}}d ||f qS z%s=%sr   r   kvr   r   r   r          z-ReprPrinter._print_Symbol.<locals>.<listcomp>
%s(%s, %s)r    )
_assumptions	generatorZis_Dummyr   r(   r"   r'   r   rj   r   r   r)   dattrr   r   r   _print_Symbol   s   
zReprPrinter._print_Symbolc                 C   sn   |j j}|i krd|jj| |j| |jf S dd | D }d|jj| |j| |jd|f S )Nr   c                 S   r   r   r   r   r   r   r   r      r   z7ReprPrinter._print_CoordinateSymbol.<locals>.<listcomp>rm   r    )	r   r   r(   r"   r'   Z	coord_sysindexrj   r   r   r   r   r   _print_CoordinateSymbol   s   



z#ReprPrinter._print_CoordinateSymbolc                 C   r[   )NzQ.%s)r   r7   r   r   r   _print_Predicate   r^   zReprPrinter._print_Predicatec                 C   s   |j }d|jj| |df S )Nrn   r    )Z_argsr(   r"   r   )r   r)   r   r   r   r   _print_AppliedPredicate   s   z#ReprPrinter._print_AppliedPredicatec                 C   rV   r5   )reprr7   r   r   r   
_print_str  r9   zReprPrinter._print_strc                 C   s.   t |dkrd| |d  S d| |d S )Nr   z(%s,)r   r   r    )r/   r'   r   r7   r   r   r   _print_tuple  s   zReprPrinter._print_tuplec                 C   s   d|j j|jf S )Nz%s('%s'))r(   r"   r   r7   r   r   r   _print_WildFunction  s   zReprPrinter._print_WildFunctionc                 C   s$   d|j j| |j| | f S )Nr   )r(   r"   r'   rootZcoeffsr7   r   r   r   _print_AlgebraicNumber  s   z"ReprPrinter._print_AlgebraicNumberc                 C   ,   d|j j| |j| |j| |jf S Nrm   r(   r"   r'   symbolsdomainr   )r   ringr   r   r   _print_PolyRing     zReprPrinter._print_PolyRingc                 C   r   r   r   )r   fieldr   r   r   _print_FracField  r   zReprPrinter._print_FracFieldc                 C   s>   t | }|j|jjdd d|jj| |j| |f S )NTrg   reverser   )listtermssortr   r   r(   r"   r'   )r   Zpolyr   r   r   r   _print_PolyElement  s    zReprPrinter._print_PolyElementc                 C   sp   t |j }|j|jjdd t |j }|j|jjdd | |}| |}d|jj	| |j||f S )NTr   rm   )
r   numerr   r   r   r   denomr'   r(   r"   )r   ZfracZnumer_termsZdenom_termsr   r   r   r   r   _print_FracElement  s   

zReprPrinter._print_FracElementc                 C   s    |j j}| |j}d||f S r   )r(   r"   r'   r   )r   r   clsr   r   r   r   _print_FractionField(  s   z ReprPrinter._print_FractionFieldc                 C   sZ   |j j}| |j}dt| j|j}t|j}||j	kr#d| }nd}d||||f S )Nr    z, order= %s(%s, %s%s))
r(   r"   r'   r   r   r0   gensr$   r   Zdefault_order)r   r   r   domr   r   Zorderstrr   r   r   _print_PolynomialRingBase-  s   


z%ReprPrinter._print_PolynomialRingBasec                 C   sP   |j j}| |j}| |j}|jd urd| |j }nd}d||||f S )Nz, ring=r   r   )r(   r"   r'   repr   r   )r   r\   r   r   r   Zringstrr   r   r   
_print_DMP8  s   
zReprPrinter._print_DMPc                 C   s   dt |j S )NzFiniteExtension(%s))r$   modulus)r   extr   r   r   _print_MonogenicFiniteExtensionB     z+ReprPrinter._print_MonogenicFiniteExtensionc                 C   s$   |  |j}|  |j}d||f S )NzExtElem(%s, %s))r'   r   r   )r   r   r   r   r   r   r   _print_ExtensionElementG  s   z#ReprPrinter._print_ExtensionElementr5   )7r"   r!   __qualname__ZprintmethodZ_default_settingsr   r,   r4   r8   rG   rO   rP   rR   rT   rX   rY   rZ   r]   r_   r`   ra   rb   rc   rd   rf   rk   rl   rr   rt   ru   rw   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sn    
	%
	
r   c                 K   s   t || S )zreturn expr in repr form)r   r   )r)   Zsettingsr   r   r   sreprL  r   r   N)__doc__typingr   r   Zsympy.core.functionr   Zsympy.core.mulr   Zmpmath.libmpr   r   r   Zprinterr	   r
   r   r   r   r   r   r   <module>   s      =