o
    jg؉                     @   s  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
 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 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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZRmSZS ed\ZTZUZVZWd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. Zgd/d0 Zhd1d2 Zid3d4 Zjd5d6 Zkd7d8 Zld9d: Zmd;d< Znd=d> Zod?d@ ZpdAdB ZqdCdD ZrdEdF ZsdGdH ZtdIdJ ZudKdL ZvdMdN ZwdOdP ZxdQdR ZydSdT ZzdUdV Z{dWdX Z|dYdZ Z}d[d\ Z~d]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl ZdmS )n    )dedent)isliceproduct)Basic)Integerordered)Dummysymbols	factorial)Matrix)RGS_enum
RGS_unrankPermutation)5
_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
partitionspermutations	postfixesprefixesreshaperotate_leftrotate_rightrunssiftstrongly_connected_componentssubsetstaketopological_sort	unflattenuniq
variationsordered_partitions	rotationsis_palindromiciterableNotIterablemultiset_derangementssigned_permutationssequence_partitionssequence_partitions_empty)factoring_visitormultiset_partitions_taocp)S)raiseswarns_deprecated_sympyzw,x,y,zc                  C   s   ddl m} m} t  t|ttgttgksJ W d    n1 s$w   Y  t  tttg| dttgks;J W d    d S 1 sFw   Y  d S )Nr   default_sort_keyr   key)sympy.utilities.iterablesrL   r   rJ   listyxsortedrK    rT   \/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/utilities/tests/test_iterables.pytest_deprecated_iterables!   s   "rV   c                   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 rR   xxxyxxyxyzxxxyzzyx         xxyzyx   )r?   rT   rT   rT   rU   test_is_palindromic)   s   rc   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)r]   r]   r]   r_   r]   r^   r   r   r   levels)re   rg   rh   r^   )rf   r_   r]   r^   r   r      c                      s   t  ddS )Nr_   ri   )r   rT   lsrT   rU   <lambda>D       ztest_flatten.<locals>.<lambda>c                   @      e Zd ZdS )ztest_flatten.<locals>.MyOpN__name__
__module____qualname__rT   rT   rT   rU   MyOpF       ru   cls>   r]   r^      )r   rR   rI   
ValueErrorr   rQ   zrP   )ru   rT   rl   rU   test_flatten9   s   $$ r|   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 )NrT   r]   r^   rk   rd   r^   rk   r]   r^   rk      rb   r]   rk   )r]   r   )r]   rb   r^   rk   r^   r   )r^   rb   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]   Tr   )r   rb   i  rf   rk   )rP   r$   rS   r@   rH   Integerssetr   
isinstancer   r   range)triplesn1n2n3trT   rT   rU   test_iproductO   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)multipler]   r]   r]   rg   r   r   r]   r^   r]   r^   )r   r^   r]   r   )r]   r]   r^   r^   r^   r]   rk   rk   r^   r^   r^   rk   )rg   r   r   rk   r^   )r!   rT   rT   rT   rU   
test_groupe   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 )Nr}   r   rT   r]   r~   r^   )rg   r   r   rk   r   T
repetitionr   rd   r   r   )
rh   r   r]   r   r^   r   rk   r   rg   r   r^   r^   r   rk   rk   )r   r   )r   r   r^   )r   r   rk   r   r   r]   r^   r   r]   rk   )r   r^   r^   r   r^   rk   )r   rk   rk   r   r]   r]   r^   r]   r]   rk   r]   r^   r^   r}   )r]   rk   rk   r   )r^   r^   rk   )r^   rk   rk   )rk   rk   rk   #   F)r   r   r   r   )rT   rd   r   r   rg   r   )rT   rd   r   rg   )r   rg   r   r   r   r   )rP   r7   r   lenlrT   rT   rU   test_subsetsz   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 )Nr   r   Fr   rT   r]   r   r^   )r   r   r   r]   r   rg   r   r^   r   r   r   rk   r   rk   r]   r   rk   )r   r   r   r^   r]   r   r   rk   r]   )r   rk   r^   r]   r   r^   )r]   r   rk   r]   r^   r   r}   )r]   rk   r   )r]   rk   r^   r^   r   r]   )r^   r   rk   r^   r]   r   )r^   r]   rk   )r^   rk   r   )r^   rk   r]   )rk   r   r]   )rk   r   r^   )rk   r]   r   )rk   r]   r^   )rk   r^   r   rk   r^   r]   T)rh   r   r   r   r   r   rg   r   r   r   r   r   r   r   r   r   @      r   )rP   r   r<   r   r   rT   rT   rU   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 )Nr]   r^   r   r   rT   a)r   )repeat)r   r   r   rd   )rP   r   r   rT   rT   rT   rU   test_cartes   s   $r   c                  C   s2   t  } t| td}t|dttdksJ d S )Nzx0 x2 x3rk   zx1 x4 x5)r,   r   r
   r8   rP   )sfilteredrT   rT   rU   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 )Nrw   Cr]   C1)startexcludeC2)r,   r	   r   nextr
   )r   rT   rT   rU   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 )Nrb   c                 S      | d S Nr^   rT   _rT   rT   rU   rn          ztest_sift.<locals>.<lambda>r]   rk   )r   r^   r   r   c                 S   
   |  tS NhasrR   r   rT   rT   rU   rn         
 )FTc                 S   r   r   r   r   rT   rT   rU   rn      r   Fr   r]   r^   rk   c                 S   r   r   rT   rR   rT   rT   rU   rn      r   Tbinaryr   r^   c                 S   s   | d dkS )Nrk   r]   rT   r   rT   rT   rU   rn      ro   r   c                   S   s   t g ddd ddS )Nr   c                 S   r   )Nrk   rT   r   rT   rT   rU   rn      r   z-test_sift.<locals>.<lambda>.<locals>.<lambda>Tr   )r5   rT   rT   rT   rU   rn      s   )	r5   rP   r   rR   rQ   rH   OnerI   rz   rT   rT   rT   rU   	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 )Nrb   zx0:5zx5:10r]   r^   rk   r   rb   )r,   r8   rP   r
   )XrT   rT   rU   	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 )Nr]   r^   rg   )r   rR   rQ   r{   rT   rT   rT   rU   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 )Nr]   r^   r   r}   r]   r^   rk   r   )rP   r0   rT   rT   rT   rU   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 )Nr]   r^   r   rb   r   r   )r^   rk   r   rb   )rP   r/   rT   rT   rT   rU   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)r^   rk   rb         	   
   ry   )	)r   ry   r   r   )rb   ry   )rk   r   )rk   r   )ry   r^   )ry   r   )ry   r   )r   r   )rk   rb   r   r   ry   r^   r   r   c                 S   s   |  S r   rT   )vrT   rT   rU   rn   	      z'test_topological_sort.<locals>.<lambda>rM   )r   rb   ry   rk   r   r   r   r^   c                      s   t  dg fS )N)r   r   )r9   rT   EVrT   rU   rn         )r9   rI   rz   rT   rT   r   rU   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 )
