o
    8VaI{                     @   s  d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJ d dlKmLZL d d	lMmNZNmOZO d d
lPmQZQ ed\ZRZSZTZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_d d! Z`d"d# Zad$d% Zbd&d' Zcd(d) Zdd*d+ Zed,d- Zfd.d/ Zgd0d1 Zhd2d3 Zid4d5 Zjd6d7 Zkd8d9 Zld:d; Zmd<d= Znd>d? Zod@dA ZpdBdC ZqdDdE ZrdFdG ZsdHdI ZtdJdK ZudLdM ZvdNdO ZwdPdQ ZxdRdS ZydTdU ZzdVdW Z{dXdY Z|dZd[ Z}d\d] Z~d^d_ Zd`da ZdbS )c    )dedent)isliceproduct)
symbolsIntegerIntegralTupleDummyBasicdefault_sort_keyMatrix	factorialtrue)RGS_enum
RGS_unrankPermutation)iterable)1
_partition_set_partitionsbinary_partitions	braceletscapturecartescommon_prefixcommon_suffixconnected_components
dict_mergefilter_symbolsflattengenerate_bellgenerate_derangementsgenerate_involutionsgenerate_oriented_forestgrouphas_dupsibiniproductkbinsminlexmultisetmultiset_combinationsmultiset_partitionsmultiset_permutations	necklacesnumbered_symbolsordered
partitionspermutations	postfixespostorder_traversalprefixesreshaperotate_leftrotate_rightrunssiftstrongly_connected_componentssubsetstaketopological_sort	unflattenuniq
variationsordered_partitions	rotationsis_palindromic)factoring_visitormultiset_partitions_taocp)S)	PiecewiseExprCondPair)raiseszw,x,y,zc                   C   s   t dsJ t dsJ t dsJ t dsJ t drJ t dr$J t dds+J t dd	r2J t dd	d
s:J t dd	dsBJ t ddsIJ t dd	rPJ t dd	dsXJ d S )N xZxxZxyxZxyZxyzxZxxyzzyx         Zxxyzyx   )rC    rQ   rQ   F/usr/lib/python3/dist-packages/sympy/utilities/tests/test_iterables.pytest_is_palindromic   s   rS   c                  C   s|  t ttt   } t ttttt ttt  ttt  t  g}tt| td|ks)J tt| dd|ks5J tttdk ftd df} tdttdk tttdk dttd t	ttd dtttdk ftd dfg}tt| td|kstJ tt| gtd|| gg ksJ ttt
td tddftddttd ddtttddt
td ttddgksJ ttdg dksJ d S )N)keysTrL   rM   r   abcdef)rV   rX   rY   rW   rU   )zwrK   ylistr3   r   rG   rH   r   r   r   )exprZexpectedrQ   rQ   rR   test_postorder_traversal.   s.   *$
r_   c                     s"  t dddgks
J t ttffttgksJ ddgdgg t  dd ks(J t  ddg dks4J t  d	dg d
ks@J t  ddg d
ksLJ tt fdd G dd dt} t | tttg| tttgksoJ t | tttg| dtttgksJ t h dth dksJ d S )N)rL   rL   rL   rN   rL   rM   r   r   r   Zlevels)ra   rc   rd   rM   )rb   rN   rL   rM   r   r      c                      s   t  ddS )NrN   re   )r   rQ   ZlsrQ   rR   <lambda>R       ztest_flatten.<locals>.<lambda>c                   @   s   e Zd ZdS )ztest_flatten.<locals>.MyOpN)__name__
__module____qualname__rQ   rQ   rQ   rR   MyOpT   s    rm   cls>   rL   rM      )r   rK   rI   
ValueErrorr
   r\   rZ   r]   )rm   rQ   rg   rR   test_flattenG   s   $$ rr   c                  C   s  t t dgks
