
    RieY                        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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ d dlKmLZLmMZM d dlNmOZO d dlPmQZQmRZR  ed          \  ZSZTZUZVd ZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd Zcd Zdd Zed Zfd Zgd  Zhd! Zid" Zjd# Zkd$ Zld% Zmd& Znd' Zod( Zpd) Zqd* Zrd+ Zsd, Ztd- Zud. Zvd/ Zwd0 Zxd1 Zyd2 Zzd3 Z{d4 Z|d5 Z}d6 Z~d7 Zd8 Zd9 Zd: Zd; Zd< Zd=S )>    )dedent)isliceproduct)Basic)Integerordered)Dummysymbols	factorial)Matrix)RGS_enum
RGS_unrankPermutation)4
_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sequence_partitionssequence_partitions_empty)factoring_visitormultiset_partitions_taocp)S)raiseswarns_deprecated_sympyzw,x,y,zc                  ~   ddl m} m} t                      5  t	           |t
          t          g                    t          t
          gk    sJ 	 d d d            n# 1 swxY w Y   t                      5  t          t
          t          g|           t          t
          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   default_sort_keyr	   key)sympy.utilities.iterablesrM   r	   rJ   listyxsortedrL   s     Dlib/python3.11/site-packages/sympy/utilities/tests/test_iterables.pytest_deprecated_iterablesrV   !   sA   CCCCCCCC		!	! / /GGQFOO$$A...../ / / / / / / / / / / / / / /		!	! > >q!f"23331v=====> > > > > > > > > > > > > > > > > >s#   7AA"A40B22B69B6c                     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	          rJ t          dd	d
          sJ t          dd	d          sJ t          dd          sJ t          dd	          rJ t          dd	d          sJ d S )N rS   xxxyxxyxyzxxxyzzyx         xxyzyx   )r@        rU   test_is_palindromicrf   )   s    "#$%     d#####f%%%%%)Q'''''i+++++)Q+++++)Q*****(A&&&&&h*****(Au-------re   c                  $   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          k    sJ t          d          g dk    sJ t          d	          g d