Nr}   r]   r^   rk   rg   r   r   r   r   r   rg   r   r   rk   r   r   )rg   r   r   )r   rk   )r6   r   r   rT   rT   rU   "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 )Nr}   r]   r^   rk   r   r   r   rg   r   r   )r   r   rT   rT   rU   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   r]   r^   rk   r   r^   )r^   rk   r   r   r]   r]   )r   r   r]   r^   rk   )r2   r3   append)ABrT   rT   rU   test_rotate1  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}dd tdD |ks5J dgd dgd!dgdd"gg d#g d$g d%g}d&d tddgD |ks[J d S )'Nr   rb   r   r]   r^   rk   r   r      )r]   r]   r]   r^   r^   )r]   r]   r]   r^   r   )r]   r]   r^   r^   r   r   r   r}   )r]   r^   r   r]   rk   r   r^   rk   r   r   r   r   abbaaa)$)mpsyy)mpsyrQ   )mpsyy)r  rQ   rQ   )mpyyr   )mpysy)r  r   rQ   )mpsyy)r
  r	  rQ   )r
  r   r  )r
  r   rQ   rQ   )msyyp)msypy)r  r  rQ   )mspyy)r  r  rQ   )r  r  r  )r  r  rQ   rQ   )myyps)r  r  r   )mypsy)r  r  rQ   )r  r  r   )r  r  r	  )r  r  r   rQ   )mpsyy)r  r  rQ   )r  r  r  )r  r  rQ   rQ   )r  r  r   )r  r  r	  )r  r  r   rQ   )r  r  r  )r  r  r	  rQ   )r  r  r   r  )r  r  r   rQ   rQ   c                 S   s   g | ]}t d d |D qS )c                 s       | ]}d  |V  qdS rW   Njoin).0partrT   rT   rU   	<genexpr>{      z6test_multiset_partitions.<locals>.<listcomp>.<genexpr>)tupler  r  rT   rT   rU   
