
    g؉                        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 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. Zwd/ Zxd0 Zyd1 Zzd2 Z{d3 Z|d4 Z}d5 Z~d6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd>S )?    )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                  ~   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.iterablesrN   r	   rK   listyxsortedrM   s     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/utilities/tests/test_iterables.pytest_deprecated_iterablesrW   !   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 rT   xxxyxxyxyzxxxyzzyx         xxyzyx   )r@        rV   test_is_palindromicrg   )   s    "#$%     d#####f%%%%%)Q'''''i+++++)Q+++++)Q*****(A&&&&&h*****(Au-------rf   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_   ra   r_   r`   r   r   r   levels)rj   rl   rm   r`   )rk   ra   r_   r`   r   r      c                  &    t           d          S )Nra   rn   )r   )lss   rV   <lambda>ztest_flatten.<locals>.<lambda>D   s    wr"555 rf   c                       e Zd ZdS )test_flatten.<locals>.MyOpN__name__
__module____qualname__re   rf   rV   MyOpru   F           rf   rz   cls>   r_   r`      )r   rT   rJ   
ValueErrorr   rS   zrR   )rz   rr   s    @rV   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2rf   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 )Nre   r_   r`   rp   ri   r`   rp   r_   r`   rp      rd   r_   rp   )r_   r   )r_   rd   r`   rp   r`   r   )r`   rd   r   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   rd   i  rk   rp   )rR   r%   rU   rA   rI   Integerssetr   
isinstancer   r   range)triplesn1n2n3ts        rV   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rf   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_   rl   r   r   r_   r`   r_   r`   )r   r`   r_   r   )r_   r_   r`   r`   r`   r_   rp   rp   r`   r`   r`   rp   )rl   r   r   rp   r`   )r"   re   rf   rV   
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::: ?) ?) ?) ) ) ) ) ) )rf   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   re   r_   r   r`   )rl   r   r   rp   r   T
repetitionr   ri   r   r   )
rm   r   r_   r   r`   r   rp   r   rl   r   r`   r`   r   rp   rp   )r   r   )r   r   r`   )r   r   rp   r   r   r_   r`   r   r_   rp   )r   r`   r`   r   r`   rp   )r   rp   rp   r   r_   r_   r`   r_   r_   rp   r_   r`   r`   r   )r_   rp   rp   r   )r`   r`   rp   )r`   rp   rp   )rp   rp   rp   #   F)r   r   r   r   )re   ri   r   r   rl   r   )re   ri   r   rl   )r   rl   r   r   r   r   )rR   r8   r   lenls    rV   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 9rf   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   re   r_   r   r`   )r   r   r   r_   r   rl   r   r`   r   r   r   rp   r   rp   r_   r   rp   )r   r   r   r`   r_   r   r   rp   r_   )r   rp   r`   r_   r   r`   )r_   r   rp   r_   r`   r   r   )r_   rp   r   )r_   rp   r`   r`   r   r_   )r`   r   rp   r`   r_   r   )r`   r_   rp   )r`   rp   r   )r`   rp   r_   )rp   r   r_   )rp   r   r`   )rp   r_   r   )rp   r_   r`   )rp   r`   r   rp   r`   r_   T)rm   r   r   r   r   r   rl   r   r   r   r   r   r   r   r   r   @      r   )rR   r   r=   r   r   s    rV   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 ; ; ;      rf   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   re   a)r   )repeat)r   r   r   ri   )rR   r   r   re   rf   rV   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7rf   c                      t                      } t          | t          d                    }t          |d          t	          t          d                    k    sJ d S )Nzx0 x2 x3rp   zx1 x4 x5)r-   r   r   r9   rR   )sfiltereds     rV   test_filter_symbolsr      sU    Aa!4!455H!WZ%8%8 9 9999999rf   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    rV   test_numbered_symbolsr      sx    U###Ad1ggu%%%%% AGGGHH     rf   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 )Nrd   c                     | dz  S Nr`   re   _s    rV   rs   ztest_sift.<locals>.<lambda>   s
    !a% rf   r_   rp   )r   r`   r   r   c                 6    |                      t                    S NhasrT   r   s    rV   rs   ztest_sift.<locals>.<lambda>   s    !%%(( rf   )FTc                 6    |                      t                    S r   r   r   s    rV   rs   ztest_sift.<locals>.<lambda>   s    15588 rf   Fr   r_   r`   rp   c                     | dz  S r   re   rT   s    rV   rs   ztest_sift.<locals>.<lambda>   s
    A rf   Tbinaryr   r`   c                     | dz  dk    S )Nrp   r_   re   r   s    rV   rs   ztest_sift.<locals>.<lambda>   s    A
 rf   r   c                  ,    t          g dd d          S )Nr   c                     | dz  S )Nrp   re   r   s    rV   rs   z-test_sift.<locals>.<lambda>.<locals>.<lambda>   s
    QU rf   Tr   )r6   re   rf   rV   rs   ztest_sift.<locals>.<lambda>   s    \\\??4888 rf   )	r6   rR   r   rT   rS   rI   OnerJ   r   re   rf   rV   	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 : : : : :rf   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 )Nrd   zx0:5zx5:10r_   r`   rp   r   rd   )r-   r9   rR   r   )Xs    rV   	test_taker      s    A1::gfoo......1::gg..//////##666666rf   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`   rl   )r   rT   rS   r   re   rf   rV   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Grf   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`   rp   r   )rR   r1   re   rf   rV   test_prefixesr      s    ####!A3%''''!Q  !!qcAq6]2222))**