J t tg g ksJ t tg dg dks"J ttddgg dg dks3J ttddgddgddgg d	ksGJ tttjd
u sRJ tttjtjd
u s_J dttjv shJ dttjtjv ssJ dttjtjtjv sJ ttttjtjtjd} | D ]\}}}t|t	sJ t|t	sJ t|t	sJ qtt
tddgd  D ]}|ttjtjtjv sJ qd S )NrQ   rL   rM   rf   r`   rM   rf   rL   rM   rf      rP   rL   rf   )rL   rx   )rL   rP   rM   rf   rM   rx   )rM   rP   r   r   r   r   r   r   rL   )r   rL   r   r   rL   rL   )rL   r   r   )rL   r   rL   )rL   rL   r   rL   rL   rL   Trv   )rx   rP   i  rb   rf   )r]   r&   sortedr   rF   ZIntegerssetr   
isinstancer   r   range)ZtriplesZn1Zn2Zn3trQ   rQ   rR   test_iproduct]   s$   "(r   c                   C   s@  t g g ksJ t g ddg ksJ t dgdggksJ t dgdddgks)J t ddgddggks6J t ddgdddgksCJ t g dg dgksPJ t g ddddgks]J t g ddgd	gdggksmJ t g dddg d
ks{J t g dddgg ddgddggksJ t g dddg dksJ d S )NF)ZmultiplerL   rL   rL   rc   r   rz   rL   rM   rL   rM   )r   rM   rL   r   )rL   rL   rM   rM   rM   rL   rf   rf   rM   rM   rM   rf   )rc   r{   r   rf   rM   )r#   rQ   rQ   rQ   rR   
test_groups   s    * r   c                  C   s  t tg dddgksJ t tg ddg dksJ t tg ddg dks,J t tg dddgks:J t td	} t t| dd
ddgksNJ t t| dd
dg dks]J t t| dd
dg dkslJ t t| dd
dg dks{J tt t| d	d
ddksJ t t| d d dddg ksJ t t| d d dd
dg dksJ t tddgd
dg dksJ t tddgddg dksJ t tg ddg dksJ t tg ddd
dg dksJ d S )Nrs   r   rQ   rL   rt   rM   )rc   rz   r{   rf   rx   TZ
repetitionr   r`   ru   rv   )
rd   r   rL   r   rM   r   rf   r   rc   rz   rM   rM   r{   rf   rf   )r~   r   )r   r   rM   )r   r   rf   r   r   rL   rM   r   rL   rf   )r   rM   rM   r   rM   rf   )r   rf   rf   r   rL   rL   rM   rL   rL   rf   rL   rM   rM   rs   )rL   rf   rf   r   )rM   rM   rf   )rM   rf   rf   )rf   rf   rf   #   F)r~   r   r   r   )rQ   r`   ru   r   rc   r   )rQ   r`   ru   rc   )r   rc   rz   r   r{   r   )r]   r;   r   lenlrQ   rQ   rR   test_subsets   s0   
"&r   c                  C   sb  t td} t t| ddddgksJ t t| dddg dks#J t t| dddg d	ks2J t t| d
ddg dksAJ t t| ddddgksOJ t t| dddg dks^J t t| dddg dksmJ tt t| d
dddks|J tt t| ddddksJ t t| d d d
ddg ksJ t t| d d d
ddg dksJ d S )Nrx   r   Fr   rQ   rL   r   rM   )r   r   r   rL   r   rc   rz   rM   r   r   r{   rf   r   rf   rL   r   rf   )r   r   r   rM   rL   r   r   rf   rL   )r   rf   rM   rL   r   rM   )rL   r   rf   rL   rM   r   rs   )rL   rf   r   )rL   rf   rM   rM   r   rL   )rM   r   rf   rM   rL   r   )rM   rL   rf   )rM   rf   r   )rM   rf   rL   )rf   r   rL   )rf   r   rM   )rf   rL   r   )rf   rL   rM   )rf   rM   r   rf   rM   rL   T)rd   r   r   r   r   r   rc   rz   r   r   r   r{   r   r   r   r   @      r}   )r]   r   r@   r   r   rQ   rQ   rR   test_variations   s   "*r   c                   C   s   t tddgg dg dksJ t t dgksJ t tddgks&J t tdddd	gks3J t tt tdd
dgksCJ d S )NrL   rM   rw   ry   rQ   a)r   )repeat)r   r   r   r`   )r]   r   r   rQ   rQ   rQ   rR   test_cartes   s   $r   c                  C   s2   t  } t| td}t|dttdksJ d S )Nzx0 x2 x3rf   zx1 x4 x5)r.   r   r   r<   r]   )sZfilteredrQ   rQ   rR   test_filter_symbols   s   r   c                  C   sD   t td} tt| tsJ tt ddtdgdtdks J d S )Nrn   CrL   ZC1)startZexcludeZC2)r.   r	   r   nextr   )r   rQ   rQ   rR   test_numbered_symbols   s
   
r   c                   C   s   t ttddd ddgg ddksJ t ttgdd tgtgd	ks(J t tjgd
d ddgiks8J t g ddd ddddgddgfksMJ t g ddd dddgg dfksaJ ttdd  d S )NrP   c                 S      | d S NrM   rQ   _rQ   rQ   rR   rh          ztest_sift.<locals>.<lambda>rL   rf   )r   rM   rx   r   c                 S   
   |  tS NZhasrK   r   rQ   rQ   rR   rh         
 )FTc                 S   r   r   r   r   rQ   rQ   rR   rh      r   Fr   rL   rM   rf   c                 S   r   r   rQ   rK   rQ   rQ   rR   rh      r   Tbinaryr   rM   c                 S   s   | d dkS )Nrf   rL   rQ   r   rQ   rQ   rR   rh      ri   r   c                   S   s   t g ddd ddS )Nr   c                 S   r   )Nrf   rQ   r   rQ   rQ   rR   rh      r   z-test_sift.<locals>.<lambda>.<locals>.<lambda>Tr   )r9   rQ   rQ   rQ   rR   rh      s   )	r9   r]   r   rK   r\   rF   ZOnerI   rq   rQ   rQ   rQ   rR   	test_sift   s   ,$ 


r   c                  C   sX   t  } t| dttdksJ t| dttdksJ tg ddg dks*J d S )NrP   zx0:5zx5:10rL   rM   rf   rx   rP   )r.   r<   r]   r   )XrQ   rQ   rR   	test_take   s   r   c                   C   s   t i dtttidtttiksJ t dtttii dtttiks"J t dtidtttidtdtttiks7J t dtttidtidtdtttiksLJ t ttddtttidtdtttiksbJ t dtttittddtdtttiksxJ d S )NrL   rM   rc   )r   rK   r\   rZ   rQ   rQ   rQ   rR   test_dict_merge   s   ""**,0r   c                   C   s   t tg g ks
J t tdgdggksJ t tddgdgddggks(J t tg ddgddgg dg dg dgksBJ d S )NrL   rM   r   rs   rL   rM   rf   rx   )r]   r4   rQ   rQ   rQ   rR   test_prefixes      "r   c                   C   s   t tg g ks
J t tdgdggksJ t tddgdgddggks(J t tg ddgddgg dg dg dgksBJ d S )NrL   rM   r   rP   rx   rw   )rM   rf   rx   rP   )r]   r2   rQ   rQ   rQ   rR   test_postfixes  r   r   c                      s`   g dg d t  fg dksJ t  fdd dg dks$J tt fdd d S )	N)rM   rf   rP         	   
   rp   )	)r   rp   r   r   )rP   rp   )rf   r   )rf   r   )rp   rM   )rp   r   )rp   r   )r   r   )rf   rP   r   r   rp   rM   r   r   c                 S   s   |  S r   rQ   )vrQ   rQ   rR   rh         z'test_topological_sort.<locals>.<lambda>key)r   rP   rp   rf   r   r   r   rM   c                      s   t  dg fS )N)r   r   )r=   rQ   EVrQ   rR   rh         )r=   rI   rq   rQ   rQ   r   rR   test_topological_sort  s   r   c                  C   s   t g g fg ks