<listcomp>{  s    z,test_multiset_partitions.<locals>.<listcomp>sympy   r      r`   )r   r^   rk   )r`   r^   r^   )r^   r^   r^   rk   c                 S   s   g | ]	}t |d dgqS r   )rF   r!  rT   rT   rU   r"    s    )rP   r)   r   rS   rG   )r   r   ans
factoringsrT   rT   rU   test_multiset_partitionsA  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 ttdd  d S )N)iiiiimiipiisimpimsippipsissmppr  mssppspsssssc                 S      g | ]}d  |qS rW   r  r  irT   rT   rU   r"        z.test_multiset_combinations.<locals>.<listcomp>mississippirk   c                 S   r7  r8  r  r9  rT   rT   rU   r"    r;  c                 S   r7  r8  r  r9  rT   rT   rU   r"    r;     r]   r^   r   r   abcr  cc                   S   s   t tddddS )Nrk   r_   r   r^   )rP   r(   rT   rT   rT   rU   rn     s    z,test_multiset_combinations.<locals>.<lambda>)rP   r(   r'   r   rI   rz   )r&  MrT   rT   rU   test_multiset_combinations  s$   ,"rA  c                     sr  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 ttdd  d S )N)abbyabybaybbbabybaybbbaybbyabyabbybayabbybabybbac                 S   r7  r8  r  r9  rT   rT   rU   r"    r;  z.test_multiset_permutations.<locals>.<listcomp>rE  c                 S   r7  r8  r  r9  rT   rT   rU   r"    r;  r   r^   r   r   r]   r   rk   rW   r_   c                  S   s8   t ddD ]} t|  tg d| D ]}t| qqd S )Nr]   r   )r   r   r]   r   r]   )r   printr*   )r:  r  rT   rT   rU   test  s   
z(test_multiset_permutations.<locals>.testc                           S r   rT   rT   rO  rT   rU   rn     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
c                   S   s   t tdddS )Nrk   r_   r   )rP   r*   rT   rT   rT   rU   rn     r   )r*   r'   rP   r   r   r   rI   rz   )r&  nulrT   rQ  rU   test_multiset_permutations  s"    $
(rS  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ttdddddidddd	ddddigksJ tt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 tt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 tttdddddidddgksJ tt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s6J |d7 }q(|t|ksEJ q d S )Nr   r^   )sizer]   r`   )krk   rg   r   r}   r   r   )rU  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 )r   NrT   r  rU  rT   rT   rU   r        -test_partitions.<locals>.<listcomp>.<genexpr>rk   )allsumvaluesr9  rT   rT   rU   r"    s    z#test_partitions.<locals>.<listcomp>)r  c                 S   s"   g | ]}t d d |D r|qS )c                 s   rV  )rk   NrT   rW  rT   rT   rU   r    rX  rY  )rZ  r9  rT   rT   rU   r"    s
    )r   rP   r-   rH   r   r   r   )r&  r:  nr  qrT   rT   rU   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   rT   r9  rT   rT   rU   r"         z*test_binary_partitions.<locals>.<listcomp>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]   )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   rT   r  jrT   rT   rU   r"    ra     $   )r   r   rT   rT   rT   rU   test_binary_partitions  s   
"rf  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 rT   )r   r   r   r9  rT   rT   rU   r"  
  s    z"test_bell_perm.<locals>.<listcomp>r]   r   c                 S   s   g | ]}t |qS rT   r   r9  rT   rT   rU   r"  
  s    rk   )r   r   r   r   r   r   rb   c                   S   s   t tdS )Nr   )rP   r   rT   rT   rT   rU   rn     ro   z test_bell_perm.<locals>.<lambda>)	r   rP   r   r   r   
array_formnext_trotterjohnsonrI   rz   )r]  r  r  birT   rT   rU   test_bell_perm	  s   
rj  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)r]   r^   r   r      L   r]   c                 S   s   h | ]}t |d  qS r   )r   rb  rT   rT   rU   	<setcomp>  ra  z#test_involutions.<locals>.<setcomp>)	enumeraterP   r   r   )lengthsr]  Nr:  rT   rT   rU   test_involutions  s   rq  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 t} t| dg ksrJ dd | dD dgksJ dd | dD ddgksJ dd | dD d gksJ d!d | d"D g d#ksJ d$d | d%D g d&ksJ d'd | d(D g d)ksJ ttd*gd+gd+gd,ggd+gd,gd*gd+ggd+gd*gd,gd+gggksJ d S )-Nr`   i	  rW   c                 s   r  r  r  r9  rT   rT   rU   r  $  r  z$test_derangements.<locals>.<genexpr>abcdebadecbaecdbcaedbcdeabceadbdaecbdeacbdecabeacdbedacbedcacabedcadebcaebdcdaebcdbeacdeabcdebaceabdcebadcedabcedbadabecdaebcdaecbdcaebdcbeadceabdcebadeabcdeacbdebacdebcaeabcdeadbceadcbecabdecbadecdabecdbaedabcedacbedbacedbcar   )r]   r   rk   r^   )r]   r^   rk   r   )r]   rk   r   r^   )r^   r   rk   r]   )r^   rk   r   r]   )r^   rk   r]   r   )rk   r   r]   r^   )rk   r^   r   r]   )rk   r^   r]   r   )r   r]   r^   r^   )r^   r^   r   r]   )r^   r^   r]   r   bar   abbc                 S   r7  r8  r  r9  rT   rT   rU   r"  2  r;  z%test_derangements.<locals>.<listcomp>c                 S   r7  r8  r  r9  rT   rT   rU   r"  3  r;  r>  bcacabc                 S   r7  r8  r  r9  rT   rT   rU   r"  4  r;  aabbbbaac                 S   r7  r8  r  r9  rT   rT   rU   r"  5  r;  aabbcccc)ccccaabbccccababccccabbaccccbaabccccbabaccccbbaac                 S   r7  r8  r  r9  rT   rT   rU   r"  8  r;  aabbccc)cccabbacccababcccaabbccacbbaccacbabccacabbcbccbaacbccabacbccaabbcccbaabcccababcccaabc                 S   r7  r8  r  r9  rT   rT   rU   r"  <  r;  books)kbsooksboosbkooskboooksbooskbookbsoobksooskoboksobosbokobsokrk   r^   r]   )r   rP   r   r   r  rB   )DrT   rT   rU   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   rP   r+   )r]  rU  frT   rT   rU   countD     ztest_necklaces.<locals>.countr]   r   r^   r   rk   )r]   r^   r^   rk   )r^   rk   rk   r`   )rk   r   r   r   )r   r`   r`      )rb   r   r   '   )r`         \   )r            )r   r   r   )r  r  r:  rT   rT   rU   test_necklacesC  s    r  c                  C   s   t t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s/J t tdd} t| tg dg dg dg d	g d
g dgksRJ d S )Nr^   r   r   r]   rk   )r   r   r   r   )r   r   r   r]   )r   r   r]   r]   )r   r]   r   r]   )r   r]   r]   r]   )r]   r]   r]   r]   )rP   r   r   )bcrT   rT   rU   test_braceletsT  s,   r  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 )Nrb   r   )r   r]   r^   rk   rk   )r   r]   r^   rk   r^   )r   r]   r^   rk   r]   )r   r]   r^   rk   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]   r]   r   r]   )r   r]   r]   r   r   )r   r]   r   r]   r   )r   r]   r   r   r   )r   r   r   r   r   r   i2  )rP   r    r   rT   rT   rT   rU   test_generate_oriented_forestm  s   
r  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   r^   r]   rb   c                   S      t ttddS )Nr   rk   r:   rP   r   rT   rT   rT   rU   rn   {  r   z test_unflatten.<locals>.<lambda>c                   S   r  )Nr   rf   r  rT   rT   rT   rU   rn   |  r   )rP   r   r:   zipr   rI   rz   )rrT   rT   rU   test_unflattenw  s
   ..r  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 )Nr]   rk   r   r   r}   )r]   r^   rb   r^   )r]   rk   rb   )r   r^   rk   )r   r   rk   )r   rP   r   r   rT   rT   rT   rU   test_common_prefix_suffix  s   &&" r  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)directedabaaab)bbr  r?  r   rM   )r?  r   r  r  )r&   r   rT   rT   rT   rU   test_minlex  s   r  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   r^   r]   c                 S      t | S r   )r   r   rT   rT   rU   rn     r   ztest_ordered.<locals>.<lambda>c                 S   r  r   )r[  r   rT   rT   rU   rn     r   r  warnc                      s   t t dddS )NFTr  )rP   r   rT   keysseqrT   rU   rn     r  )rP   r   rR   rQ   hashrI   rz   rT   rT   r  rU   test_ordered  s   *r  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 )Nr]   r   r^   r   )r^   r]   r]   r   lt)r4   operatorr  r  rT   rT   rU   	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 )Nr]   r   r   r   )rb   r`   r   r   )r   r   r^   rk   rb   r`   r   r   r   rg   )rb   r`   r   r   r%  )r]   r   r]   r   r   )r   )r   r   r   ry   c                   S      t ddgdgS )Nr   r]   r_   r1   rT   rT   rT   rU   rn         ztest_reshape.<locals>.<lambda>c                   S   r  )Nr   r]   rk   r  rT   rT   rT   rU   rn     r  )rP   r   r1   r   rI   rz   )r  rT   rT   rU   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   rT   r!  rT   rT   rU   r        ztest_uniq.<locals>.<genexpr>r   r]   r   r^   rg   c                 s   s    | ]}|d  V  qdS )r^   NrT   )r  rR   rT   rT   rU   r    rX  rb   r   r   ababcr>  c                 s   r  r   rT   r9  rT   rT   rU   r    r  rk   c                          fddt  D S )Nc                       g | ]}  |qS rT   remover9  r  rT   rU   r"    r;  /test_uniq.<locals>.<lambda>.<locals>.<listcomp>r;   rT   r  rT   rU   rn     r;  ztest_uniq.<locals>.<lambda>c                      r  )Nc                    r  rT   r  r9  r  rT   rU   r"    r;  r  r  rT   r  rT   rU   rn     r;  )rP   r;   r-   r   r.   rI   RuntimeErrorrT   rT   r  rU   	test_uniq  s"   $&,  &r  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 )N1123r^   r]   r   r$  ry   re  r   r   rb   rk   c                  S   s:   dD ]} t d|  tg dd| dD ]}t d| qqd S )NNr   r]   r   ry   	ordered =r   r^   r      )rN  r%   