k    sJ t          d          g d
k    sJ t          t          fd            G d dt                    } t           | t          t
                    t          g           | t          t
                    t          gk    sJ t           | t          t
                    t          g|           t          t
          t          gk    sJ t          h d          t          h d          k    sJ d S )N)r^   r^   r^   r`   r^   r_   r   r   r   levels)ri   rk   rl   r_   )rj   r`   r^   r_   r   r      c                  &    t           d          S )Nr`   rm   )r   )lss   rU   <lambda>ztest_flatten.<locals>.<lambda>D   s    wr"555 re   c                       e Zd ZdS )test_flatten.<locals>.MyOpN__name__
__module____qualname__rd   re   rU   MyOprt   F           re   ry   cls>   r^   r_      )r   rS   rI   
ValueErrorr   rR   zrQ   )ry   rq   s    @rU   test_flattenr   9   s   9!Q''''At9!Q''''V
vh	'B2a   B&&&&2a   $>$>$>>>>>2a   $8$8$888882a   $8$8$88888
:5555666    u    DDAJJ?##Q

A6666DDAJJ?---!Q:::::::$zzz"2"2222222re   c            	         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    sJ t          t          ddgddgddg                    g d	k    sJ t          t          t          j                            d
u sJ t          t          t          j        t          j                            d
u sJ dt          t          j                  v sJ dt          t          j        t          j                  v sJ dt          t          j        t          j        t          j                  v sJ t          t          t          t          j        t          j        t          j                  d                    } | D ]K\  }}}t          |t                    sJ t          |t                    sJ t          |t                    sJ Lt          t          t          dd          gdz             D ]5}|t          t          j        t          j        t          j                  v sJ 6d S )Nrd   r^   r_   ro   rh   r_   ro   r^   r_   ro      rc   r^   ro   )r^   r   )r^   rc   r_   ro   r_   r   )r_   rc   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   rc   i  rj   ro   )rQ   r%   rT   rA   rH   Integerssetr   
isinstancer   r   range)triplesn1n2n3ts        rU   test_iproductr   O   s   

t########!!""&6&6&66666(Aq6999--.. 3- 3- 3- - - - -(Aa5!A!u--.. 3I 3I 3I I I I IHQZ(())T1111HQZ4455====8AJ''''''Xaj!*555555QZDDDDDD6(1:qz1:FFMMNNG ' '
B"g&&&&&"g&&&&&"g&&&&&&E"aLL>!+-.. A AHQZQZ@@@@@@@A Are   c                  z   t          g           g k    sJ t          g d          g k    sJ t          dg          dggk    sJ t          dgd          dgk    sJ t          ddg          ddggk    sJ t          ddgd          dgk    sJ t          g d          g dgk    sJ t          g dd          dgk    sJ t          g d          dgd	gdggk    sJ t          g dd          g d
k    sJ t          g d          ddgg ddgddggk    sJ t          g dd          g dk    sJ d S )NF)multipler^   r^   r^   rk   r   r   r^   r_   r^   r_   )r   r_   r^   r   )r^   r^   r_   r_   r_   r^   ro   ro   r_   r_   r_   ro   )rk   r   r   ro   r_   )r"   rd   re   rU   
test_groupr   e   s   99????e$$$****!::1#!u%%%&1111!Q==aVH$$$$!Q%(((VH4444			{****U+++x7777aS1#....U+++/G/G/GGGGG)))**1vyyy1#1v.NNNNN)))E::: ?) ?) ?) ) ) ) ) ) )re   c            	         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gk    sJ t          t          | dd
                    g dk    sJ t          t          | dd
                    g dk    sJ t          t          | dd
                    g dk    sJ t          t          t          | d	d
                              dk    sJ t          t          | d d         dd                    g k    sJ t          t          | d d         dd
                    g dk    sJ t          t          ddgd
                    g dk    sJ t          t          ddgd                    g dk    sJ t          t          g dd                    g dk    sJ t          t          g ddd
                    g dk    sJ d S )Nr   r   rd   r^   r   r_   )rk   r   r   ro   r   T
repetitionr   rh   r   r   )
rl   r   r^   r   r_   r   ro   r   rk   r   r_   r_   r   ro   ro   )r   r   )r   r   r_   )r   r   ro   r   r   r^   r_   r   r^   ro   )r   r_   r_   r   r_   ro   )r   ro   ro   r   r^   r^   r_   r^   r^   ro   r^   r_   r_   r   )r^   ro   ro   r   )r_   r_   ro   )r_   ro   ro   )ro   ro   ro   #   F)r   r   r   r   )rd   rh   r   r   rk   r   )rd   rh   r   rk   )r   rk   r   r   r   r   )rQ   r8   r   lenls    rU   test_subsetsr   z   s:   			1%%&&2$....			1%%&&*<*<*<<<<<			1%%&&*B*B*BBBBB			1%%&&9+5555U1XXA1...//B477771...//3K3K3KKKKK1...// 4< 4< 4< < < < < 1...// 	4J 	4J 	4J 	J 	J 	J 	J tGAqT2223344::::"1"qU33344::::"1"qT22233 8C 8C 8C C C C C A4000110001 1 1 1A511122   ! ! ! !			1%%&&   ! ! ! !			1666778889 9 9 9 9 9re   c            	         t          t          d                    } t          t          | dd                    dgk    sJ t          t          | dd                    g dk    sJ t          t          | dd                    g d	k    sJ t          t          | d
d                    g dk    sJ t          t          | dd                    dgk    sJ t          t          | dd                    g dk    sJ t          t          | dd                    g dk    sJ t          t          t          | d
d                              dk    sJ t          t          t          | dd                              dk    sJ t          t          | d d         d
d                    g k    sJ t          t          | d d         d
d                    g dk    sJ d S )Nr   r   Fr   rd   r^   r   r_   )r   r   r   r^   r   rk   r   r_   r   r   r   ro   r   ro   r^   r   ro   )r   r   r   r_   r^   r   r   ro   r^   )r   ro   r_   r^   r   r_   )r^   r   ro   r^   r_   r   r   )r^   ro   r   )r^   ro   r_   r_   r   r^   )r_   r   ro   r_   r^   r   )r_   r^   ro   )r_   ro   r   )r_   ro   r^   )ro   r   r^   )ro   r   r_   )ro   r^   r   )ro   r^   r_   )ro   r_   r   ro   r_   r^   T)rl   r   r   r   r   r   rk   r   r   r   r   r   r   r   r   r   @      r   )rQ   r   r=   r   r   s    rU   test_variationsr      sk   U1XXA
1aE22233t;;;;
1aE222337O7O7OOOOO
1aE22233  8X  8X  8X  X  X  X  X
1aE22233  8@  8@  8@  @  @  @  @
1aD11122rd::::
1aD111226N6N6NNNNN
1aD11122 7? 7? 7? ? ? ? ? tJq!55566772====tJq!55566773>>>>
1RaR5!666772====
1RaR5!55566 ; ; ;      re   c            	         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	gk    sJ t          t          t          t          d                                        d
dgk    sJ d S )Nr^   r_   r   r   rd   a)r   )repeat)r   r   r   rh   )rQ   r   r   rd   re   rU   test_cartesr      s    1vyyy))**8889 9 9 9>>bT!!!!s((((s1%%%&&:,6666tE!HH~~&&''D$<777777re   c                      t                      } t          | t          d                    }t          |d          t	          t          d                    k    sJ d S )Nzx0 x2 x3ro   zx1 x4 x5)r-   r   r   r9   rQ   )sfiltereds     rU   test_filter_symbolsr      sU    Aa!4!455H!WZ%8%8 9 9999999re   c            	          t          t                    } t          t          |           t                    sJ t          t          ddt	          d          g                    t	          d          k    sJ d S )Nr{   Cr^   C1)startexcludeC2)r-   r
   r   nextr   )r   s    rU   test_numbered_symbolsr      sx    U###Ad1ggu%%%%% AGGGHH     re   c                     t          t          t          d                    d           ddgg ddk    sJ t          t          t          gd           t          gt          gdk    sJ t          t
          j        gd	           d
dgik    sJ t          g dd d          ddgddgfk    sJ t          g dd d          dgg dfk    sJ t          t          d            d S )Nrc   c                     | dz  S Nr_   rd   _s    rU   rr   ztest_sift.<locals>.<lambda>   s
    !a% re   r^   ro   )r   r_   r   r   c                 6    |                      t                    S NhasrS   r   s    rU   rr   ztest_sift.<locals>.<lambda>   s    !%%(( re   )FTc                 6    |                      t                    S r   r   r   s    rU   rr   ztest_sift.<locals>.<lambda>   s    15588 re   Fr   r^   r_   ro   c                     | dz  S r   rd   rS   s    rU   rr   ztest_sift.<locals>.<lambda>   s
    A re   Tbinaryr   r_   c                     | dz  dk    S )Nro   r^   rd   r   s    rU   rr   ztest_sift.<locals>.<lambda>   s    A
 re   r   c                  ,    t          g dd d          S )Nr   c                     | dz  S )Nro   rd   r   s    rU   rr   z-test_sift.<locals>.<lambda>.<locals>.<lambda>   s
    QU re   Tr   )r6   rd   re   rU   rr   ztest_sift.<locals>.<lambda>   s    \\\??4888 re   )	r6   rQ   r   rS   rR   rH   OnerI   r~   rd   re   rU   	test_siftr      s9   U1XX00A9994M4MMMMMA**++s1#/F/FFFFF++,,<<<<ood;;;	
AA@    224@@@	
YYYE    
: 9 9 : : : : :re   c                     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 )Nrc   zx0:5zx5:10r^   r_   ro   r   rc   )r-   r9   rQ   r   )Xs    rU   	test_taker      s    A1::gfoo......1::gg..//////##666666re   c                  ^   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    sJ t          dt          t          t          idt          i          dt          dt          t          t          ik    sJ t          t          t          ddt          t          t          i          dt          dt          t          t          ik    sJ t          dt          t          t          it          t          d          dt          dt          t          t          ik    sJ d S )Nr^   r_   rk   )r   rS   rR   r   rd   re   rU   test_dict_merger      s2   b1aA,''Aq!Q<7777q!QlB''Aq!Q<7777q!fq!Ql++1aAq/AAAAAq!QlQF++1aAq/AAAAA!llQ1aL11aAq!Q5GGGGGq!QlaLL11aAq!Q5GGGGGGGre   c                  J   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    sJ d S )Nr^   r_   r   r   r^   r_   ro   r   )rQ   r1   rd   re   rU   test_prefixesr      s    ####!A3%''''!Q  !!qcAq6]2222))**
q!fiii?@ @ @ @ @ @re   c                  J   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    sJ d S )Nr^   r_   r   rc   r   r   )r_   ro   r   rc   )rQ   r0   rd   re   rU   test_postfixesr      s    	""$$$$	1#QC5((((	1a&!!""sQFm3333	///**++
q!fiii?@ @ @ @ @ @re   c                       g dg d t           f          g dk    sJ t           fd           g dk    sJ t          t           fd           d S )N)r_   ro   rc         	   
   r}   )	)r   r}   r   r   )rc   r}   )ro   r   )ro   r   )r}   r_   )r}   r   )r}   r   )r   r   )ro   rc   r   r   r}   r_   r   r   c                     |  S r   rd   )vs    rU   rr   z'test_topological_sort.<locals>.<lambda>	  s    1" re   rN   )r   rc   r}   ro   r   r   r   r_   c                  .    t           dgz   f          S )N)r   r   )r:   EVs   rU   rr   z'test_topological_sort.<locals>.<lambda>  s    /A	M0BCC re   )r:   rI   r~   r   s   @@rU   test_topological_sortr    s    """A	$ 	$ 	$A QF##'A'A'AAAAAQF555"""# # # # :CCCCCDDDDDre   c                  L   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    sJ g d} g d}t          | |f          dgddgdggk    sJ g d} g d	}t          | |f          ddgddggk    sJ d S )
Nr   r^   r_   ro   rk   r   r   r   r   r   rk   r   r   ro   r   r   )rk   r   r  )r   ro   )r7   r  r   s     rU   "test_strongly_connected_componentsr    s   ("b22b8888()))R99qcA3_LLLL		A000A(!Q00YYYK????A(((A(!Q00aS1a&1#4FFFFFA(((A(!Q00aVaV4DDDDDDDre   c                  D   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    sJ g d} g d}t          | |f          g dgk    sJ g d} dd	g}t          | |f          ddgdd
ggk    sJ d S )Nr   r^   r_   ro   r  r   r  rk   r  r   )r   r  s     rU   test_connected_componentsr
     s    R))R////B00aS1#sOCCCC		A000AA''III;6666A(((AA''LLL>9999A	AA''QFQF+;;;;;;;re   c                  F   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    sJ t          | d          }|g k    sJ |                    d           | g k    sJ d S )Nr   r^   r_   ro   r   r_   )r_   ro   r   r   r^   r^   )r   r   r^   r_   ro   )r3   r4   append)ABs     rU   test_rotater  1  s    Aq!////10000
AQA7777HHQKKK7777AqA7777HHQKKK777777re   c            
      	   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    sJ 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    sJ 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    sJ 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    sJ t          t          g dd                    ddgdggdgddgggk    sJ 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z  d                    dgddgggk    sJ t          t          dgdz                      g dgdgddggdgdgdgggk    sJ g d}t          t          |                    t          t          t          |                              k    sJ t          t          |d                    g k    sJ t          t          |d                    g dggk    sJ t          t          |dgz   d                    g k    sJ t          t          |dgz   d                    g dggk    sJ t          t          dd                    g k    sJ t          t          dd                    ddgggk    sJ t          t          d                    dgggk    sJ t          t          dd                    g k    sJ t          t          d                    ddggdgdgggk    sJ 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 t          d          D             |k    sJ dgddgd dgdd!gg d"g d#g d$g}d% t	          ddg          D             |k    sJ d S )&Nr  rc   r   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^   ro   r   r_   ro   r   r   r   r   abbaaa)$)mpsyy)mpsyrR   )mpsyy)r  rR   rR   )mpyyr   )mpysy)r  r   rR   )mpsyy)r  r  rR   )r  r   r  )r  r   rR   rR   )msyyp)msypy)r#  r"  rR   )mspyy)r%  r$  rR   )r%  r"  r  )r%  r"  rR   rR   )myyps)r'  r"  r   )mypsy)r)  r(  rR   )r)  r$  r   )r)  r"  r  )r)  r"  r   rR   )mpsyy)r+  r*  rR   )r+  r(  r  )r+  r(  rR   rR   )r+  r&  r   )r+  r$  r  )r+  r$  r   rR   )r+  r"  r   )r+  r"  r  rR   )r+  r"  r   r  )r+  r"  r   rR   rR   c                 @    g | ]}t          d  |D                       S )c              3   @   K   | ]}d                      |          V  dS rX   Njoin).0parts     rU   	<genexpr>z6test_multiset_partitions.<locals>.<listcomp>.<genexpr>{  s,      ..D"''$--......re   )tupler2  r"  s     rU   
<listcomp>z,test_multiset_partitions.<locals>.<listcomp>{  s?     7 7 7 ..A..... 7 7 7re   sympy   r      ra   )r   r_   ro   )ra   r_   r_   )r_   r_   r_   ro   c                 2    g | ]}t          |d dg          S r   )rF   r6  s     rU   r7  z,test_multiset_partitions.<locals>.<listcomp>  s6     8 8 8 a!A'' 8 8 8re   )rQ   r*   r   rT   rG   )r  r   ans
factoringss       rU   test_multiset_partitionsr>  A  s   A#Aq))**aS1#sQC/H.IIIIIt'1--..//25555t'1--..//25555#OOOQ7788	siii!Q0<<<!2E	QFq!fiii0=2 2 2 2 2 #LLL!4455	QCAq6Aq6*YYY,<
Q!Q:     #LLL!4455	QC999qc*aVaV,<	QCAq6Aq6*aVaV,<
iii:    
 #IIIq1122
Q!aV}7& & & & & #A&&''	q!fqc]aVaSMQC!Q=
qcA3,     #Aq))**
Q!A}sQFm/5 5 5 5 5#QC!GQ//00qcAq6]OCCCC#QC!G,,--	qcAq6]aS1#sO25 5 5 5 5		A#A&&'' ++,,- - - -#Aq))**b0000#Aq))**			{m;;;;#AGQ//00B6666#AGQ//00lll^4DDDDD#Aq))**b0000#Aq))**Axj8888#C(())ugY6666#C++,,2222#D))**c
|secU^.LLLLL#D!,,--C:,????#E1--..E7);;;;#QFA..//aVH:====& & &C7 7,W557 7 7:=> > > >$AQ!Q))\\\+J8 8.1v668 8 8;EF F F F F Fre   c                     g d} d t          t          dd                    D             | k    sJ t          d          }d t          t          |d                    D             | k    sJ d t          |d          D             g k    sJ t          t          dgd	dggd	                    dgd	dgggk    sJ t          t          t          d
d                              dk    sJ t          t          t          d
d                              dk    sJ t          t          dd                    d
gdgdggk    sJ t	          t
          d            d S )N)iiiiimiipiisimpimsippipsissmppr  mssppspsssssc                 8    g | ]}d                      |          S rX   r0  r2  is     rU   r7  z.test_multiset_combinations.<locals>.<listcomp>  s.     ; ; ;1BGGAJJ ; ; ;re   mississippiro   c                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z.test_multiset_combinations.<locals>.<listcomp>  s.     / / /1BGGAJJ / / /re   c                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z.test_multiset_combinations.<locals>.<listcomp>  s"    ===1BGGAJJ===re      r^   r_   r   r   abcr  cc                  B    t          t          dddd                    S )Nro   r`   r   r_   )rQ   r)   rd   re   rU   rr   z,test_multiset_combinations.<locals>.<lambda>  s    t$9aB--$K$KLL re   )rQ   r)   r(   r   rI   r~   )r<  Ms     rU   test_multiset_combinationsrZ    s   < < <C; ;&}a8899; ; ;>AB B B BA/ /&q!,,--/ / /256 6 6 6== 5a < <===CCCC%sQFmQ7788qcAq6]OKKKKt)#q112233q8888t)#q112233q8888%eQ//00cUSEC54IIIII