J t g dg fdgdgdggksJ g d} g d}t | |fg dgks1J g d} g d}t | |fdgddgdggksJJ g d} g d	}t | |fddgddggksbJ d S )
Nrs   rL   rM   rf   rc   rz   r   r{   r   r   rc   r{   r   rf   rx   rx   )rc   r   r   )rx   rf   )r:   r   r   rQ   rQ   rR   "test_strongly_connected_components  s   $"$r   c                  C   s   t g g fg ks
J t g dg fdgdgdggksJ g d} g d}t | |fg dgks1J g d} g d}t | |fg dgksFJ g d} dd	g}t | |fddgdd
ggks^J d S )Nrs   rL   rM   rf   r   r   r   rc   r   rx   )r   r   rQ   rQ   rR   test_connected_components.  s   $$r   c                  C   s   g d} t | dg dksJ t| dg dksJ g } t| d}|g ks'J |d | g ks2J t | d}|g ks=J |d | g ksHJ d S )Nr   rL   rM   rf   rx   rM   )rM   rf   rx   r   rL   rL   )rx   r   rL   rM   rf   )r6   r7   append)ABrQ   rQ   rR   test_rotate?  s   



r   c               
   C   s  g d} t t| ddgdgdgdgdgggksJ tt t| ddks'J tt t| dd	ks4J t tg d
