o
    à8Va'  ã                   @   s4  d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ ddlmZmZmZm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(ed+d,„ ƒZ)d-d.„ Z*d/d0„ Z+d1d2„ Z,d3d4„ Z-d5S )6z Test sparse rational functions. é    )ÚfieldÚsfieldÚ	FracFieldÚFracElement)Úring)ÚZZÚQQ)Úlex)ÚraisesÚXFAIL)ÚsymbolsÚE)ÚsqrtÚRationalÚexpÚlogc                  C   s   t dttƒ} t dttƒ}t dttƒ}| j| jd ksJ ‚| j| jd ks&J ‚| j|jks.J ‚| j|jks6J ‚| j|jks>J ‚| j|jksFJ ‚d S )Núx,yúx,y,zr   é   )r   r   r	   ÚxÚgensÚy)ÚF1ÚF2ÚF3© r   ú?/usr/lib/python3/dist-packages/sympy/polys/tests/test_fields.pyÚtest_FracField___init__   s   r   c                  C   s"   t dtƒ\} }}}t| ƒsJ ‚d S ©Nr   ©r   r   Úhash©ÚFr   r   Úzr   r   r   Útest_FracField___hash__   s   r$   c                   C   sD  t dtƒd t dtƒd ksJ ‚t dtƒd t dtƒd u s J ‚t dtƒd t dtƒd ks0J ‚t dtƒd t dtƒd us@J ‚t dtƒd t dtƒd ksPJ ‚t dtƒd t dtƒd us`J ‚t dtƒd t dtƒd kspJ ‚t dtƒd t dtƒd us€J ‚t dtƒd t dtƒd ksJ ‚t dtƒd t dtƒd us J ‚d S )Nr   r   r   )r   r   r   r   r   r   r   Útest_FracField___eq__   s            $r%   c            	      C   s  t dƒ} tttt| ƒƒt| ƒfttƒ}|j\}}}tt| ƒtt| ƒd tt| ƒd ƒd  ƒd  t| ƒd  ƒ||d |d  | fksGJ ‚t| td|  ƒt| ƒ| t	ddƒ fttƒ}|j\}}}}t| d t| ƒ d| d   td|  t| ƒd  ƒ | d  ƒ|d|j
d  | |j
| |  d| |  |d  fks¡J ‚t| t| ƒt| t| ƒ ƒfttƒ}|j\}}}t| d | | t| ƒ t	ddƒ   d| t| ƒd    ƒ||j
|d  |j
|  |d  ||  |j
d |d  | |j
|d  |   fksJ ‚d S )Nr   r   é   é   é   é   )r   r   r   r   r   r	   r   r   r   r   r   r   )	r   r"   ÚeZexexÚexÚ_ZlgZx3Zsrtr   r   r   Útest_sfield,   s$   >ÿ*>6ÿ"8(&ÿÿr-   c                  C   s*   t dtƒ\} }}}t|| | ƒsJ ‚d S r   r   r!   r   r   r   Útest_FracElement___hash__?   s   r.   c                  C   sP   t dtƒ\} }}}|| d | }| ¡ }||ksJ ‚d|jd< ||ks&J ‚d S )Nr   r&   é   )r   r   r   )r   r   ÚcopyÚnumer)r"   r   r   r#   ÚfÚgr   r   r   Útest_FracElement_copyC   s   
r4   c                     s  t dtƒ\} }}}d|d  | || |  d|d  d  ‰| j\‰ }}dˆ d  | ˆ | |  d|d  d  }ˆ|ksAJ ‚ˆ ¡ |ksIJ ‚tdƒ\‰ }}dˆ d  | ˆ | |  d|d  d  }ˆ|kslJ ‚ˆ ˆ ||¡|kswJ ‚tt‡ ‡fdd„ƒ d S )Nr   r&   r'   r/   r   c                      s
   ˆ  ˆ ¡S ©N)Úas_exprr   ©ÚXr2   r   r   Ú<lambda>]   ó   
 z*test_FracElement_as_expr.<locals>.<lambda>)r   r   r   r6   r
   Ú