:LLMMMMMre   c                     g d} d t          d          D             | k    sJ d t          t          d                    D             | k    sJ t          t          g dd                    ddggk    sJ 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    sJ t          t          t          d
d                              d	k    sJ t          t          t          d
d                              dk    sJ g i dfD ]%}t          t          |                    g gk    sJ &t          t          |d                    g gk    sJ t          t          |d	                    g k    sJ t          t          |d                    g k    sJ d t	          fd          t          d          k    sJ t          t          d            d S )N)abbyabybaybbbabybaybbbaybbyabyabbybayabbybabybbac                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z.test_multiset_permutations.<locals>.<listcomp>  s"    >>>1BGGAJJ>>>re   r_  c                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z.test_multiset_permutations.<locals>.<listcomp>  s"    HHH1BGGAJJHHHre   r   r_   r   r   r^   r   ro   rX   r`   c                      t          dd          D ]5} t          |            t          g d|           D ]}t          |           6d S )Nr^   r   )r   r   r^   r   r^   )r   printr+   )rQ  r"  s     rU   testz(test_multiset_permutations.<locals>.test  s]    q! 	 	A!HHH*???A>>  a	 	re   c                                    S r   rd   )rl  s   rU   rr   z,test_multiset_permutations.<locals>.<lambda>  s    4466 re   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                  @    t          t          ddd                    S )Nro   r`   r   )rQ   r+   rd   re   rU   rr   z,test_multiset_permutations.<locals>.<lambda>  s    t$9aB--$H$HII re   )r+   r(   rQ   r   r   r   rI   r~   )r<  nulrl  s     @rU   test_multiset_permutationsrp    sX   + + +C>> 5f = =>>>#EEEEHH 5hv6F6F G GHHHCOOOO%iii3344!Q@@@@%iii3344	
AAAAAA98 8 8 8 8t)#q112233q8888t)#q112233q8888B| 8 8)#..//B477777%c1--..2$6666%c1--.."4444%c2..//25555  
 >>>>""f '. '' '' ' ' ' 'P :IIJJJJJre   c            	         i gdi fgg} t          d          D ]}t          t          d|                    | |         k    sJ t          t          dd|                    | |         k    sJ t          t          ddd|                    | |         k    sJ t          t          ddd |                    | |         k    sJ t          t          dd d|                    | |         k    sJ t          t          ddd|                    | |         k    sJ 