dg ddggg dddggg ddggg dddggddgg dggksbJ t tg ddg ddggddgddggg ddggddgddgggksJ t tg ddg ddggg ddggddgddggg ddggddgddggddgddggdgg dggksJ t tg ddddgdggdgddgggksJ t tdg dgddgdggddgdggdgddggdgdgdgggksJ t tddddgdggddgdggdgddgggks"J t tdgd ddgddgggks7J t tdgd g dgdgddggdgdgdgggksVJ g d}t t|t tt|kskJ t t|dg kswJ t t|dg dggksJ t t|dg dg ksJ t t|dg dg dggksJ t tddg ksJ t tddddgggksJ t tddgggksJ t tddg ksJ t tdddggdgdgggksJ t tddddgggksJ t tdddggksJ t tddgdddgggks#J g d}t dd tdD |ks7J dgd dgd!dgdd"gg d#g d$g d%g}t d&d tddgD |ks_J d S )'Nr   rP   r   rL   rM   rf   rx   r      )rL   rL   rL   rM   rM   )rL   rL   rL   rM   r   )rL   rL   rM   rM   r   r   r   rs   )rL   rM   rx   rL   rf   rx   rM   rf   rx   r   r   r   abbaaa)$)Zmpsyy)Zmpsyr\   )mpsyy)r   r\   r\   )Zmpyyr   )mpysy)r   r   r\   )mpsyy)r   r   r\   )r   r   r   )r   r   r\   r\   )Zmsyyp)msypy)r   r   r\   )mspyy)r   r   r\   )r   r   r   )r   r   r\   r\   )myyps)r   r   r   )mypsy)r   r   r\   )r   r   r   )r   r   r   )r   r   r   r\   )mZpsyy)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   s"    | ]}t d d |D V  qdS )c                 s       | ]}d  |V  qdS rJ   Njoin).0partrQ   rQ   rR   	<genexpr>      z5test_multiset_partitions.<locals>.<genexpr>.<genexpr>N)tupler  r   rQ   rQ   rR   r    s    z+test_multiset_partitions.<locals>.<genexpr>sympy   r      rO   )rx   rM   rf   )rO   rM   rM   )rM   rM   rM   rf   c                 s   s    | ]
}t |d dgV  qdS )rM   rf   N)rD   r  rQ   rQ   rR   r    s    )r]   r+   r   r   rE   )r   r   ansZ
factoringsrQ   rQ   rR   test_multiset_partitionsO  sz   ,&
&
&(


,$*"

 & ( $

r  c                  C   s   g d} dd t tddD | ksJ td}dd t t|dD | ks(J dd t|dD g ks6J t td	gd
dggd
d	gd
dgggksLJ tt tdddksYJ tt tddd	ksfJ t tdd	dgdgdggkswJ d S )N)ZiiiZiimZiipZiisimpZimsZippZipsZissZmppr   ZmssZppsZpssZsssc                 S      g | ]}d  |qS rJ   r   r  irQ   rQ   rR   
<listcomp>      z.test_multiset_combinations.<locals>.<listcomp>Zmississippirf   c                 S   r  r  r   r  rQ   rQ   rR   r    r  c                 S   r  r  r   r  rQ   rQ   rR   r    r     rL   rM   r   r   rV   r   c)r]   r*   r)   r   )r
  MrQ   rQ   rR   test_multiset_combinations  s"   ,&r  c                     sd  g d} dd t dD | ksJ dd t tdD | ks J tt g ddddggks0J tt g d	ddd