q!fiii?@ @ @ @ @ @rf   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   rd   r   r   )r`   rp   r   rd   )rR   r0   re   rf   rV   test_postfixesr      s    	""$$$$	1#QC5((((	1a&!!""sQFm3333	///**++
q!fiii?@ @ @ @ @ @rf   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`   rp   rd         	   
   r~   )	)r   r~   r   r   )rd   r~   )rp   r   )rp   r   )r~   r`   )r~   r   )r~   r   )r   r   )rp   rd   r   r   r~   r`   r   r   c                     |  S r   re   )vs    rV   rs   z'test_topological_sort.<locals>.<lambda>	  s    1" rf   rO   )r   rd   r~   rp   r   r   r   r`   c                  .    t           dgz   f          S )N)r   r   )r:   EVs   rV   rs   z'test_topological_sort.<locals>.<lambda>  s    /A	M0BCC rf   )r:   rJ   r   r  s   @@rV   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Drf   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`   rp   rl   r   r   r   r   r   rl   r   r   rp   r   r   )rl   r   r	  )r   rp   )r7   r  r  s     rV   "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Drf   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`   rp   r  r   r  rl   r	  r   )r   r
  s     rV   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+;;;;;;;rf   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`   rp   r   r`   )r`   rp   r   r   r_   r_   )r   r   r_   r`   rp   )r3   r4   append)ABs     rV   test_rotater  1  s    Aq!////10000