ValueError)r"   r   r   r#   ÚYÚZr3   r   r7   r   Útest_FracElement_as_exprM   s   ,,,r>   c                     s  t dƒ\‰} }tˆ| |ftƒ\‰ }}}ˆ  d¡}|dkr"t|ˆ jƒs$J ‚ˆ  tddƒ¡}|ˆ dƒd kr:t|ˆ jƒs<J ‚ˆ  ˆ¡}||krKt|ˆ jƒsMJ ‚ˆ  tddƒˆ ¡}||tddƒ krft|ˆ jƒshJ ‚ˆ  dˆ ¡}|d| kr{t|ˆ jƒs}J ‚ˆ  ˆ|  | ¡}||| | kr”t|ˆ jƒs–J ‚ˆ  ˆ|  | ¡}||| | kr­t|ˆ jƒs¯J ‚ˆ  ˆ|  | ˆ|   ˆ ¡}||| | ||  | krÒt|ˆ jƒsÔJ ‚ˆ  ˆ|  | ˆ|   ˆ ˆ|  d  ¡}||| | ||  | || d  krt|ˆ jƒsJ ‚ˆ  ˆd |  | ˆd | d   d ¡}||d | | |d |d   d kr8t|ˆ jƒs:J ‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ ttdˆ   	¡  
dˆ  ¡tƒsbJ ‚ttˆd   	¡  
ˆd	 ¡tƒsuJ ‚ttttddƒƒ  	¡  
t¡tƒs‰J ‚d S )
Nr   r   r&   r/   r'   c                      s   ˆ   dˆ ¡S )Nr'   )Ú	from_exprr   ©r"   r   r   r   r9      s    z,test_FracElement_from_expr.<locals>.<lambda>c                      s   ˆ   dˆ tdƒ ¡S )Nr/   r'   )r?   r   r   r@   r   r   r9   ‚   s    iúÿÿÿ)r   r   r   r?   Ú
isinstanceZdtyper   r
   r;   Z	get_fieldZconvertr   r   r   )r   r#   r8   r<   r=   r2   r   r@   r   Útest_FracElement_from_expr_   sB   
 
"  ,*<*<
ÿ
ÿÿrB   c                  C   s¶  t dƒ\} }}t | |¡}| |¡}|| | ƒ}|j| |¡| | ƒks&J ‚|j ¡ || | ƒgks4J ‚|j| |¡dƒks@J ‚t | |¡}| |¡}|| | ƒ}|j| |¡| | ƒks_J ‚|j ¡ || | ƒgksmJ ‚|j| |¡dƒksyJ ‚||| | ƒƒ}|j| |¡| | ƒksJ ‚|j ¡ || | ƒgksJ ‚|j| |¡dƒks©J ‚||| | ƒƒ}|j| |¡| | ƒks¿J ‚|j ¡ || | ƒgksÍJ ‚|j| |¡dƒksÙJ ‚d S )Nza b xr   )r   r   Z
frac_fieldr1   Z	poly_ringZcoeffsÚdenom)ÚaÚbr   r   r   Zfracr   ZF4r   r   r   Útest_FracField_nestedŒ   s*   

rF   c                  C   s4  t dtƒ\} }}| dƒd|   k r$d|d    k r$d|d  k s'J ‚ J ‚| dƒd|   krCd|d    krCd|d  ksFJ ‚ J ‚d| d|   k rgd|   k rg||   k rgd|d  k sjJ ‚ J ‚d| d|   kr‹d|   kr‹||   kr‹d|d  ksŽJ ‚ J ‚d|d  d|d    krªd|   krª| dƒks­J ‚ J ‚d|d  d|d    krÉd|   krÉ| dƒksÌJ ‚ J ‚d|d  ||   kríd|   kríd|   kríd| ksðJ ‚ J ‚d|d  ||   krd|   krd|   krd| ksJ ‚ J ‚d S )Nr   r   r'   r&   éùÿÿÿ)r   r   ©r"   r   r   r   r   r   Útest_FracElement__lt_le_gt_ge__§   s   >>HH>>HTrI   c                  C   sP   t dtƒ\} }}d| d | }d| d | }| |ksJ ‚| |ks&J ‚d S )Nr   r/   é	   rG   )r   r   )r"   r   r   r2   r3   r   r   r   Útest_FracElement___neg__¶   s
   rK   c                  C   sÖ  t dtƒ\} }}d| d| }}|| ||   kr&|| ||  ks)J ‚ J ‚|| jjd  | jjd |   krBd| ksEJ ‚ J ‚t dtƒ\} }}|d d| ksWJ ‚|tddƒ tddƒ|   krrd| d d ksuJ ‚ J ‚t dtƒ\}}}t d|ƒ\}}}}	}
