U
    @f                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	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mZmZ ed
Zed\ZZZdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)EqNe)S)symbols)sqrt)cossin)import_module)skip)WildDotWildPlusWildStarReplacermatchpyzx y zc                 C   s6   ddl m}m} | }||| tt|| S )Nr   )ManyToOneMatcherPattern)r   r   r   addnextitermatch)exprpatternr   r   matcher r   P/tmp/pip-unpacked-wheel-6uje5nh9/sympy/utilities/tests/test_matchpy_connector.py_get_first_match   s    r   c            
      C   s,  t d krtd ddlm}  ddl m}m} td}td}td}t	t
 }t	| }t||\}}	|||ksrt|	|dt
ikstt	t
 t }t	| }t||\}}	|||kst|	|d| t
tgikstt	t
 t }t	t
 t | }t||\}}	|||kst|	|d|  iks(td S )Nmatchpy not installedr   )Multisetr   Substitutionw_w__w___)r   r
   Zmultisetr   r   r   r   r   r   xyr   AssertionErrorz)
r   r   r   r    r!   r"   r   r   psubstr   r   r   test_matchpy_connector   s,    r)   c                  C   s  t d krtd ddl m} m} ddl m}m} tddd}tddd}|t | }d	t }t||\}}	|| |kszt	|	|d	dd
kst	td }
t|
|\}}	|| |kst	|	|ddd
kst	t}t||\}}	|| |kst	|	|ddd
kst	tt
 t }t||\}}	|| |ks2t	|	|t
td
ksJt	| }||| |dd  ||td	td kst	||
tdtd kst	||tdtd kst	||tt
tt kst	d S )Nr   r   r   )ManyToOneReplacerReplacementRuler'      optionalq   r'   r/      c                 S   s   t | t| S N)r   r   r1   r   r   r   <lambda>X       z'test_matchpy_optional.<locals>.<lambda>)r   r
   r   r   r*   r+   r   r#   r   r%   r$   r&   r   replacer   r   )r   r   r*   r+   r'   r/   r   expr1par(   Zexpr2Zexpr3Zexpr4replacerr   r   r   test_matchpy_optional7   s:       r:   c                  C   s2   t d krtd dD ]} dD ]}t| | qqd S )Nr   )TF)r   r
   _perform_test_replacer)infolambdifyr   r   r   test_replacer_   s
    r>   c           
   	      s  t d}t d}t dtjd}t dtjd}t dtjd}ttdd td	d td
d g| d}|jt||t|| dt	|dt	|dt	|t
t	|t
gdd |jt|t
 | dtt
| | dd |d d| |  }|jt|t
d  |t
  | dtt
| t| d|  tt
| t| d|  B |dkgdd |jt|t
d  | dtt
t| | tt
t| |  B | | dkgdd  fdd}	|tdt
 t|	tt
td ddgkst|tt
d d d|	tt
d d dg kst|tt
d d|	tt
dtt
dB ddgksTt|tt
d dt t
  dtd   d|	tt
dt dgkstd S )Nx1_x2_a_r-   b_c_c                 S   s   |  t S r3   Zhasr#   )rA   r   r   r   r4   r   r5   z(_perform_test_replacer.<locals>.<lambda>c                 S   s   |  t S r3   rD   )rB   r   r   r   r4   s   r5   c                 S   s   |  t S r3   rD   )rC   r   r   r   r4   t   r5   )Zcommon_constraintsr=   r<   r   r,   )Zconditions_nonfalser<   r0   r<      r2   c                    s    r| |fS | S r3   r   )r   ZinfosrE   r   r   r4      r5   )r   r   ZOneZZeror   r   ZCustomConstraintr   r   r   r#   r   r6   r$   r%   )
r<   r=   r?   r@   rA   rB   rC   r9   Zdiscgr   rE   r   r;   h   sB     B*6(268r;   c                  C   s   t d krd S td} tt| }| |ks0ttdtd} tt| }| |ksZttdtd} tt| }| |ksttdtd} tt| }| |kstd S )Nar,   )	r   r   pickleloadsdumpsr%   r   r   r   )Za1Za2r   r   r   test_matchpy_object_pickle   s    rM   ) rJ   Zsympy.core.relationalr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.externalr	   Zsympy.testing.pytestr
   Z!sympy.utilities.matchpy_connectorr   r   r   r   r   r#   r$   r&   r   r)   r:   r>   r;   rM   r   r   r   r   <module>   s    (	*