gddgd
dgd
dgddgdd
ggksOJ ttt ddd
ks\J ttt dddksiJ g i dfD ]}tt |g gks{J qntt |dg gksJ tt |d
g ksJ tt |dg ksJ dd  t fddtdksJ d S )N)ZabbyZabybZaybbbabyZbaybZbbayZbbyaZbyabZbybaZyabbZybabZybbac                 S   r  r  r   r  rQ   rQ   rR   r    r  z.test_multiset_permutations.<locals>.<listcomp>r  c                 S   r  r  r   r  rQ   rQ   rR   r    r  r~   rM   r   r   rL   r   rf   rJ   rN   c                  S   s8   t ddD ]} t|  tg d| D ]}t| qqd S )NrL   r   )r   r   rL   r   rL   )r   printr,   )r  r   rQ   rQ   rR   test  s   
z(test_multiset_permutations.<locals>.testc                           S r   rQ   rQ   r  rQ   rR   rh     r   z,test_multiset_permutations.<locals>.<lambda>a          1
        [0]
        [1]
        2
        [0, 0]
        [0, 1]
        [1, 0]
        [1, 1]
        3
        [0, 0, 0]
        [0, 0, 1]
        [0, 1, 0]
        [0, 1, 1]
        [1, 0, 0]
        [1, 0, 1]
        [1, 1, 0]
        4
        [0, 0, 0, 1]
        [0, 0, 1, 0]
        [0, 0, 1, 1]
        [0, 1, 0, 0]
        [0, 1, 0, 1]
        [0, 1, 1, 0]
        [1, 0, 0, 0]
        [1, 0, 0, 1]
        [1, 0, 1, 0]
        [1, 1, 0, 0]
        5
        [0, 0, 0, 1, 1]
        [0, 0, 1, 0, 1]
        [0, 0, 1, 1, 0]
        [0, 1, 0, 0, 1]
        [0, 1, 0, 1, 0]
        [0, 1, 1, 0, 0]
        [1, 0, 0, 0, 1]
        [1, 0, 0, 1, 0]
        [1, 0, 1, 0, 0]
        [1, 1, 0, 0, 0]
        6
)r,   r)   r]   r   r   r   )r
  ZnulrQ   r  rR   test_multiset_permutations  s     $
 r  c               	   C   s  i gdi fgg} t dD ]_}ttd|d| | ksJ ttdd|d| | ks+J ttddd|d| | ks;J ttddd |d| | ksKJ ttdd d|d| | ks[J ttddd|d| | kskJ qdd tdddD dd	iddd
ddd
ddigksJ dd tdd	dD d	diddddd	dddd	iddd
ddd
ddigksJ dd tddd	dD ddiddddddddddg  krdd tddd	dD ksJ  J dd ttd	ddD d	diddd
gksJ dd tdd	dD dddddiddd
ddig  kr'dd tdD ks*J  J t ddD ]&}d}t|D ]\}}|t||ksEJ |d7 }q7|t|ksTJ q/d S )Nr   rM   )sizerL   rO   c                 S      g | ]}|qS rQ   rQ   r  rQ   rQ   rR   r        z#test_partitions.<locals>.<listcomp>)krf   rc   rx   c                 S   r  rQ   rQ   r  rQ   rQ   rR   r    r  rs   rz   c                 S   r  rQ   rQ   r  rQ   rQ   rR   r    r  r   )r   r   r   r|   r{   c                 S   s2   g | ]}t d d |D rt| dkr|qS )c                 s       | ]}|d kV  qdS )rx   NrQ   r  r   rQ   rQ   rR   r        -test_partitions.<locals>.<listcomp>.<genexpr>rf   )allsumvaluesr  rQ   rQ   rR   r    s    c                 S   r  rQ   rQ   r  rQ   rQ   rR   r    r  )r   c                 S   r  rQ   rQ   r  rQ   rQ   rR   r    r  c                 S   s"   g | ]}t d d |D r|qS )c                 s   r!  )rf   NrQ   r"  rQ   rQ   rR   r    r#  r$  )r%  r  rQ   rQ   rR   r    s
    )r   r]   r0   rF   r   r   r   )r
  r  nr   qrQ   rQ   rR   test_partitions  sN      "
&
 


r*  c                   C   s   dd t dD ddg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ks7J tdd t dD dksFJ d S )Nc                 S      g | ]}|d d  qS r   rQ   r  rQ   rQ   rR   r        z*test_binary_partitions.<locals>.<listcomp>r   r   rM   )r   rL   rL   )rx   rx   rM   )rx   rx   rL   rL   )rx   rM   rM   rM   )rx   rM   rM   rL   rL   )rx   rM   rL   rL   rL   rL   )rx   rL   rL   rL   rL   rL   rL   )rM   rM   rM   rM   rM   )rM   rM   rM   rM   rL   rL   )rM   rM   rM   rL   rL   rL   rL   )rM   rM   rL   rL   rL   rL   rL   rL   )	rM   rL   rL   rL   rL   rL   rL   rL   rL   )
rL   rL   rL   rL   rL   rL   rL   rL   rL   rL   c                 S   r+  r   rQ   r  jrQ   rQ   rR   r    r,     $   )r   r   rQ   rQ   rQ   rR   test_binary_partitions  s   
"r1  c                  C   s   dd t ddD dd t ddD ksJ ttdg dks"J t ddD ]} tt | }t| }|D ]}|t|jks@J | }q5q'ttd	d
  d S )Nc                 S   s   g | ]
}t tt|qS rQ   )r   r   r   r  rQ   rQ   rR   r    s    z"test_bell_perm.<locals>.<listcomp>rL   r   c                 S   s   g | ]}t |qS rQ   )r   r  rQ   rQ   rR   r    s    rf   )r   r   r   r   r   r   rP   c                   S   s   t tdS )Nr   )r]   r   rQ   rQ   rQ   rR   rh   #  ri   z test_bell_perm.<locals>.<lambda>)	r   r]   r   r   r  Z
array_formZnext_trotterjohnsonrI   rq   )r(  r   r   ZbirQ   rQ   rR   test_bell_perm  s   
r2  c                  C   sX   g d} t | D ]!\}}tt|d }t||ksJ tdd |D dks)J qd S )N)rL   rM   rx   r      L   rL   c                 S   s   h | ]}t |d  qS ru   )r   r-  rQ   rQ   rR   	<setcomp>+  r,  z#test_involutions.<locals>.<setcomp>)	enumerater]   r!   r   )Zlengthsr(  Nr  rQ   rQ   rR   test_involutions&  s   r8  c                   C   s   t ttttddksJ ddd tdD dks J ttg dg d	g d
g dg dg dg dg dg dg dg	ksGJ ttg dg dg dgksYJ ttdtdgksfJ d S )NrO   i	  rJ   c                 s   r   r   r   r  rQ   rQ   rR   r  0  r  z$test_derangements.<locals>.<genexpr>abcdeZbadecbaecdbcaedbcdeabceadbdaecbdeacbdecabeacdbedacbedcacabedcadebcaebdcdaebcdbeacdeabcdebaceabdcebadcedabcedbadabecdaebcdaecbdcaebdcbeadceabdcebadeabcdeacbdebacdebcaeabcdeadbceadcbecabdecbadecdabecdbaedabcedacbedbacedbcar   )rL   r   rf   rM   )rL   rM   rf   r   )rL   rf   r   rM   )rM   r   rf   rL   )rM   rf   r   rL   )rM   rf   rL   r   )rf   r   rL   rM   )rf   rM   r   rL   )rf   rM   rL   r   )r   rL   rM   rM   )rM   rM   r   rL   )rM   rM   rL   r   Zbar   )r   r]   r    r   r   rQ   rQ   rQ   rR   test_derangements.  s    