t          t          dd                    ddidddd	ddddigk    sJ t          t          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    sJ t          t          dd	d                    d	diddddddddddgcxk    r d t          dd	d          D             k    sn J t          t          t          d          d                    ddidddgk    sJ t          t          d	d                    dddddiddddd	igcxk    rd t          d	          D             k    sn J t          dd          D ]I}d}t	          |          D ] \  }}|t          ||          k    sJ |dz  }!|t          |          k    sJ Jd S )Nr   r_   )sizer^   ra   )kro   rk   r   r   r   r   )rs  r+  r  r   r   c                     g | ]B}t          d  |D                       r't          |                                          dk    @|CS )c              3   "   K   | ]
}|d k    V  dS )r   Nrd   r2  rs  s     rU   r4  z-test_partitions.<locals>.<listcomp>.<genexpr>  s&      1D1DQ!q&1D1D1D1D1D1Dre   ro   )allsumvaluesrP  s     rU   r7  z#test_partitions.<locals>.<listcomp>  s]     D! D! D!c1D1D!1D1D1D.D.DD!

OOa 	
re   )r+  c                 D    g | ]}t          d  |D                       |S )c              3   "   K   | ]
}|d k    V  dS )ro   Nrd   rv  s     rU   r4  z-test_partitions.<locals>.<listcomp>.<genexpr>  s&      ':':1Q':':':':':':re   )rw  rP  s     rU   r7  z#test_partitions.<locals>.<listcomp>  sD     8< 8< 8<C':':':':':$:$:8<	8< 8< 8<re   )r   rQ   r.   rH   r   r   r   )r<  rQ  nr+  qs        rU   test_partitionsr~    s   41b'
C1XX ; ;Jqq)))**c!f4444Jq!!,,,--Q7777Jq!QQ///00CF::::Jq!T22233s1v====Jq$22233s1v====Jq!QQ///00CF:::::
1"""##	
AA!!llQF(4 4 4 4 4 
1"""##	
AA!""aLL1a&aA,,!q!f(     
1Q'''((	
AA!""aLLaA,,-@ ! ! ! !D! D!a1***D! D! D!! ! ! ! ! !
 
1Q441%%%&&	
AA!+     
1"""##!q!f!llQF(4 < < < <8< 8<a==8< 8< 8<< < < < < < 1a[[    $Q'' 	 	DAqAq))))))FAAHQKK   re   c                      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    sJ t          d t          d          D                       dk    sJ d S )Nc                 "    g | ]}|d d          S r   rd   rP  s     rU   r7  z*test_binary_partitions.<locals>.<listcomp>   s     000QAaaaD000re   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                 "    g | ]}|d d          S r   rd   r2  js     rU   r7  z*test_binary_partitions.<locals>.<listcomp>  s     444!!!444re      $   )r   r   rd   re   rU   test_binary_partitionsr    s    00+B//000aVYYY		<<<111???1113K3K3K###%C%C%C	5E E E E E 44/3344455;;;;;;re   c                     d t          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 ]0}|t	          |j                  k    sJ |                                }1at          t          d            d S )	Nc           	      `    g | ]+}t          t          t          |                              ,S rd   )r   r   r   rP  s     rU   r7  z"test_bell_perm.<locals>.<listcomp>
  s0    <<<1CM!$$%%&&<<<re   r^   r   c                 ,    g | ]}t          |          S rd   r   rP  s     rU   r7  z"test_bell_perm.<locals>.<listcomp>
  s1     A+ A+ A+	!A+ A+ A+re   ro   )r   r   r   r   r   r   rc   c                  :    t          t          d                    S )Nr   )rQ   r   rd   re   rU   rr   z test_bell_perm.<locals>.<lambda>  s    tM!$4$455 re   )	r   rQ   r   r   r5  
array_formnext_trotterjohnsonrI   r~   )r|  r"  r  bis       rU   test_bell_permr  	  s,   <<a<<< A+ A+#AqkkA+ A+ A+ + + + +a  !! &J &J &J J J J J
 1a[[ ( (a!!! 	( 	(Bq|,,,,,,%%''AA	( :5566666re   c                      g d} t          |           D ]X\  }}t          t          |dz                       }t          |          |k    sJ t          d |D                       dk    sJ Yd S )N)r^   r_   r   r      L   r^   c                 2    h | ]}t          |          d z  S r   )r   r  s     rU   	<setcomp>z#test_involutions.<locals>.<setcomp>  s#    111!KNNA%111re   )	enumeraterQ   r    r   )lengthsr|  NrQ  s       rU   test_involutionsr    s    ###G'"" 8 81%a!e,,--1vv{{{{11q11122a777778 8re   c                  H   t          t          t          t          t          d                                                  dk    sJ 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    sJ t          t          g d                    g dg dgk    sJ t          t          d                    t          d          gk    sJ t
          } t           | d                    g k    sJ d  | d          D             dgk    sJ d  | d          D             ddgk    sJ d  | d          D             dgk    sJ d  | d           D             g d!k    sJ d"  | d#          D             g d$k    sJ d%  | d&          D             g d'k    sJ 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    sJ d S )+Nra   i	  rX   c              3   @   K   | ]}d                      |          V  dS r/  r0  rP  s     rU   r4  z$test_derangements.<locals>.<genexpr>$  s,      FF!2771::FFFFFFre   abcdebadecbaecdbcaedbcdeabceadbdaecbdeacbdecabeacdbedacbedcacabedcadebcaebdcdaebcdbeacdeabcdebaceabdcebadcedabcedbadabecdaebcdaecbdcaebdcbeadceabdcebadeabcdeacbdebacdebcaeabcdeadbceadcbecabdecbadecdabecdbaedabcedacbedbacedbcar   )r^   r   ro   r_   )r^   r_   ro   r   )r^   ro   r   r_   )r_   r   ro   r^   )r_   ro   r   r^   )r_   ro   r^   r   )ro   r   r^   r_   )ro   r_   r   r^   )ro   r_   r^   r   )r   r^   r_   r_   )r_   r_   r   r^   )r_   r_   r^   r   bar  abbc                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp>2  s"    (((1BGGAJJ(((re   c                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp>3  s"    )))1BGGAJJ)))re   rV  bcacabc                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp>4  s"    ***1BGGAJJ***re   aabbbbaac                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp>5  s"    ...1BGGAJJ...re   aabbcccc)ccccaabbccccababccccabbaccccbaabccccbabaccccbbaac                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp>8  s"    ---1BGGAJJ---re   aabbccc)cccabbacccababcccaabbccacbbaccacbabccacabbcbccbaacbccabacbccaabbcccbaabcccababcccaabc                 8    g | ]}d                      |          S rO  r0  rP  s     rU   r7  z%test_derangements.<locals>.<listcomp><  s"    +++1BGGAJJ+++re   books)kbsooksboosbkooskboooksbooskbookbsoobksooskoboksobosbokobsokro   r_   r^   )r   rQ   r   r   r1  rC   )Ds    rU   test_derangementsr  "  s   t)$uQxx..99::;;sBBBB77FF'<W'E'EFFFFF   
 %lll3344lllLLL,,,lllLLL,,,9N N N N N %lll3344lll9$ $ $ $ $%d++,,d<<<<A%>>R(($(((TF2222))%)))eU^;;;;**&		***vh6666..*... 3 3 3     .-)--- 2 2 2     ,+'

+++ 0# 0# 0# # # # # %sQC!qc&:;;<<
qcA3sQC!qc2A4 4 4 4 4 4 4re   c                     d } g }t          dd          D ]<}|                    | | |dd           | |dd           | |dd          f           =t          |          t          g dg dg d	g d
g dg dg dg          k    sJ d S )Nc           	      X    t          t          t          | ||                              S r   )r   rQ   r,   )r|  rs  fs      rU   countztest_necklaces.<locals>.countD  s$    4	!Q**++,,,re   r^   r   r_   r   ro   )r^   r_   r_   ro   )r_   ro   ro   ra   )ro   r   r   r   )r   ra   ra      )rc   r   r   '   )ra         \   )r            )r   r  r   )r  r+  rQ  s      rU   test_necklacesr  C  s    - - -
A1a[[ < <		55Aq>>55Aq>>55Aq>>; 	< 	< 	< 	<!99         re   c                  b   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    sJ d S )Nr_   r   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^   )rQ   r   r   )bcs    rU   test_braceletsr  T  s   	i1oo		B"::	
A	
A	
A	
A	
A	
A	
A	
A	
A	
A!
       
i1oo		B"::!        re   c                      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    sJ t          t          t          d                              dk    sJ d S )Nrc   r  )r   r^   r_   ro   ro   )r   r^   r_   ro   r_   )r   r^   r_   ro   r^   )r   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   )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  )rQ   r!   r   rd   re   rU   test_generate_oriented_forestr  m  s    (++,,///???///???///???///???///1; ; ; ; ; t,R001122d::::::re   c            
         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    sJ t          t          d            t          t          d            d S )Nr   r_   r^   rc   c                  V    t          t          t          d                    d          S )Nr   ro   r;   rQ   r   rd   re   rU   rr   z test_unflatten.<locals>.<lambda>{  s    yeBii!<< re   c                  V    t          t          t          d                    d          S )Nr   rj   r  rd   re   rU   rr   z test_unflatten.<locals>.<lambda>|  s    yeBii"== re   )rQ   r   r;   zipr5  rI   r~   )rs    rU   test_unflattenr  w  s    U2YYAQ<<4AcccFAaddG 4 4555555Q??uQrrU||U1QRR5\\:::::
:<<===
:==>>>>>re   c                     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    sJ 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          t          t          d                    t          t          d                              g k    sJ t          g dg d	          ddgk    sJ t          g dg d
          dgk    sJ d S )Nr^   ro   r   r   r   )r^   r_   rc   r_   )r^   ro   rc   )r   r_   ro   )r   r   ro   )r   rQ   r   r   rd   re   rU   test_common_prefix_suffixr    s   aS!!R''''eAhh((III5555eAhheAhh88IIIEEEEIII..1a&8888III..1#5555aS!!R''''eAhh((III5555eAhheAhh88IIIEEEEeAhheAhh88B>>>>III..1a&8888III..1#555555re   c                     t          g d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          dd          dk    sJ t          d          dk    sJ t          d	t          
          dk    sJ d S )Nr   r   r   r   F)directedabaaab)bbr  rW  r   rN   )rW  r   r  r  )r'   r   rd   re   rU   test_minlexr    s    )))	)))))	)))))	)))))e,,,	9999%==E!!!!)s3337NNNNNNNre   c                      t          t          t          t          ft          d                    t          t          gt          t          gfv sJ t          t          t          t          ft          d                    t          t          t          t          ft          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	 fg\   t          t           dd
                    dgdgg dg dg dgk    sJ t          t           fd           d S )NF)defaultr   r   r   r_   r^   c                      t          |           S r   )r   r   s    rU   rr   ztest_ordered.<locals>.<lambda>  s    CFF re   c                      t          |           S r   )rx  r   s    rU   rr   ztest_ordered.<locals>.<lambda>  s    c!ff re   r  warnc                  D    t          t           dd                    S )NFTr  )rQ   r	   keysseqs   rU   rr   ztest_ordered.<locals>.<lambda>  s$    T5t<<<== re   )rQ   r	   rS   rR   hashrI   r~   r  s   @@rU   test_orderedr    sq   Ae444551a&1a&9IIIIIAe44455WaVT5111223 3 3 3A  QF****))YYY			A3<""$4$457ICT5u===>>
qc999iii34 4 4 4
: > > > > > ? ? ? ? ?re   c                     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    sJ t          g d          ddgdggk    sJ t          g d          dgdgdggk    sJ ddlm}  t          g d|           ddgdggk    sJ d S )Nr^   r   r_   r   )r_   r^   r^   r   lt)r5   operatorr  r  s    rU   	test_runsr    s   88r>>>>99!A<<QC!:%%%%			??sQFm++++			??1vsm++++			??sQC!o----			2Aq6A3-//////re   c                  X   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    sJ 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    sJ t          t          |           dgddgf          dgddgfd
gddgffk    sJ t          t          |           dgddf          dgddfd
gddffk    sJ t          t          t          d                    dd	gdhdg          ddg dd
dhdggk    sJ t	          t
          d            t	          t
          d            d S )Nr^   r   r   r   )rc   ra   r   r   )r   r   r_   ro   rc   ra   r   r   r   rk   )rc   ra   r  r   r:  )r^   r   r^   r   r  )r   )r   r   r   r}   c                  (    t          ddgdg          S )Nr   r^   r`   r2   rd   re   rU   rr   ztest_reshape.<locals>.<lambda>  s    w1vt44 re   c                  (    t          ddgdg          S )Nr   r^   ro   r  rd   re   rU   rr   ztest_reshape.<locals>.<lambda>  s    w1vs33 re   )rQ   r   r2   r5  rI   r~   )r  s    rU   test_reshaper    s   
uQ{{

C3	|||$% % % %3	|$% % % %3	|$% % % %3QC!!
QA!QA() ) ) )3s$$
1a&	FQF+,- - - -3QC$$
aVQ!aVQ() ) ) )5::!a01136
	Q/123 3 3 35::Q~..#q&	QCF+,- - - -4b		??QaS,$?@@
Q			Aq6#6	789 9 9 9
:44555
:3344444re   c                      t          t          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 t          d          D                                 d	dgk    sJ t          t          d
                    d
gk    sJ t          t          d                    t          d          k    sJ t          t          dgddgdgg                    dgddggk    sJ t          t          t	          d dgddfD                                           dgddfddgdfdddgfgk    sJ 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    sJ dg t          t           fd           dgg t          t           fd           d S )Nc              3      K   | ]}|V  d S r   rd   r6  s     rU   r4  ztest_uniq.<locals>.<genexpr>  s"      ..1Q......re   r   r^   r   r_   rk   c              3       K   | ]	}|d z  V  
dS )r_   Nrd   )r2  rS   s     rU   r4  ztest_uniq.<locals>.<genexpr>  s&      --qQU------re   rc   r   r   ababcrV  c              3      K   | ]}|V  d S r   rd   rP  s     rU   r4  ztest_uniq.<locals>.<genexpr>  s"      !9!9!!9!9!9!9!9!9re   ro   c                  :     fdt                     D             S )Nc                 :    g | ]}                     |          S rd   remover2  rQ  r  s     rU   r7  z/test_uniq.<locals>.<lambda>.<locals>.<listcomp>  #    !?!?!?!!((1++!?!?!?re   r<   r  s   rU   rr   ztest_uniq.<locals>.<lambda>  "    !?!?!?!?tAww!?!?!? re   c                  :     fdt                     D             S )Nc                 :    g | ]}                     |          S rd   r	  r  s     rU   r7  z/test_uniq.<locals>.<lambda>.<locals>.<listcomp>  r  re   r  r  s   rU   rr   ztest_uniq.<locals>.<lambda>  r  re   )rQ   r<   r.   r   r/   rI   RuntimeErrorr  s   @rU   	test_uniqr    s)   ..
1.....//
QQ11v1||aV<= = = =--E!HH-----..1a&8888S		??se####W$u++----qcAq6A3'(())qcAq6]::::\!9!9qc1a[!9!9!999::;;#q!q1#qkAq1#;/0 0 0 0aAq1#sQC!qc:;;<<	
Aq1#sQC ! ! ! !	
A
<????@@@
A
<????@@@@@re   c            	          t          t          t          ddd                              dk    sJ t          t          t          ddd                              dk    sJ t          t          t          ddd                              dk    sJ t          t          t          ddd	                              d
k    sJ t          t          t          ddd                               dk    sJ d  t           fd          t	          d          k    sJ d t          fd          t	          d          k    sJ d S )N1123r_   r^   r   r9  r}   r  r   r   rc   ro   c                  ~    dD ]9} t          d|            t          g dd|           D ]}t          d|           :d S )NNr   r^   r   r}   	ordered =r   r_   r      )rk  r&   
orderedvalr"  s     rU   test1ztest_kbins.<locals>.test1  sa    . 	  	 J+z***999a<<<    eQ 	  	 re   c                                    S r   rd   )r  s   rU   rr   ztest_kbins.<locals>.<lambda>      EEGG re   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                      dD ]Q} t          d|            t          t          t          d                    d|           D ]}t          d|           Rd S )Nr  r  ro   r_   r   r  )rk  r&   rQ   r   r  s     rU   test2ztest_kbins.<locals>.test2  si    . 	  	 J+z***4a>>1jAAA    eQ 	  	 re   c                                    S r   rd   )r   s   rU   rr   ztest_kbins.<locals>.<lambda>  r  re   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   rQ   r&   r   r   )r  r   s   @@rU   
test_kbinsr"    s   tE&!Q///0011R7777tE&!R0001122b8888tE&!R0001122b8888tE&!Q///0011Q6666tE&!T22233449999     
 ####$$ 0 )  )         0     
 ####$$ "0 ")  ")  "  "  "  "  "  " re   c                  $   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 sJ d S )NFro   r   Tr^   r_   )r#   r   rQ   r   rd   re   rU   test_has_dupsr$  '  s    CEE??e####DqNN##u,,,,III$&&&&aS1#J4''''aS1#J5((((((re   c                      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    sJ d S )	Nr  )r^   r   r^   r_   r   r  er   rW  dro   )r   )outputs    rU   test__partitionr)  /  s    g//	c
S#J4' ' ' ' 'g22	c
S#J7' ' ' ' '!Fg''''S#Jc
SE+JJJJJJJre   c                     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 ]}d gt          t	          d|                    z   D ]a}t          d  |||d          D                       t          d  |||d          D                       cxk    r | ||          k    sn J bd S )Nr   )nTr^   r   c              3      K   | ]}d V  dS r^   Nrd   r6  s     rU   r4  z*test_ordered_partitions.<locals>.<genexpr>@  "      **!A******re   c              3      K   | ]}d V  dS r-  rd   r6  s     rU   r4  z*test_ordered_partitions.<locals>.<genexpr>A  r.  re   )%sympy.functions.combinatorial.numbersr+  r>   rQ   r   rx  )r+  r  rQ  r  s       rU   test_ordered_partitionsr1  8  s;   888888A!Q==RD    !Q==RD    1a[[  $uQ{{+++ 	 	A**qqAqzz*******qqAqzz*****   1a      	 re   c                  :   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	                    g dg dg dgk    sJ d S )
Nr  r   r  ro   r   r   r   r`   )dir)rQ   r?   r   rd   re   rU   test_rotationsr4  E  s    	$  c3Z#s$<<<<<	%((##$$IIIyyy(IIIII	%((+++,,IIIyyy0QQQQQQQre   c                     t          d          ddgk    sJ t          dd          g dk    sJ t          dd          dk    sJ t          ddd          dk    sJ t          t          dd	                    g d
k    sJ t          t          ddd                    g dk    sJ t          t          d            t          t          d            d S )Nro   r^   r   T)str11011r_   rw  )rl   r   r   r   rX   )000110r7  c                       t          d          S )Ng      ࿩r$   rd   re   rU   rr   ztest_ibin.<locals>.<lambda>R  s    tCyy re   c                  "    t          dd          S )Nr_   r^   r=  rd   re   rU   rr   ztest_ibin.<locals>.<lambda>S  s    tAqzz re   )r$   rQ   rI   r~   rd   re   rU   	test_ibinr?  K  s    77q!f1::""""t$$$$1$5((((Q#C#C#CCCCCQ%%%&&*B*B*BBBBB
:(()))
:))*****re   c                  r   t          d          du sJ t          d          du sJ t          d           du sJ  G d dt                    } t           |                       du sJ  G d dt                    }t           |                      du sJ  G d	 d
          }t           |                      du sJ  G d d          }t           |                      du sJ  G d d          }t           |                      du sJ  G d d|          }t           |                      du sJ d S )Nr   Fr^   c                       e Zd ZdS )test_iterable.<locals>.Test1Nru   rd   re   rU   Test1rB  [  rz   re   rC  c                       e Zd ZdZdS )test_iterable.<locals>.Test2TNrv   rw   rx   	_iterablerd   re   rU   Test2rE  `          			re   rH  Tc                       e Zd ZdS )test_iterable.<locals>.Test3Nru   rd   re   rU   Test3rK  e  rz   re   rL  c                       e Zd ZdZdS )test_iterable.<locals>.Test4TNrF  rd   re   rU   Test4rN  j  rI  re   rO  c                       e Zd Zd ZdS )test_iterable.<locals>.Test5c              3      K   dV  d S )Nr^   rd   )selfs    rU   __iter__z%test_iterable.<locals>.Test5.__iter__p  s      GGGGGre   N)rv   rw   rx   rT  rd   re   rU   Test5rQ  o  s#        	 	 	 	 	re   rU  c                       e Zd ZdZdS )test_iterable.<locals>.Test6FNrF  rd   re   rU   Test6rW  u  s        			re   rX  )rA   rB   )rC  rH  rL  rO  rU  rX  s         rU   test_iterablerY  V  s	   A;;%A;;%D>>U""""        EEGG%%%%        EEGG$$$$        EEGG%%%%        EEGG$$$$        EEGG$$$$        EEGG%%%%%%re   c                  &   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    sJ t          t          g dd                    g dggk    sJ 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    sJ t          t          g d                    g k    sJ t          t          g d                    g k    sJ t          t          ddgd                    g k    sJ t          t          ddgd                    g k    sJ d S )Nr^   r_   r   ro   r   )rQ   rD   rd   re   rU   test_sequence_partitionsr[  {  s   #QC++,,1#7777#QFA..//aVH:====#QFA..//aS1#J<????#IIIq1122			{mCCCC#IIIq1122#1v!Q!&' ' ' '#IIIq1122aS1#6GGGGG #B**++r1111#B**++r1111#QFA..//25555#QFA..//2555555re   c                     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    sJ t          t          dgd                    g dggdgg ggk    sJ t          t          dgd                    g g dggg dgg gdgg 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                    g ddggdgdggddgg ggk    sJ 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    sJ t          t          g dd                    g dggk    sJ 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    sJ 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    sJ t          t          g d                    g k    sJ t          t          dgd                    g k    sJ t          t          ddgd                    g k    sJ d S )Nr^   r_   ro   r   r   )rQ   rE   rD   rd   re   rU   test_sequence_partitions_emptyr]    s   )"a0011rdV;;;;)"a0011r2hZ????)"a0011r2rl^CCCC)1#q1122ug====)1#q1122QCyA3)6LLLLL)1#q1122
