o
    *ήcN                     @   s&  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZ d dlmZmZmZmZ d d	lmZmZ ejZe	d
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-S ).    )permutations)	unchanged)Integer)Eq)Symbol)S)Permutation
_af_parity_af_rmul	_af_rmulnAppliedPermutationCycle)sstrsreprprettylatex)raiseswarns_deprecated_sympyaTintegerc               	      s  t tdd  tg d  fddt jD t ksJ  tt jt ks.J t ddg dks;J t t fd	d t t fd
d t ttdksYJ tddtdksdJ ttdddtdksrJ tddggddtddgdgdggksJ tdtddgtddgfv sJ tg d tdgg dg} t  hdksJ tg d}tt	dd  | |fD  j
}t | |j
|ksJ t | |fD ]\}}}|||f | |fkrqt|||j
|ksJ qۈ  ttdksJ |  g dksJ t jj
 j
ksJ  jdks#J | jdks+J | jdks3J t|  tg dksAJ t | tg dksOJ t j
| j
g dks]J ttg dddggtg ddgdggjg dddggksJ | j
g dksJ | jg dgksJ | jg ddggksJ  jg dg dgksJ   }|g dksJ tjd d |D  sJ tddg d!gksJ  d"  ksJ | d ttt| jksJ | d# | d  ksJ | d tg d$ks	J | d | d |  ksJ | d | d | d  ks%J tdd}tddd}td}| |d% ks>J ||  |ksHJ ||d%  ||  ksVJ tddddd&dd} |    | kspJ  |   j| ks~J |     | ksJ t t fd'd  |    tdd&ddddd ksJ   |   dk sJ |     tddd&ddd ksJ  |  tt	d(d |  fD  ksJ  tg   ksJ tg    ksJ  tddgg tg d)ksJ tddgg  tg d*ksJ  | A }|tg d+ks.J |t|  |  ks:J |  A }	|	tg d,ksIJ |	t |   ksUJ t t fd-d  | tddddd&ddkspJ |  tdddd&dddksJ  | |   ksJ t t fd.d t  dksJ |  h d/ksJ   g d0ksJ |  g d1ksJ t   ksJ t|  j
| j
ksJ t td2d  td3d td4d%d%D  d5ksJ tg d6}
|
 dks	J |
j}t|
j|
jkr|
 dksJ |