r:  c               
   C   s   dd } g }t ddD ]}||| |dd| |dd| |ddf qt|tg dg d	g d
g dg dg dg dgksBJ d S )Nc                 S   s   t tt| ||S r   )r   r]   r-   )r(  r   frQ   rQ   rR   count>     ztest_necklaces.<locals>.countrL   r   rM   r   rf   )rL   rM   rM   rf   )rM   rf   rf   rO   )rf   rx   rx   r   )rx   rO   rO      )rP   r   r   '   )rO         \   )r            )r   r   r   )r<  r   r  rQ   rQ   rR   test_necklaces=  s    rF  c                  C   s   dd t ddD } t| tddgddgddgddgddgddgddgddgddgddgg
ks2J dd t ddD } t| tg d	g d
g dg dg dg dgksXJ d S )Nc                 S   r  rQ   rQ   r  rQ   rQ   rR   r  O  r  z"test_bracelets.<locals>.<listcomp>rM   rx   r   rL   rf   c                 S   r  rQ   rQ   r  rQ   rQ   rR   r  \  r  )r   r   r   r   )r   r   r   rL   )r   r   rL   rL   )r   rL   r   rL   )r   rL   rL   rL   )rL   rL   rL   rL   )r   r   )ZbcrQ   rQ   rR   test_braceletsN  s,   rG  c                   C   s   t t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 dg dg dg dg dg dgksFJ tt tddksRJ d S )NrP   r   )r   rL   rM   rf   rf   )r   rL   rM   rf   rM   )r   rL   rM   rf   rL   )r   rL   rM   rf   r   )r   rL   rM   rM   rM   )r   rL   rM   rM   rL   )r   rL   rM   rM   r   )r   rL   rM   rL   rM   )r   rL   rM   rL   rL   )r   rL   rM   rL   r   )r   rL   rM   r   rL   )r   rL   rM   r   r   )r   rL   rL   rL   rL   )r   rL   rL   rL   r   )r   rL   rL   r   rL   )r   rL   rL   r   r   )r   rL   r   rL   r   )r   rL   r   r   r   )r   r   r   r   r   r   i2  )r]   r"   r   rQ   rQ   rQ   rR   test_generate_oriented_forestg  s   
rH  c                  C   s   t td} t| t t| d d d | dd d ksJ t| dt| d d t| dd  gks4J ttdd  ttdd  d S )Nr   rM   rL   rP   c                   S      t ttddS )Nr   rf   r>   r]   r   rQ   rQ   rQ   rR   rh   u  r   z test_unflatten.<locals>.<lambda>c                   S   rI  )Nr   rb   rJ  rQ   rQ   rQ   rR   rh   v  r   )r]   r   r>   zipr  rI   rq   )rrQ   rQ   rR   test_unflattenq  s
   ..rM  c                   C   sF  t g dgg ks