AQA7777HHQKKK7777AqA7777HHQKKK777777rf   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  rd   r   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_   rp   r   r`   rp   r   r   r   r   abbaaa)$)mpsyy)mpsyrS   )mpsyy)r  rS   rS   )mpyyr   )mpysy)r   r   rS   )mpsyy)r"  r!  rS   )r"  r   r  )r"  r   rS   rS   )msyyp)msypy)r&  r%  rS   )mspyy)r(  r'  rS   )r(  r%  r  )r(  r%  rS   rS   )myyps)r*  r%  r   )mypsy)r,  r+  rS   )r,  r'  r   )r,  r%  r!  )r,  r%  r   rS   )mpsyy)r.  r-  rS   )r.  r+  r  )r.  r+  rS   rS   )r.  r)  r   )r.  r'  r!  )r.  r'  r   rS   )r.  r%  r#  )r.  r%  r!  rS   )r.  r%  r   r  )r.  r%  r   rS   rS   c                 @    g | ]}t          d  |D                       S )c              3   @   K   | ]}d                      |          V  dS rY   Njoin).0parts     rV   	<genexpr>z6test_multiset_partitions.<locals>.<listcomp>.<genexpr>{  s,      ..D"''$--......rf   )tupler5  r%  s     rV   
<listcomp>z,test_multiset_partitions.<locals>.<listcomp>{  s?     7 7 7 ..A..... 7 7 7rf   sympy   r      rb   )r   r`   rp   )rb   r`   r`   )r`   r`   r`   rp   c                 2    g | ]}t          |d dg          S r   )rG   r9  s     rV   r:  z,test_multiset_partitions.<locals>.<listcomp>  s6     8 8 8 a!A'' 8 8 8rf   )rR   r*   r   rU   rH   )r  r   ans
factoringss       rV   test_multiset_partitionsrA  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rf   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 rY   r3  r5  is     rV   r:  z.test_multiset_combinations.<locals>.<listcomp>  s.     ; ; ;1BGGAJJ ; ; ;rf   mississippirp   c                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z.test_multiset_combinations.<locals>.<listcomp>  s.     / / /1BGGAJJ / / /rf   c                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z.test_multiset_combinations.<locals>.<listcomp>  s"    ===1BGGAJJ===rf      r_   r`   r   r   abcr  cc                  B    t          t          dddd                    S )Nrp   ra   r   r`   )rR   r)   re   rf   rV   rs   z,test_multiset_combinations.<locals>.<lambda>  s    t$9aB--$K$KLL rf   )rR   r)   r(   r   rJ   r   )r?  Ms     rV   test_multiset_combinationsr]    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Mrf   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 rR  r3  rS  s     rV   r:  z.test_multiset_permutations.<locals>.<listcomp>  s"    >>>1BGGAJJ>>>rf   rb  c                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z.test_multiset_permutations.<locals>.<listcomp>  s"    HHH1BGGAJJHHHrf   r   r`   r   r   r_   r   rp   rY   ra   c                      t          dd          D ]5} t          |            t          g d|           D ]}t          |           6d S )Nr_   r   )r   r   r_   r   r_   )r   printr+   )rT  r%  s     rV   testz(test_multiset_permutations.<locals>.test  s]    q! 	 	A!HHH*???A>>  a	 	rf   c                                    S r   re   )ro  s   rV   rs   z,test_multiset_permutations.<locals>.<lambda>  s    4466 rf   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 )Nrp   ra   r   )rR   r+   re   rf   rV   rs   z,test_multiset_permutations.<locals>.<lambda>  s    t$9aB--$H$HII rf   )r+   r(   rR   r   r   r   rJ   r   )r?  nulro  s     @rV   test_multiset_permutationsrs    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Jrf   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_   rb   )krp   rl   r   r   r   r   )rv  r.  r  r   r   c                     g | ]B}t          d  |D                       r't          |                                          dk    @|CS )c              3   "   K   | ]
}|d k    V  dS )r   Nre   r5  rv  s     rV   r7  z-test_partitions.<locals>.<listcomp>.<genexpr>  s&      1D1DQ!q&1D1D1D1D1D1Drf   rp   )allsumvaluesrS  s     rV   r:  z#test_partitions.<locals>.<listcomp>  s]     D! D! D!c1D1D!1D1D1D.D.DD!

OOa 	
rf   )r.  c                 D    g | ]}t          d  |D                       |S )c              3   "   K   | ]
}|d k    V  dS )rp   Nre   ry  s     rV   r7  z-test_partitions.<locals>.<listcomp>.<genexpr>  s&      ':':1Q':':':':':':rf   )rz  rS  s     rV   r:  z#test_partitions.<locals>.<listcomp>  sD     8< 8< 8<C':':':':':$:$:8<	8< 8< 8<rf   )r   rR   r.   rI   r   r   r   )r?  rT  nr.  qs        rV   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   rf   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   re   rS  s     rV   r:  z*test_binary_partitions.<locals>.<listcomp>   s     000QAaaaD000rf   r   r   r`   )r   r_   r_   )r   r   r`   )r   r   r_   r_   )r   r`   r`   r`   )r   r`   r`   r_   r_   )r   r`   r_   r_   r_   r_   )r   r_   r_   r_   r_   r_   r_   )r`   r`   r`   r`   r`   )r`   r`   r`   r`   r_   r_   )r`   r`   r`   r_   r_   r_   r_   )r`   r`   r_   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   re   r5  js     rV   r:  z*test_binary_partitions.<locals>.<listcomp>  s     444!!!444rf      $   )r   r   re   rf   rV   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;;;;;;rf   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 re   )r   r   r   rS  s     rV   r:  z"test_bell_perm.<locals>.<listcomp>
  s0    <<<1CM!$$%%&&<<<rf   r_   r   c                 ,    g | ]}t          |          S re   r   rS  s     rV   r:  z"test_bell_perm.<locals>.<listcomp>
  s1     A+ A+ A+	!A+ A+ A+rf   rp   )r   r   r   r   r   r   rd   c                  :    t          t          d                    S )Nr   )rR   r   re   rf   rV   rs   z test_bell_perm.<locals>.<lambda>  s    tM!$4$455 rf   )	r   rR   r   r   r8  