|| | |||   }t|jƒd|| d	œks¡J ‚t|jƒd|| d
œks¯J ‚tdtƒ\}}}t d|ƒ\}}}}	}
|| | |||   }t|jƒd|| d	œksÛJ ‚t|jƒd|| d
œkséJ ‚d S )Nr   r   r   r'   r&   r/   úu,vúx,y,z,t©)r   r   r   r   ©r   r   r   r   ©)r   r   r   r   rO   ©r   r   r   r   r   Údictr1   rC   ©r"   r   r   r2   r3   ÚFuvÚuÚvÚFxyztr#   ÚtÚRuvr   r   r   Útest_FracElement___add__¿   s"   08< rZ   c                  C   sÈ  t dtƒ\} }}d| d| }}|| | | ||  ks J ‚|| jjd  | jjd |   kr7dks:J ‚ J ‚t dtƒ\} }}|d d|  ksMJ ‚|tddƒ tddƒ|    krid| d d kslJ ‚ J ‚t dtƒ\}}}t d|ƒ\}}}}	}
|| | |||   }t|jƒd|| d	œks˜J ‚t|jƒd| | d
œks§J ‚tdtƒ\}}}t d|ƒ\}}}}	}
|| | |||   }t|jƒd|| d	œksÓJ ‚t|jƒd| | d
œksâJ ‚d S )Nr   r   r   r&   r/   rL   rM   éÿÿÿÿrN   rP   rQ   rS   r   r   r   Útest_FracElement___sub__Ù   s"   4>"r\   c                  C   s  t dtƒ\} }}d| d| }}|| ||   kr$d||  ks'J ‚ J ‚|| jjd  | jjd |   kr@|d ksCJ ‚ J ‚t dtƒ\} }}|d d| ksUJ ‚|tddƒ tddƒ|   kro|tddƒ ksrJ ‚ J ‚t dtƒ\}}}t d|ƒ\}}}}	}
|d | | d |d |	 |
| |  d  }t|jƒ|d dd	œksªJ ‚t|jƒ|d | | d
dœks¼J ‚tdtƒ\}}}t d|ƒ\}}}}	}
|d | | d |d |	 |
| |  d  }t|jƒ|d dd	œksôJ ‚t|jƒ|d | | d
dœksJ ‚d S )Nr   r   r   r'   r&   r/   rL   rM   )©r   r   r   r   rO   r[   ))r   r   r   r   )r   r   r   r   rO   )	r   r   r   r   r   r   rR   r1   rC   rS   r   r   r   Útest_FracElement___mul__ó   s"   ,8:0$0*r^   c                     sT  t dtƒ\} ‰ }dˆ  d| }}|| |ˆ  ksJ ‚ˆ | jjd  | jjd ˆ    kr2dks5J ‚ J ‚t dtƒ\} ‰ }ˆ d dˆ  ksGJ ‚ˆ tddƒ tddƒˆ  d   krcˆ tddƒ ksfJ ‚ J ‚tt‡ fdd„ƒ tt‡ fd	d„ƒ tt‡ fd
d„ƒ t dtƒ\}}}t d|ƒ\}‰ }}}	|| ˆ |  }t|j	ƒd|| iks¨J ‚t|j
ƒddiks³J ‚ˆ | ||  }t|j	ƒddiksÆJ ‚t|j
ƒd|| iksÓJ ‚tdtƒ\}
}}t d|
ƒ\}‰ }}}	|| ˆ |  }t|j	ƒd|| iksúJ ‚t|j
ƒddiksJ ‚ˆ | ||  }t|j	ƒddiksJ ‚t|j
ƒd|| iks(J ‚d S )Nr   r   r   r&   r/   r[   c                      s   ˆ d S ©Nr   r   r   ©r   r   r   r9     s    z.test_FracElement___truediv__.<locals>.<lambda>c                      s   dˆ ˆ   S ©Nr   r   r   r`   r   r   r9     ó    c                      s   ˆ ˆ ˆ   S r5   r   r   r`   r   r   r9     rb   rL   rM   rO   r]   )r   r   r   r   r   r   r
   ÚZeroDivisionErrorrR   r1   rC   )r"   r   r2   r3   rT   rU   rV   rW   r#   rX   rY   r   r`   r   Útest_FracElement___truediv__  s4   4> rd   c                     s¨   t dtƒ\} ‰ }dˆ  d| }}|d dˆ d  ksJ ‚|d d|d  ks)J ‚|| d dˆ d |d   ks;J ‚|| d ˆ | d ksIJ ‚tt‡ fdd„ƒ d S )Nr   r   r&   éýÿÿÿc                      s   ˆ ˆ  d S )Nre   r   r   r`   r   r   r9   >  rb   z*test_FracElement___pow__.<locals>.<lambda>)r   r   r
   rc   )r"   r   r2   r3   r   r`   r   Útest_FracElement___pow__3  s   $rf   c                  C   sD   t dtƒ\} }}}|d | |d   |¡d| |d  ks J ‚d S )Nr   r'   r   )r   r   Zdiffr!   r   r   r   Útest_FracElement_diff@  s   2rg   c                     s^   t dtƒ\} }}}|d d|  | ‰ ˆ dddƒ}|dkr"t|tƒr$J ‚tt‡ fdd„ƒ d S )Nr   r'   r&   r   r(   c                      s   ˆ dddƒS )Nr   r   r   r   ©r2   r   r   r9   L  rb   z+test_FracElement___call__.<locals>.<lambda>)r   r   rA   r   r
   rc   )r"   r   r   r#   Úrr   rh   r   Útest_FracElement___call__E  s
   rj   c                     sl   t dtƒ\} }}‰t dtƒd }|d d|  ˆ ‰ ˆ  |d¡d|j |j ks*J ‚tt‡ ‡fdd„ƒ d S )Nr   zy,zr   r'   r&   c                      ó   ˆ   ˆd¡S r_   )Úevaluater   ©r2   r#   r   r   r9   T  rb   z+test_FracElement_evaluate.<locals>.<lambda>)r   r   rl   r   r#   r
   rc   )r"   r   r   ZFyzr   rm   r   Útest_FracElement_evaluateN  s
    rn   c                     sZ   t dtƒ\} }}‰|d d|  ˆ ‰ ˆ  |d¡d| ˆ ks!J ‚tt‡ ‡fdd„ƒ d S )Nr   r'   r&   r   c                      rk   r_   )Úsubsr   rm   r   r   r9   [  rb   z'test_FracElement_subs.<locals>.<lambda>)r   r   ro   r
   rc   rH   r   rm   r   Útest_FracElement_subsV  s   rp   c                   C   s   d S r5   r   r   r   r   r   Útest_FracElement_compose]  s   rq   c                     sh   t dƒ‰tdtƒ\‰ } }}ˆ  | ¡dksJ ‚ˆ  |¡dksJ ‚tt‡ fdd„ƒ tt‡ ‡fdd„ƒ d S )NrD   zx y zr   r   c                      s
   ˆ   d¡S ra   ©Úindexr   )r"   r   r   r9   f  r:   z&test_FracField_index.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r5   rr   r   ©r"   rD   r   r   r9   g  r:   )r   r   r   rs   r
   r;   )r   r   r#   r   rt   r   Útest_FracField_index`  s   ru   N).Ú__doc__Zsympy.polys.fieldsr   r   r   r   Zsympy.polys.ringsr   Zsympy.polys.domainsr   r   Zsympy.polys.orderingsr	   Zsympy.testing.pytestr
   r   Z
sympy.corer   r   Zsympyr   r   r   r   r   r$   r%   r-   r.   r4   r>   rB   rF   rI   rK   rZ   r\   r^   rd   rf   rg   rj   rn   rp   rq   ru   r   r   r   r   Ú<module>   s>    
-	&