J t ttdg dksJ t ttdttdg dks+J t g dg dddgks:J t g dg ddgksHJ tg dgg ksRJ tttdg dks`J tttdttdg dkssJ tttdttdg ksJ tg dg d	ddgksJ tg dg d
dgksJ d S )NrL   rf   r   rx   rs   )rL   rM   rP   rM   )rL   rf   rP   )r   rM   rf   )r   r   rf   )r   r]   r   r   rQ   rQ   rQ   rR   test_common_prefix_suffixy  s   &&" rN  c                   C   sp   t g ddks
J t ddksJ t ddksJ t ddddks$J t ddks,J t d	td
dks6J d S )Nr   r   r   r   F)ZdirectedZabaZaab)bbr   r  r   r   )r  r   rO  r   )r(   r   rQ   rQ   rQ   rR   test_minlex  s   rP  c                      s   t tttftddttgttgfv sJ t tttftddt tttftddks-J t tttfttgks;J g dg dg ddgdggdd	 d
d	 fg\ t t ddddgdgg dg dg dgksoJ tt fdd	 d S )NF)defaultr   r   r   rM   rL   c                 S      t | S r   )r   r   rQ   rQ   rR   rh     r   ztest_ordered.<locals>.<lambda>c                 S   rR  r   )r&  r   rQ   rQ   rR   rh     r   rQ  warnc                      s   t t dddS )NFTrS  )r]   r/   rQ   rT   seqrQ   rR   rh     r=  )r]   r/   rK   r\   hashrI   rq   rQ   rQ   rU  rR   test_ordered  s   *rX  c                  C   s   t g g ksJ t dgdggksJ t ddgdgdggks!J t g ddgddggks0J t g dddgdggks?J t g ddgdgdggksOJ ddlm}  t g d| ddgdggkseJ d S )NrL   r   rM   r   )rM   rL   rL   r   lt)r8   operatorrZ  rY  rQ   rQ   rR   	test_runs  s    $r\  c                  C   s  t tdd} t| dgg dg dgksJ t| dddgks"J t| dddgks-J t| ddgfddd	dgfd
dddgfgksEJ t| ddgfdd	dgfdddgfgks[J t| ddgdfddd	gdfd
ddgdfgkstJ tt| dgddgfdgddgfd
gddgffksJ tt| dgddfdgddfd
gddffksJ tt tddd	gdhdgddg dd
dhdggksJ ttdd  ttdd  d S )NrL   r   rx   r   )rP   rO   r   r   )rx   r   rM   rf   rP   rO   r   r   ru   rc   )rP   rO   r   r   r	  )rL   rv   rL   r   r   )r   )r   r   r   rp   c                   S      t ddgdgS )Nr   rL   rN   r5   rQ   rQ   rQ   rR   rh     r  ztest_reshape.<locals>.<lambda>c                   S   r]  )Nr   rL   rf   r^  rQ   rQ   rQ   rR   rh     r  )r]   r   r5   r  rI   rq   )rV  rQ   rQ   rR   test_reshape  s<   
r_  c                      s  t tdd tdD ddidddddidddddigks"J t tdd td	D d
dgks5J t tddgks@J t tdt dksLJ t tdgddgdggdgddggksbJ t ttdd dgddfD dgddfddgdfdddgfgksJ t tdddddgdgdgdgdgg	ddddgdgdggksJ dg tt fdd dgg tt fdd d S )Nc                 s       | ]}|V  qd S r   rQ   r  rQ   rQ   rR   r        ztest_uniq.<locals>.<genexpr>rx   rL   rz   rM   rc   c                 s   s    | ]}|d  V  qdS )rM   NrQ   )r  rK   rQ   rQ   rR   r    r#  rP   r   r   ZababcrV   c                 s   r`  r   rQ   r  rQ   rQ   rR   r    ra  rf   c                          fddt  D S )Nc                       g | ]}  |qS rQ   remover  r;  rQ   rR   r    r  /test_uniq.<locals>.<lambda>.<locals>.<listcomp>r?   rQ   rf  rQ   rR   rh     r  ztest_uniq.<locals>.<lambda>c                      rb  )Nc                    rc  rQ   rd  r  rf  rQ   rR   r    r  rg  rh  rQ   rf  rQ   rR   rh     r  )r]   r?   r0   r   r1   rI   RuntimeErrorrQ   rQ   rf  rR   	test_uniq  s"   $&,  &rj  c                      s   t ttdddddksJ t ttdddddksJ t ttdddddks-J t ttddd	dd
ks<J t ttddd ddksKJ dd  t fddtdks]J dd tfddtdksoJ d S )NZ1123rM   rL   r/   r  rp   r0  r   r   rP   rf   c                  S   s:   dD ]} t d|  tg dd| dD ]}t d| qqd S )NNr   rL   r   rp   	ordered =r   rM   rk     )r  r'   Z
orderedvalr   rQ   rQ   rR   test1  s   
ztest_kbins.<locals>.test1c                      r  r   rQ   rQ   )rp  rQ   rR   rh     r   ztest_kbins.<locals>.<lambda>a#          ordered = None
            [[0], [0, 1]]
            [[0, 0], [1]]
        ordered = 0
            [[0, 0], [1]]
            [[0, 1], [0]]
        ordered = 1
            [[0], [0, 1]]
            [[0], [1, 0]]
            [[1], [0, 0]]
        ordered = 10
            [[0, 0], [1]]
            [[1], [0, 0]]
            [[0, 1], [0]]
            [[0], [0, 1]]
        ordered = 11
            [[0], [0, 1]]
            [[0, 0], [1]]
            [[0], [1, 0]]
            [[0, 1], [0]]
            [[1], [0, 0]]
            [[1, 0], [0]]