jr$J |
js*J tg d7 dks7J tg d6dksBJ tg d7dksMJ tdg}
|
j sXJ tg j!s`J tg d8}|d j"snJ t   j"sxJ   d" tg d9ksJ |d j" sJ  # d&ksJ  $ dksJ td&gdgg d:g} | # dksJ | $ dksJ tg d; tg d<ddgg}  % g d=ksJ | % g dksJ |% g ksJ  & g d>ksJ | & g d?ksJ t|& j"sJ   dksJ t tt # d  # d@  }t| dks4J  ' d%ks=J |  dAksFJ | ' d%ksOJ t    dks\J t   ' dksiJ  ( d&ksrJ | ( dBks{J   (  j"sJ  ) d&ksJ | ) dksJ |) dksJ  * ddgdgg dCdggksJ | * dgg dDdd&gdggksJ |* dgdgdgdggksJ  + dEksJ | + dEksJ |+ dksJ  ,| | , ksJ  -|  -| ksJ  .|  .| ksJ tg d tg d8}  ,| d&ks/J  -| dks9J  .| dEksCJ tg dF t/ddd}  -| dksZJ t t fdGd t t fdHd t t fdId dJd tdD }tg d}tdD ]R}t|d dD ]G}|| 0|| t|| || t|| || kksJ || 0|| r|| || |ksJ || || |ksJ qqtd}tdd&ddd}|j1ddiksJ |j1ddddKksJ t tdLd  t tdMd  d S )NNc                   S   s
   t dgS )N   r    r   r   R/tmp/pip-target-vg8gfxp4/lib/python/sympy/combinatorics/tests/test_permutations.py<lambda>      
 z"test_Permutation.<locals>.<lambda>r   r         c                    s   g | ]} |qS r   r   .0ipr   r   
<listcomp>       z$test_Permutation.<locals>.<listcomp>r   r   r   r   r   r   c                          dS )Nr   r   r#   r   r   r          c                      r(   )N   r   r   r#   r   r   r      r*      sizer   r+   r   r   r+   r      r   r   r,   )r   r   r+   r0   r   r,   )r   r   r   r   r,   r0   r+   c                 S   s   g | ]}|j qS r   )
array_formr!   wr   r   r   r%   +   s       )r   r   r   r,   r+   r0   i  )r,   r0   r   r   r+   r   r   )r0   r+   r   r   r   r,   r   )r   r   r   )r   r   r,   )r   r,   r   )r   r   r,   r+   r   r0   r   )r   r   r   r+   )r   r0   r,   ))r   r+   r   r   )r   r   )r   r,   )r   r0   c                 S   s   g | ]}t t| qS r   )r   r   )r!   tir   r   r   r%   H       r5      )r+   r   r   r0   r   r   r,   r)   r0   c                      s    t ttd S )N
   )r   listranger   r#   r   r   r   ]   r&   c                 S      g | ]}t |qS r   )r;   r2   r   r   r   r%   c   r&   )r   r+   r   r0   r   r   r,   )r+   r   r   r0   r   r   r,   )r+   r0   r   r,   r   r   r   )r,   r   r0   r   r   r+   r   c                      s    t g A S Nr   r   r#   r   r   r   o       c                           tg S r>   )
commutatorr   r   r#   r   r   r   t       >   r   r   r   r   r,   r+   r0   )r   r,   r   r   r   r   )r   r   r   r   r   r   c                   S   s   t ddgS )Nr   r   )r   from_inversion_vectorr   r   r   r   r      rB   c                 S   s   g | ]}|qS r   r   r    r   r   r   r%          i  iB )r   r,   r   r   r   r   r   r,   r   r   r   r   r   r   )r+   r   r   r,   r0   r   r   r   r   r   r   r,   r   r+   r   r   r   r0   r,   r   r   r   r+   r0   )r   r   r,   )r   r   r+   )r   r   r+         r:   )r   r   r0   )r   r   r+      )r   r   r   r   r,   c                      r@   r>   )get_adjacency_distancer   r   r#   r   r   r      rB   c                      r@   r>   )get_positional_distancer   r   r#   r   r   r      rB   c                      r@   r>   )get_precedence_distancer   r   r#   r   r   r      rB   c                 S   s   g | ]}t d |qS r,   )r   unrank_nonlexr    r   r   r   r%      r7   )r   r   r   c                   S   s   t dddS )Nr   r-   r   r   r   r   r   r      r?   c                   S   s   t g dddS )Nr   r   r   r   r   r-   r   r   r   r   r   r      rD   )2r   
ValueErrorr   r<   r.   r;   	TypeErrorrandomlenr   r1   rmulr   supportcyclic_formcardinalitycyclesr
   full_cyclic_formtranspositionsrank_rankrA   atomsinversion_vectorrC   
inversionsparity_cyclic_formis_oddis_evenr	   is_Singletonis_Emptyis_Identitymaxminascentsdescents	signatureorderlengthrunsindexrO   rM   rN   josephuscommutes_withcycle_structure)qransr   bctIpqqps_bigidenr"   jr   r#   r   test_Permutation   s^  $,&

 
..($$$$
($
&&&""
r   c                     s   G dd dt   g d} t g d| ksJ ttfdd ddg| ddgks/J t|   ks9J t|  t ksCJ  fd	d
}|  d S )Nc                       s4   e Zd Z fddZ fddZ fddZ  ZS )z7test_Permutation_subclassing.<locals>.CustomPermutationc                    sV   zt  j| W S  ty   Y nw z|d } fdd|D W S  ty*   tdw )Nr   c                    s   g | ]} j | qS r   )_array_form)r!   r   selfr   r   r%      s    zTtest_Permutation_subclassing.<locals>.CustomPermutation.__call__.<locals>.<listcomp>zunrecognized argument)super__call__rT   )r   r"   perm_obj	__class__r   r   r      s   z@test_Permutation_subclassing.<locals>.CustomPermutation.__call__c                    s&   t |tr|  | kS t |S r>   )
isinstancer   _hashable_contentr   __eq__)r   otherr   r   r   r      s   
z>test_Permutation_subclassing.<locals>.CustomPermutation.__eq__c                    
   t   S r>   )r   __hash__r   r   r   r   r      s   
z@test_Permutation_subclassing.<locals>.CustomPermutation.__hash__)__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   CustomPermutation   s    r   r   r   r   r   c                      s    ddgS Nr   r   r   r   )rv   r   r   r     r?   z.test_Permutation_subclassing.<locals>.<lambda>r   r   r   c                      s<   t  d t  d<  t  d< t  t  d t  d< t  d= d S )Nr   __Perm)globalsr   r   )r   r   r   wrapped_test_Permutation	  s
   
z>test_Permutation_subclassing.<locals>.wrapped_test_Permutation)r   r   rT   type)r$   r   r   )r   rv   r   test_Permutation_subclassing   s   
r   c                   C   s6   t dddt g dksJ t dddjsJ d S )Nr,   r0   r   )r   r   r   r   r+   r,   r+   )r   rs   ri   r   r   r   r   test_josephus  s   r   c                  C   s  t dd dksJ t dd} |  dksJ |  }| dks&J t dd dks2J t ddjs;J t dd} |  dksIJ | jg d	ksRJ |  d u sZJ t g d
} t g dddgg}dd tdD }|g dg dg dg dg dgksJ dd |D ttdksJ t g d t g dksJ |	 dksJ | 	 dksJ t ddg	 dksJ t ttd}|}g }g }tdD ]}|
| |
| | }| }q||  krd u sJ  J dd |D dd |D ks	J t g d} t dgdgg dg}|  dks#J | dks,J t g  dks7J |  }|dksBJ t d d| ksMJ | }	|	d!ksXJ t d d!t |jksfJ d"d td#D }|g d$g d%g d&g d'g d(g d)g dg d*g d+g dg d,g d-g d.g d/g d0g d1g d	g d2g dg d3g d4g d5g dg dgksJ d}
t |d }td|
d D ]}|t ||  }qt jd6d ||
d d7 D  }||ksJ g }t ddg} tdD ]}|
| j |  } | d u r|
d   nq|ddgddgd gks#J t g d% t g d&ks4J d8d |D ttd#ksDJ d S )9Nr+   r:            r   r,      rF   rH   rI   c                 S      g | ]	}t d |jqS rP   )r   unrank_trotterjohnsonr1   r    r   r   r   r%   (      z test_ranking.<locals>.<listcomp>r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   c                 S      g | ]}t | qS r   )r   rank_trotterjohnsonr!   par   r   r   r%   +  r7   i  i=  r   r   r0   c                 S   s   h | ]}t |qS r   )tuple)r!   r   r   r   r   	<setcomp><  r&   ztest_ranking.<locals>.<setcomp>r/   rG   i  if  i@  r4   )   c                 S   r   rP   r   rQ   r1   r    r   r   r   r%   J  r      r   )r   r   r   r   )r   r   r   r   rR   )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   )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   c                 S   r=   r   r   )r!   hr   r   r   r%   V  r&   r)   c                 S   r   r   )r   rank_nonlexr   r   r   r   r%   c  r7   )r   
unrank_lexr^   next_lexri   r1   r<   r;   next_trotterjohnsonr   appendr   rQ   rmul_with_afnext_nonlex)r$   p1rv   r   ry   ltjr"   prankqrankNp2okr   r   r   test_ranking  s   




"

"$r   c                     s4  g dg d}  t |  g dksJ t|  ttdg dks$J tt| t jg dks4J tg d} d dt|  tg dksMJ t| tg dks[J tt fdd	 d
d}fddt|D } tt}t|D ]}t || | }t| d |d   }||ksJ q~d S )Nr'   r   r   r,   r   r   rF   c                      s   t  S r>   )r   rW   r   )ry   rz   r   r   r   q  r?   ztest_mul.<locals>.<lambda>r0   rL   c                    s   g | ]	}t  |jqS r   r   r    )nr   r   r%   u  r   ztest_mul.<locals>.<listcomp>r   )	r
   r   r;   r<   rW   r   r1   r   rT   )r   mr   r"   h2r   )ry   rz   r   r   test_mulf  s&     r   c                  C   s^  t ddg} | jd u sJ t | | ksJ | jg dddggks"J | jg dks+J t d} | jd u s6J | jg dks?J t dgt dksJJ t dgdggt d	  krbt ddgfkseJ  J t dd
ggt g dkstJ t dgdd
ggt g dksJ t dgdd
ggddt g dksJ t dgdd
ggddt g dksJ t ddgdd
ggt ddd
ksJ t g ddt g dksJ t ddg dksJ t ddg ksJ t ddd
dg dksJ t ddd
 g dksJ ttdd  ttdd  ttdd  ttdd  t ddt g dks-J d S )Nr   )r,   r+   r,   r+   )r   r   r   r   r+   r,   r   r   r   )r   )r   r   r   r   r   rE   r-   r0   )r   r   r,   r   r   r+   r   r   r   r   rG   r)   )r   r   r   r   r,   r+   c                   S   s   t ddgdgS Nr   r   r   r   r   r   r   r   r     rD   ztest_args.<locals>.<lambda>c                   S   s   t ddgdgS r   r   r   r   r   r   r     rD   c                   S   s   t g dS )N)r   r   r   r   r   r   r   r   r     r?   c                   S   s   t ddgddS )Nr,   r+   r:   r-   r   r   r   r   r   r     rD   )r   r   r   r   r+   r,   )r   rd   rY   r   r;   r   rS   r#   r   r   r   	test_args}  s>   "&
$   r   c                  C   s  t t dks	J ttddtddksJ tdd tddks%J ttdddg dks3J tddddtdddksCJ tddddddtdddddksYJ ttddddddjsnJ tdddttd	d
  tdd g dksJ tdddg dksJ tddddgksJ tddg dksJ ttddddtg dksJ t tdddddksJ t tdddksJ ttttdt ksJ tdd g dksJ tdddg dksJ t j	dksJ ttdd
  ttdd
  tt
dd
  ttdd
  ttdd
  tddgddggdd} tt| | ksAJ d S )N()r   r   r   r   r,   r+   r   c                   S   r   r>   )r   r;   r   r   r   r   r     r   ztest_Cycle.<locals>.<lambda>r   r'   r0   r   r   r   r   r,   r+   r-   z
(1 2)(4 5)(1 2)c                   S   s   t dS )N)r   r   r   r   r   r   r   r     r*   c                   S   s   t dddS r   r   r   r   r   r   r     r?   c                   S   s   t ddi  S r   r   r   r   r   r   r     rB   c                   S   s   t dt S Nr,   )r   r   r   r   r   r   r     r?   c                   S   s   t dddS )Nr   r   r   r   r   r   r   r     r?   )strr   copyr;   r   rY   r   rS   r<   r.   rT   r#   r   r   r   
test_Cycle  s8    ,*
r   c                   C   sL   t dt ddddksJ t jddd dt ddd	ddks$J d S )
NSymPyr,   r   r   r   c                 S   s   |   S r>   )lowerxr   r   r   r     r*   z$test_from_sequence.<locals>.<lambda>)keyr   )r   from_sequencer   r   r   r   test_from_sequence  s   r   c                      s   t ddd  dt dddddksJ  dt dddddks$J  d ks-J tt fdd	 t ddddddd
  dt dddksOJ tt fdd	 d S )Nr   r   r   r+   r-   r,   r   c                      
     dS )Nr   resizer   r#   r   r   r     r   ztest_resize.<locals>.<lambda>r0   c                      r   r   r   r   r#   r   r   r     r   )r   r   r   rS   r   r   r#   r   test_resize  s   r   c                  C   sr   t g d} t| dksJ t| dksJ t  }t|dks!J t|dks)J t g d}t|dks7J d S )Nr   zPermutation(1, 2)r   zPermutation()r   rR   zPermutation(3)(0, 1, 2))r   reprr   )r   r   p3r   r   r   test_printing_cyclic  s   r   c                  C   s   t g d} t| dddksJ t| dddksJ t g d}t|dddks*J t|dddks4J t g d}t|dddksDJ t|dddksNJ t g d	}t|ddd
ks^J d S )Nr   F)perm_cycliczPermutation([], size=6)r   zPermutation([0, 1, 2])r   zPermutation([0, 2, 1]))r   r   r   r   r,   r+   r0   r4   z!Permutation([0, 1, 3, 2], size=8))r   r   r   )r   r   r   p4r   r   r   test_printing_non_cyclic  s   r   c                  C   s  t ddd} zdt _t  t| dksJ W d    n1 s w   Y  t  t| dks1J W d    n1 s;w   Y  t  t| dksLJ W d    n1 sVw   Y  t  t| dksgJ W d    n1 sqw   Y  dt _t  t| d	ksJ W d    n1 sw   Y  t  t| d	ksJ W d    n1 sw   Y  t  t| dd
dksJ W d    n1 sw   Y  t  t| dksJ W d    n1 sw   Y  W d t _d S W d t _d S d t _w )Nr   r   r   Tz(0 1 2)zPermutation(0, 1, 2)z\left( 0\; 1\; 2\right)FzPermutation([1, 2, 0]))use_unicodez/0 1 2\
\1 2 0/z4\begin{pmatrix} 0 & 1 & 2 \\ 1 & 2 & 0 \end{pmatrix})r   print_cyclicr   r   r   r   r   r#   r   r   r   test_deprecated_print_cyclic  sB   

r   c                  C   s   t ddd} t ddd}t| |tju sJ t ddd}t| |tju s&J t ddddd}tt| |s6J t ddddd}tt| |sFJ t  }tt|dsQJ ttd|sYJ d S )Nr   r   r   r,   r-   )r   r   r   truefalser   )r   ry   rz   der"   r   r   r   test_permutation_equality  s   r   c                  C   s@   t dd} t dd}| |ksJ t| dksJ | |ksJ d S )Nr   r   zCycle(1, 2))r   r   )c1c2r   r   r   test_issue_17661  s
   

r   c                      s   t dtddd  ddksJ t dtsJ  t ks)J t ddks6J t dddtt fdd t dd	d
tt fdd d S )Nr   r   r   r   Fr   c                      
     S r>   applyr   r$   r   r   r   r   '  r   z(test_permutation_apply.<locals>.<lambda>T)negativec                      r   r>   r   r   r   r   r   r   )  r   )	r   r   r   r   r   r   subsr   NotImplementedErrorr   r   r   r   test_permutation_apply  s   r   c                     sX   t d tddd} tt fdd t| ddddksJ t| dd	djtks*J d S )
Nr   r   r   r   c                      s
   t d S )Nr   )r   r   r   r   r   r   /  r   z)test_AppliedPermutation.<locals>.<lambda>T)evaluateF)r   r   r   rS   r   r   r#   r   r   r   test_AppliedPermutation,  s   r   N)-	itertoolsr   sympy.core.exprr   sympy.core.numbersr   sympy.core.relationalr   sympy.core.symbolr   sympy.core.singletonr    sympy.combinatorics.permutationsr   r	   r
   r   r   r   sympy.printingr   r   r   r   sympy.testing.pytestr   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s8      U.M! 