array_formnext_trotterjohnsonrJ   r   )r  r%  r  bis       rV   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6rf   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     rV   	<setcomp>z#test_involutions.<locals>.<setcomp>  s#    111!KNNA%111rf   )	enumeraterR   r    r   )lengthsr  NrT  s       rV   test_involutionsr    s    ###G'"" 8 81%a!e,,--1vv{{{{11q11122a777778 8rf   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 )+Nrb   i	  rY   c              3   @   K   | ]}d                      |          V  dS r2  r3  rS  s     rV   r7  z$test_derangements.<locals>.<genexpr>$  s,      FF!2771::FFFFFFrf   abcdebadecbaecdbcaedbcdeabceadbdaecbdeacbdecabeacdbedacbedcacabedcadebcaebdcdaebcdbeacdeabcdebaceabdcebadcedabcedbadabecdaebcdaecbdcaebdcbeadceabdcebadeabcdeacbdebacdebcaeabcdeadbceadcbecabdecbadecdabecdbaedabcedacbedbacedbcar   )r_   r   rp   r`   )r_   r`   rp   r   )r_   rp   r   r`   )r`   r   rp   r_   )r`   rp   r   r_   )r`   rp   r_   r   )rp   r   r_   r`   )rp   r`   r   r_   )rp   r`   r_   r   )r   r_   r`   r`   )r`   r`   r   r_   )r`   r`   r_   r   bar  abbc                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp>2  s"    (((1BGGAJJ(((rf   c                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp>3  s"    )))1BGGAJJ)))rf   rY  bcacabc                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp>4  s"    ***1BGGAJJ***rf   aabbbbaac                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp>5  s"    ...1BGGAJJ...rf   aabbcccc)ccccaabbccccababccccabbaccccbaabccccbabaccccbbaac                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp>8  s"    ---1BGGAJJ---rf   aabbccc)cccabbacccababcccaabbccacbbaccacbabccacabbcbccbaacbccabacbccaabbcccbaabcccababcccaabc                 8    g | ]}d                      |          S rR  r3  rS  s     rV   r:  z%test_derangements.<locals>.<listcomp><  s"    +++1BGGAJJ+++rf   books)kbsooksboosbkooskboooksbooskbookbsoobksooskoboksobosbokobsokrp   r`   r_   )r   rR   r   r   r4  rC   )Ds    rV   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 4rf   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   rR   r,   )r  rv  fs      rV   countztest_necklaces.<locals>.countD  s$    4	!Q**++,,,rf   r_   r   r`   r   rp   )r_   r`   r`   rp   )r`   rp   rp   rb   )rp   r   r   r   )r   rb   rb      )rd   r   r   '   )rb         \   )r            )r   r  r   )r  r.  rT  s      rV   test_necklacesr  C  s    - - -
A1a[[ < <		55Aq>>55Aq>>55Aq>>; 	< 	< 	< 	<!99         rf   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_   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_   )rR   r   r   )bcs    rV   test_braceletsr  T  s   	i1oo		B"::	
A	
A	
A	
A	
A	
A	
A	
A	
A	
A!
       