orderedvalr  rT   rT   rU   test1  s   
ztest_kbins.<locals>.test1c                      rP  r   rT   rT   )r  rT   rU   rn     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 )Nr  r  rk   r^   r   r  )rN  r%   rP   r   r  rT   rT   rU   test2  s   
ztest_kbins.<locals>.test2c                      rP  r   rT   rT   )r  rT   rU   rn     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   rP   r%   r   r   rT   rT   )r  r  rU   
test_kbins  s    r  c                   C   sr   t t du s	J t ttddu sJ t g ddu sJ t dgdggdu s+J t dgdggdu s7J d S )NFrk   r   Tr]   r^   )r"   r   rP   r   rT   rT   rT   rU   test_has_dups'  s
   r  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 )	Nrr  )r]   r   r]   r^   r   r  er   r?  drk   )r   )outputrT   rT   rU   test__partition/  s   

,r  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   )nTr]   r   c                 s       | ]}d V  qdS r]   NrT   r!  rT   rT   rU   r  @  r  z*test_ordered_partitions.<locals>.<genexpr>c                 s   r  r  rT   r!  rT   rT   rU   r  A  r  )%sympy.functions.combinatorial.numbersr  r=   rP   r   r[  )r  r  r:  rc  rT   rT   rU   test_ordered_partitions8  s   r  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  rk   r   r   r   r_   )dir)rP   r>   r   rT   rT   rT   rU   test_rotationsE  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 )Nrk   r]   r   T)str11011r^   rZ  )rh   r   r   r   rW   )000110r  c                   S   s   t dS )Ng      ࿩r#   rT   rT   rT   rU   rn   R  r   ztest_ibin.<locals>.<lambda>c                   S   s
   t ddS )Nr^   r]   r  rT   rT   rT   rU   rn   S  r   )r#   rP   rI   rz   rT   rT   rT   rU   	test_ibinK  s   r  c                  C   s   t ddu sJ t ddu sJ t d du sJ G dd dt} t |  du s)J G dd dt}t | du s:J G d	d
 d
}t | du sJJ G dd d}t | du sZJ G dd d}t | du sjJ G dd d|}t | du s{J d S )Nr   Fr]   c                   @   rp   )ztest_iterable.<locals>.Test1Nrq   rT   rT   rT   rU   Test1[  rv   r  c                   @      e Zd ZdZdS )ztest_iterable.<locals>.Test2TNrr   rs   rt   	_iterablerT   rT   rT   rU   Test2`      r  Tc                   @   rp   )ztest_iterable.<locals>.Test3Nrq   rT   rT   rT   rU   Test3e  rv   r  c                   @   r  )ztest_iterable.<locals>.Test4TNr  rT   rT   rT   rU   Test4j  r  r  c                   @   s   e Zd Zdd ZdS )ztest_iterable.<locals>.Test5c                 s   s    dV  d S )Nr]   rT   )selfrT   rT   rU   __iter__p  s   
z%test_iterable.<locals>.Test5.__iter__N)rr   rs   rt   r  rT   rT   rT   rU   Test5o  s    r  c                   @   r  )ztest_iterable.<locals>.Test6FNr  rT   rT   rT   rU   Test6u  r  r  )r@   rA   )r  r  r  r  r  r  rT   rT   rU   test_iterableV  s   r  c                   C   sD  t tdgddgggksJ t tddgdddgggks J t tddgddgdgggks2J t tg ddg dggksCJ t tg dddgddggddgdgggks\J t tg dddgdgdgggkspJ t tg dg ks{J t tg dg ksJ t tddgdg ksJ t tddgdg ksJ d S )Nr]   r^   r}   rk   r   )rP   rD   rT   rT   rT   rU   test_sequence_partitions{  s   "$"(r  c                   C   s  t tg dg ggksJ t tg dg g ggksJ t tg dg g g ggks*J t tdgddgggks9J t tdgdg dggdgg ggksMJ t tdgdg g dggg dgg gdgg g ggkshJ t tddgdddgggksyJ t tddgdg ddggdgdggddgg ggksJ t tddgdg g ddggg dgdggg ddgg gdgg dggdgdgg gddgg g ggksJ t tg ddg dggksJ t tg ddg g dgdgddggddgdggg dg ggksJ t tg ddg g g dgg dgddggg ddgdggg g dg gdgg ddggdgdgdggdgddgg gddgg dggddgdgg gg dg g gg
ksKJ t tg dg ksWJ t tdgdg ksdJ t tddgdg ksrJ d S )Nr]   r^   rk   r}   r   )rP   rE   rD   rT   rT   rT   rU   test_sequence_partitions_empty  s<   ( " $$
".	 r  c                  C   sH   g d} t td| ksJ t td| ksJ t td| ks"J d S )N)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   )rP   rC   )r&  rT   rT   rU   test_signed_permutations  s   r   N)textwrapr   	itertoolsr   r   sympy.core.basicr   sympy.core.numbersr   sympy.core.sortingr   sympy.core.symbolr	   r
   (sympy.functions.combinatorial.factorialsr   sympy.matrices.denser   sympy.combinatoricsr   r   r   rO   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   sympy.utilities.enumerativerF   rG   sympy.core.singletonrH   sympy.testing.pytestrI   rJ   wrR   rQ   r{   rV   rc   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  rA  rS  r_  rf  rj  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rT   rT   rT   rU   <module>   sz    (				BA+
!
	N	% 