b1#aS"R}56 6 6 6)1a&!4455Aq6(CCCC)1a&!4455
q!faSzQFB<01 1 1 1)1a&!4455	R!Q2sQC.21vr*:
b1#!qc2!QR(8:     ))))Q7788iii[MIIII))))Q7788
iiiA3A-1a&1#BHI I I I))))Q7788	Rb1#1v.	aVaSB			2.
b1a&QC!qc?
q!fbQFB,
Q!bIIIr2.=     #B**++r1111#QC++,,2222#QFA..//2555555re   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   rP   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   wrS   rR   r   rV   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r>  rZ  rp  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r$  r)  r1  r4  r?  rY  r[  r]  rd   re   rU   <module>rk     s3         % % % % % % % % " " " " " " & & & & & & & & & & & & . . . . . . . . > > > > > > ' ' ' ' ' ' A A A A A A A A A A4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 43 3 3 3 3 3 3 3 # " " " " " ? ? ? ? ? ? ? ?WY
1a> > >. . . 3 3 3,A A A,) ) )*%9 %9 %9P  08 8 8: : :  	: 	: 	:7 7 7H H H@ @ @@ @ @
E 
E 
EE E E"< < <"   ?F ?F ?FDN N N >K >K >KB(  (  ( V< < <7 7 7"8 8 84 4 4B  "  2; ; ;? ? ?6 6 6O O O? ? ?0 0 05 5 50A A A"K  K  K \) ) )K K K
 
 
R R R+ + +"& "& "&J6 6 6 6 6 6 6 6re   