i1oo		B"::!        rf   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 )Nrd   r  )r   r_   r`   rp   rp   )r   r_   r`   rp   r`   )r   r_   r`   rp   r_   )r   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_   r   )r   r_   r`   r   r_   )r   r_   r`   r   r   )r   r_   r_   r_   r_   )r   r_   r_   r_   r   )r   r_   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  )rR   r!   r   re   rf   rV   test_generate_oriented_forestr  m  s    (++,,///???///???///???///???///1; ; ; ; ; t,R001122d::::::rf   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_   rd   c                  V    t          t          t          d                    d          S )Nr   rp   r;   rR   r   re   rf   rV   rs   z test_unflatten.<locals>.<lambda>{  s    yeBii!<< rf   c                  V    t          t          t          d                    d          S )Nr   rk   r  re   rf   rV   rs   z test_unflatten.<locals>.<lambda>|  s    yeBii"== rf   )rR   r   r;   zipr8  rJ   r   )rs    rV   test_unflattenr  w  s    U2YYAQ<<4AcccFAaddG 4 4555555Q??uQrrU||U1QRR5\\:::::
:<<===
:==>>>>>rf   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_   rp   r   r   r   )r_   r`   rd   r`   )r_   rp   rd   )r   r`   rp   )r   r   rp   )r   rR   r   r   re   rf   rV   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5rf   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  rZ  r   rO   )rZ  r   r  r  )r'   r   re   rf   rV   test_minlexr    s    )))	)))))	)))))	)))))e,,,	9999%==E!!!!)s3337NNNNNNNrf   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    rV   rs   ztest_ordered.<locals>.<lambda>  s    CFF rf   c                      t          |           S r   )r{  r   s    rV   rs   ztest_ordered.<locals>.<lambda>  s    c!ff rf   r  warnc                  D    t          t           dd                    S )NFTr  )rR   r	   keysseqs   rV   rs   ztest_ordered.<locals>.<lambda>  s$    T5t<<<== rf   )rR   r	   rT   rS   hashrJ   r   r  s   @@rV   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
: > > > > > ? ? ? ? ?rf   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    rV   	test_runsr    s   88r>>>>99!A<<QC!:%%%%			??sQFm++++			??1vsm++++			??sQC!o----			2Aq6A3-//////rf   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   )rd   rb   r   r   )r   r   r`   rp   rd   rb   r   r   r   rl   )rd   rb   r	  r   r=  )r_   r   r_   r   r  )r   )r   r   r   r~   c                  (    t          ddgdg          S )Nr   r_   ra   r2   re   rf   rV   rs   ztest_reshape.<locals>.<lambda>  s    w1vt44 rf   c                  (    t          ddgdg          S )Nr   r_   rp   r  re   rf   rV   rs   ztest_reshape.<locals>.<lambda>  s    w1vs33 rf   )rR   r   r2   r8  rJ   r   )r  s    rV   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4rf   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   re   r9  s     rV   r7  ztest_uniq.<locals>.<genexpr>  s"      ..1Q......rf   r   r_   r   r`   rl   c              3       K   | ]	}|d z  V  
dS )r`   Nre   )r5  rT   s     rV   r7  ztest_uniq.<locals>.<genexpr>  s&      --qQU------rf   rd   r   r   ababcrY  c              3      K   | ]}|V  d S r   re   rS  s     rV   r7  ztest_uniq.<locals>.<genexpr>  s"      !9!9!!9!9!9!9!9!9rf   rp   c                  :     fdt                     D             S )Nc                 :    g | ]}                     |          S re   remover5  rT  r  s     rV   r:  z/test_uniq.<locals>.<lambda>.<locals>.<listcomp>  #    !?!?!?!!((1++!?!?!?rf   r<   r  s   rV   rs   ztest_uniq.<locals>.<lambda>  "    !?!?!?!?tAww!?!?!? rf   c                  :     fdt                     D             S )Nc                 :    g | ]}                     |          S re   r  r  s     rV   r:  z/test_uniq.<locals>.<lambda>.<locals>.<listcomp>  r  rf   r  r  s   rV   rs   ztest_uniq.<locals>.<lambda>  r  rf   )rR   r<   r.   r   r/   rJ   RuntimeErrorr  s   @rV   	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
<????@@@@@rf   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   r<  r~   r  r   r   rd   rp   c                  ~    dD ]9} t          d|            t          g dd|           D ]}t          d|           :d S )NNr   r_   r   r~   	ordered =r   r`   r      )rn  r&   
orderedvalr%  s     rV   test1ztest_kbins.<locals>.test1  sa    . 	  	 J+z***999a<<<    eQ 	  	 rf   c                                    S r   re   )r  s   rV   rs   ztest_kbins.<locals>.<lambda>      EEGG rf   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  rp   r`   r   r  )rn  r&   rR   r   r  s     rV   test2ztest_kbins.<locals>.test2  si    . 	  	 J+z***4a>>1jAAA    eQ 	  	 rf   c                                    S r   re   )r#  s   rV   rs   ztest_kbins.<locals>.<lambda>  r!  rf   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   rR   r&   r   r   )r  r#  s   @@rV   
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 ")  ")  "  "  "  "  "  " rf   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 )NFrp   r   Tr_   r`   )r#   r   rR   r   re   rf   rV   test_has_dupsr'  '  s    CEE??e####DqNN##u,,,,III$&&&&aS1#J4''''aS1#J5((((((rf   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   rZ  drp   )r   )outputs    rV   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Jrf   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_   Nre   r9  s     rV   r7  z*test_ordered_partitions.<locals>.<genexpr>@  "      **!A******rf   c              3      K   | ]}d V  dS r0  re   r9  s     rV   r7  z*test_ordered_partitions.<locals>.<genexpr>A  r1  rf   )%sympy.functions.combinatorial.numbersr.  r>   rR   r   r{  )r.  r  rT  r  s       rV   test_ordered_partitionsr4  8  s;   888888A!Q==RD    !Q==RD    1a[[  $uQ{{+++ 	 	A**qqAqzz*******qqAqzz*****   1a      	 rf   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  rp   r   r   r   ra   )dir)rR   r?   r   re   rf   rV   test_rotationsr7  E  s    	$  c3Z#s$<<<<<	%((##$$IIIyyy(IIIII	%((+++,,IIIyyy0QQQQQQQrf   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 )Nrp   r_   r   T)str11011r`   rz  )rm   r   r   r   rY   )000110r:  c                       t          d          S )Ng      ࿩r$   re   rf   rV   rs   ztest_ibin.<locals>.<lambda>R  s    tCyy rf   c                  "    t          dd          S )Nr`   r_   r@  re   rf   rV   rs   ztest_ibin.<locals>.<lambda>S  s    tAqzz rf   )r$   rR   rJ   r   re   rf   rV   	test_ibinrB  K  s    77q!f1::""""t$$$$1$5((((Q#C#C#CCCCCQ%%%&&*B*B*BBBBB
:(()))
:))*****rf   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>.Test1Nrv   re   rf   rV   Test1rE  [  r{   rf   rF  c                       e Zd ZdZdS )test_iterable.<locals>.Test2TNrw   rx   ry   	_iterablere   rf   rV   Test2rH  `          			rf   rK  Tc                       e Zd ZdS )test_iterable.<locals>.Test3Nrv   re   rf   rV   Test3rN  e  r{   rf   rO  c                       e Zd ZdZdS )test_iterable.<locals>.Test4TNrI  re   rf   rV   Test4rQ  j  rL  rf   rR  c                       e Zd Zd ZdS )test_iterable.<locals>.Test5c              3      K   dV  d S )Nr_   re   )selfs    rV   __iter__z%test_iterable.<locals>.Test5.__iter__p  s      GGGGGrf   N)rw   rx   ry   rW  re   rf   rV   Test5rT  o  s#        	 	 	 	 	rf   rX  c                       e Zd ZdZdS )test_iterable.<locals>.Test6FNrI  re   rf   rV   Test6rZ  u  s        			rf   r[  )rA   rB   )rF  rK  rO  rR  rX  r[  s         rV   test_iterabler\  V  s	   A;;%A;;%D>>U""""        EEGG%%%%        EEGG$$$$        EEGG%%%%        EEGG$$$$        EEGG$$$$        EEGG%%%%%%rf   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   rp   r   )rR   rE   re   rf   rV   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5rf   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`   rp   r   r   )rR   rF   rE   re   rf   rV   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5rf   c                      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   ra   r_   )r   r_   ra   )r   ra   ra   r   )ra   r   r_   )r_   r   ra   )ra   r   ra   r   )ra   r_   r   )r_   ra   r   )ra   ra   r   r   r   r   )rR   rD   )r?  s    rV   test_signed_permutationsrb    s    4 4 4C #I..//36666#I..//36666#I..//3666666rf   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   rQ   r   r   r   r   r   r   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   rF   sympy.utilities.enumerativerG   rH   sympy.core.singletonrI   sympy.testing.pytestrJ   rK   wrT   rS   r   rW   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rA  r]  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r'  r,  r4  r7  rB  r\  r^  r`  rb  re   rf   rV   <module>rp     sM         % % % % % % % % " " " " " " & & & & & & & & & & & & . . . . . . . . > > > > > > ' ' ' ' ' ' 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 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@7 7 7 7 7rf   