c                  S   s>   dD ]} t d|  tttdd| dD ]}t d| qqd S )Nrl  rm  rf   rM   rk  rn  )r  r'   r]   r   ro  rQ   rQ   rR   test2  s   
ztest_kbins.<locals>.test2c                      r  r   rQ   rQ   )rq  rQ   rR   rh     r   a[          ordered = None
            [[0], [1, 2]]
            [[0, 1], [2]]
        ordered = 0
            [[0, 1], [2]]
            [[0, 2], [1]]
            [[0], [1, 2]]
        ordered = 1
            [[0], [1, 2]]
            [[0], [2, 1]]
            [[1], [0, 2]]
            [[1], [2, 0]]
            [[2], [0, 1]]
            [[2], [1, 0]]
        ordered = 10
            [[0, 1], [2]]
            [[2], [0, 1]]
            [[0, 2], [1]]
            [[1], [0, 2]]
            [[0], [1, 2]]
            [[1, 2], [0]]
        ordered = 11
            [[0], [1, 2]]
            [[0, 1], [2]]
            [[0], [2, 1]]
            [[0, 2], [1]]
            [[1], [0, 2]]
            [[1, 0], [2]]
            [[1], [2, 0]]
            [[1, 2], [0]]
            [[2], [0, 1]]
            [[2, 0], [1]]
            [[2], [1, 0]]
            [[2, 1], [0]]
)r   r]   r'   r   r   rQ   rQ   )rp  rq  rR   
test_kbins  s    rr  c                   C   sB   t t du s	J t ttddu sJ t g ddu sJ d S )NFrf   r   T)r$   r   r]   r   rQ   rQ   rQ   rR   test_has_dups!  s   rs  c                  C   s   t dg dddgddgdggksJ t dg ddddgddgdggks'J dg df} t dg| R  ddgddgdggksAJ d S )	Nr9  )rL   r   rL   rM   r   r   er   r  rX   rf   )r   )outputrQ   rQ   rR   test__partition'  s   

,rv  c               	   C   s   ddl m}  t}t|ddg gksJ t|ddg gks J tddD ]6}d gttd| D ])}tdd |||dD tdd |||dD   krW| ||ksZJ  J q1q%d S )Nr   )nTrL   r   c                 s       | ]}d V  qdS rL   NrQ   r  rQ   rQ   rR   r  8  ra  z*test_ordered_partitions.<locals>.<genexpr>c                 s   rx  ry  rQ   r  rQ   rQ   rR   r  9  ra  )Z%sympy.functions.combinatorial.numbersrw  rA   r]   r   r&  )rw  r;  r  r.  rQ   rQ   rR   test_ordered_partitions0  s   rz  c                   C   s|   t tdddgddggksJ t ttdg dg dg dgks%J t ttddd	g dg dg dgks<J d S )
Nr   r   r   rf   r   r   r   rN   )dir)r]   rB   r   rQ   rQ   rQ   rR   test_rotations=  s    *2r|  c                   C   s   t dddgks
J t ddg dksJ t ddddksJ t dddddks*J tt dd	g d
ks7J tt ddddg dksFJ ttdd  ttdd  d S )Nrf   rL   r   T)str11Z011rM   r%  )rd   r   r   r   rJ   )Z00Z01Z10r~  c                   S   s   t dS )Ng      ࿩r%   rQ   rQ   rQ   rR   rh   J  r   ztest_ibin.<locals>.<lambda>c                   S   s
   t ddS )NrM   rL   r  rQ   rQ   rQ   rR   rh   K  r   )r%   r]   rI   rq   rQ   rQ   rQ   rR   	test_ibinC  s   r  N)textwrapr   	itertoolsr   r   r  r   r   r   r   r	   r
   r   r   r   r   Zsympy.combinatoricsr   r   r   Zsympy.core.compatibilityr   Zsympy.utilities.iterablesr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   Zsympy.utilities.enumerativerD   rE   Zsympy.core.singletonrF   Z$sympy.functions.elementary.piecewiserG   rH   Zsympy.testing.pytestrI   r[   rK   r\   rZ   rS   r_   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r*  r1  r2  r8  r:  rF  rG  rH  rM  rN  rP  rX  r\  r_  rj  rr  rs  rv  rz  r|  r  rQ   rQ   rQ   rR   <module>   sl    0(				B@+

	N	