
    7>ne/                     f    d Z ddlZddlT ddlmZ ddlmZ  G d de          Zd Zd	 Z	d
 Z
d ZdS )a   Test that functions are reasonably behaved with None as input.

Typed Cython objects (like dict) may also be None.  Using functions from
Python's C API that expect a specific type but receive None instead can cause
problems such as throwing an uncatchable SystemError (and some systems may
segfault instead).  We obviously don't what that to happen!  As the tests
below discovered, this turned out to be a rare occurence.  The only changes
required were to use `d.copy()` instead of `PyDict_Copy(d)`, and to always
return Python objects from functions instead of int or bint (so exceptions
can propagate).

The vast majority of functions throw TypeError.  The vast majority of
functions also behave the same in `toolz` and `cytoolz`.  However, there
are a few minor exceptions.  Since passing None to functions are edge cases
that don't have well-established behavior yet (other than raising TypeError),
the tests in this file serve to verify that the behavior is at least
reasonably well-behaved and don't cause SystemErrors.

    N)*)raises)addc                   &    e Zd Zd Zd Zd Zd ZdS )GenExceptionc                     || _         d S Nexc)selfr   s     <lib/python3.11/site-packages/cytoolz/tests/test_none_safe.py__init__zGenException.__init__   s        c                     | S r	    r   s    r   __iter__zGenException.__iter__   s    r   c                     | j         r	   r
   r   s    r   __next__zGenException.__next__"   	    hr   c                     | j         r	   r
   r   s    r   nextzGenException.next%   r   r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      sP                  r   r   c                  h	   g } t          t          t          fd           sJ |                     d           t          t          t          fd           sJ |                     d           t          t          d           st	          d i           J t          t          d           sJ t	          ddgd           J t          t          d	           sJ |                     d
           t          t          d           sJ t          t          t          fd           sJ |                     d           t          t          d           st          d ddi          ddik    sJ t          t          t          fd           sJ |                     d           t          t          d           sJ t          t          t          fd           sJ |                     d           t          t          d           sJ t          t          d           sJ t          t          t          fd           sJ |                     d           t          t          d           sJ t          t          d           sJ t          t          t          fd           sJ |                     d           t          t          d           sJ t          t          t          fd           sJ |                     d            t          t          d!           st          d ddi          dd"ik    sJ t          t          t          fd#           sJ |                     d$           t          t          d%           st          d ddi          dd"ik    sJ t          t          t          fd&           sJ |                     d'           t          t          d(           sJ t          t          t          fd)           sJ |                     d*           t          t          t          fd+           sJ t          t          d,           sJ |                     d-           t          |           }t          t          j
        j                  }||k    s#J d.d/                    ||z
            z              d S )0Nc                  $    t          d dd          S N      )assocr   r   r   <lambda>z test_dicttoolz.<locals>.<lambda>+   s    uT1a7H7H r   r!   c                  "    t          d d          S Nr   )dissocr   r   r   r"   z test_dicttoolz.<locals>.<lambda>.   s    vdA r   r%   c                  "    t          d i           S r	   get_inr   r   r   r"   z test_dicttoolz.<locals>.<lambda>2   s    fT2&6&6 r   c                  &    t          d i d          S )NT
no_defaultr'   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>5   s    VD"%F%F%F r   r   r   c                  *    t          ddgd d          S )Nr   r   Tr*   r'   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>7   s    VQFDT%J%J%J r   r(   c                  &    t          d ddi          S r   )	keyfilterr   r   r   r"   z test_dicttoolz.<locals>.<lambda>:       YtaV%<%< r   c                  ,    t          t          d           S r	   )r.   identityr   r   r   r"   z test_dicttoolz.<locals>.<lambda>;       y47P7P r   r.   c                  &    t          d ddi          S r   )keymapr   r   r   r"   z test_dicttoolz.<locals>.<lambda>?       fTAq6&:&: r   r    r   c                  ,    t          t          d           S r	   )r4   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>A       vh7M7M r   r4   c                       t          d           S r	   merger   r   r   r"   z test_dicttoolz.<locals>.<lambda>D       U4[[ r   c                  "    t          d d           S r	   r:   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>E   s    uT47H7H r   r;   c                  ,    t          d ddiddi          S )Nr   r          )
merge_withr   r   r   r"   z test_dicttoolz.<locals>.<lambda>H   s    Zq!fq!f%E%E r   c                  ,    t          t          d           S r	   rA   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>I   s    Z$%?%? r   c                  .    t          t          d d           S r	   rC   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>K   s    *XtT:: r   rA   c                  0    t          dddiiddgd           S Nr   r    r?   )	update_inr   r   r   r"   z test_dicttoolz.<locals>.<lambda>N   s    YAq6{QFD%I%I r   c                  6    t          dddiid t                    S rF   rG   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>O   s    YAq6{D(%K%K r   c                  2    t          d ddgt                    S r   rI   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>Q   s    9TAq68<< r   rG   c                  &    t          d ddi          S r   )	valfilterr   r   r   r"   z test_dicttoolz.<locals>.<lambda>T   r/   r   c                  ,    t          t          d           S r	   )rL   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>U   r2   r   rL   c                  &    t          d ddi          S r   )valmapr   r   r   r"   z test_dicttoolz.<locals>.<lambda>Y   r5   r   r    c                  ,    t          t          d           S r	   )rO   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>[   r8   r   rO   c                  &    t          d ddi          S r   )itemmapr   r   r   r"   z test_dicttoolz.<locals>.<lambda>^       gdQF&;&; r   c                  ,    t          t          d           S r	   )rS   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>`   s    wx7N7N r   rS   c                  &    t          d ddi          S r   )
itemfilterr   r   r   r"   z test_dicttoolz.<locals>.<lambda>c   s    Zq!f%=%= r   c                  ,    t          t          d           S r	   )rW   r1   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>d   s    z(D7Q7Q r   rW   c                  (    t          d ddgd          S )Nr    r?   assoc_inr   r   r   r"   z test_dicttoolz.<locals>.<lambda>g   s    xq!fa7P7P r   c                  $    t          i d d          S Nr?   rZ   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>h   s    Xb$%:%: r   r[   !%s not tested for being None-safe, )r   	TypeErrorAttributeErrorappendr(   r4   rO   rS   setcytoolz	dicttoolz__all__jointesteds1s2s      r   test_dicttoolzrl   )   s   F9n-/H/HIIIII
MM'9n-/F/FGGGGG
MM( 96677 &4$$$)FFGGGGG1a&$''')JJKKKKK
MM()<<=====>9-/P/PQQQQQ
MM+ 9::;; /4!Q  T1I---->9-/M/MNNNNN
MM()00111119n-/H/HIIIII
MM')EEFFFFF)??@@@@@9n-::< < < < <
MM,)IIJJJJJ)KKLLLLL9n-<<> > > > >
MM+)<<=====>9-/P/PQQQQQ
MM+ 9::;; /4!Q  QI---->9-/M/MNNNNN
MM(9;;<< 0D1a&!!aY....>9-/N/NOOOOO
MM))==>>>>>>9-/Q/QRRRRR
MM,>9-/P/PQQQQQ)::;;;;;
MM*	VB	W&	'	'B8888499R"W;M;MM88888r   c                     g } t          t          d           sJ |                     d           t          d           J t          t          d           sJ |                     d           t	          d           J t          t          d           sJ |                     d           t          t          d           sJ |                     d           t          t          d	           sJ |                     d
           t          d           J |                     d           t          t          d           sJ t          t          d           sJ |                     d            t          t
          d           d          dk    sJ  t          t
          d           d          dk    sJ |                     d           t          t          d           sJ |                     d           t          dd           J |                     d           t          dd           J |                     d             t          d           d           d           dk    sJ |                     d           t          t
          d           J t          t          d           sJ |                     d           t          d d            t          t          d            |                     d           t          |           }t          t          j        j                  }||k    s#J dd                    ||z
            z              d S ) Nc                  0     t          d                       S r	   )
complementr   r   r   r"   z test_functoolz.<locals>.<lambda>r   s    %5Z%5%5%7%7 r   ro   c                  2     t          d d                       S r	   )composer   r   r   r"   z test_functoolz.<locals>.<lambda>v   s    %8WT4%8%8%:%: r   rq   c                  2     t          d d                       S r	   )compose_leftr   r   r   r"   z test_functoolz.<locals>.<lambda>z   s    %=\$%=%=%?%? r   rs   c                       t          d           S r	   )curryr   r   r   r"   z test_functoolz.<locals>.<lambda>}   r<   r   ru   c                  "    t          d d          S r$   )dor   r   r   r"   z test_functoolz.<locals>.<lambda>   s    Ra[[ r   rw   r1   c                       t          d           S r	   )juxtr   r   r   r"   z test_functoolz.<locals>.<lambda>       T$ZZ r   c                  L    t           t          d d                                 S r	   )listry   r   r   r   r"   z test_functoolz.<locals>.<lambda>   s!    T*:$tT*:*:*<*<%=%= r   ry   keyr   )cachememoizec                  "    t          dd           S r$   )piper   r   r   r"   z test_functoolz.<locals>.<lambda>       T!T]] r   r   thread_firstthread_lastc                 
    | |fS r	   r   )abs     r   r"   z test_functoolz.<locals>.<lambda>   s
    aV r   )NNflipc                       t          d           S r	   )applyr   r   r   r"   z test_functoolz.<locals>.<lambda>   r<   r   r   c                     | S r	   r   )xs    r   r"   z test_functoolz.<locals>.<lambda>   s    A r   exceptsr^   r_   )r   r`   rb   rq   rs   r1   r   r   r   r   r   r   rc   rd   	functoolzrf   rg   rh   s      r   test_functoolzr   p   sV   F)7788888
MM,4==   )::;;;;;
MM)%%%)??@@@@@
MM.!!!)0011111
MM')0011111
MM$D>>!!!
MM*)//00000)==>>>>>
MM&&78&&&q))Q....(784(((++q0000
MM))2233333
MM&4  (((
MM.!!!q$'''
MM-   *$4##$$T**400L@@@@
MM&4  ((()0011111
MM'D++It
MM)	VB	W&	'	'B8888499R"W;M;MM88888r   c                     g } t          t          d           sJ t          t          d           sJ |                     d           t          t          d           sJ t          t          d           sJ |                     d           t          t          d           sJ |                     d           t          t          d	           sJ |                     d
           t          t          d           sJ |                     d           t          t          d           s't          t	          d ddg                    ddgk    sJ t          t          d           sJ |                     d           t          t          d           sJ |                     d           t          t          d           sJ |                     d           t          t          d           sJ t          t          d           sJ |                     d           t          t          d           sJ t          t          d           sJ |                     d           t          t          d           sJ t          t          d           sJ t          t          d           sJ |                     d           t          t          d            sJ |                     d!           t          t          d"           sJ |                     d#           t          d           d$u sJ |                     d%           t          t          d&           sJ |                     d'           t          t          d(           sJ |                     d)           t          t          d*           s+t          t          d dgdgg                    dgdggk    sJ t          t          d+           sJ t          t          d,           sJ |                     d-           t          t          d.           sJ |                     d/           t          t          d0           sJ t          t          d1           sJ |                     d2           t          t          d3           sJ t          t          d4           sJ |                     d5           t          t          d6           sJ t          t          d7           sJ |                     d8           t          t          d9           sJ t          t          d:           sJ t          t          d;           sJ |                     d<           t          t          d=           sJ t          t          d>           sJ t          t          d?           sJ |                     d@           t          t          dA           sJ t          t          dB           sJ |                     dC           t          t          dD           sJ |                     dE           t          t          dF           s%t          t          d g dG                    g k    sJ t          t          dH           sJ |                     dI           t          t          dJ           s't          t          d ddg                    ddgk    sJ t          t          dK           sJ |                     dL           t          t          dM           s't          t          d ddg                    ddgk    sJ t          t          dN           sJ |                     dO           t          t          dP           s't          t          d ddg                    ddgk    sJ t          t          dQ           sJ |                     dR           t          t          dS           sJ t          t          g dTd U                    ddgk    sJ |                     dV           t          t          dW           sJ t          t          dX           sJ |                     dY           t          t          dZ           sJ t          t          d[           sJ |                     d\           t          t          d]           sJ t          t          d^           sJ t          t          d_           sJ t          t          d`           sJ |                     da           t          t          db           sJ |                     dc           t          t          dd           sJ t          t          de           sJ |                     df           t          t          dg           sJ t          t          dh           sJ |                     di           t          |           }t          t          j        j                  }||k    s#J djdk                    ||z
            z              d S )lNc                  @    t          t          d ddg                    S r   )r|   
accumulater   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*TAq6*B*B%C%C r   c                  F    t          t          t          d                     S r	   )r|   r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*Xt*D*D%E%E r   r   c                       t          d           S r	   )concatr   r   r   r"   z test_itertoolz.<locals>.<lambda>       VD\\ r   c                  <    t          t          d g                    S r	   )r|   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T&$..%9%9 r   r   c                  :    t          t          d                     S r	   )r|   concatvr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T'$--%8%8 r   r   c                  <    t          t          dd                     S r$   )r|   consr   r   r   r"   z test_itertoolz.<locals>.<lambda>       T$q$--%8%8 r   r   c                       t          d           S r	   )countr   r   r   r"   z test_itertoolz.<locals>.<lambda>   r<   r   r   c                  @    t          t          d ddg                    S r   r|   dropr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    d4q!f+=+=&>&> r   r   r    c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   r   r   r   c                       t          d           S r	   )firstr   r   r   r"   z test_itertoolz.<locals>.<lambda>   r<   r   r   c                       t          d           S r	   )frequenciesr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    [%6%6 r   r   c                  "    t          dd           S r$   getr   r   r   r"   z test_itertoolz.<locals>.<lambda>       SD\\ r   c                  &    t          ddgd           S r   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    S!Q%6%6 r   r   c                  &    t          d ddg          S r   )groupbyr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    WTAq6%:%: r   c                  ,    t          t          d           S r	   )r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>       WXt%<%< r   r   c                  :    t          t          d                     S r	   r|   
interleaver   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*T*:*:%;%; r   c                  >    t          t          d d g                    S r	   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*dD\*B*B%C%C r   c                  j    t          t          ddgt          t                    gd                     S )Nr   r    )pass_exceptions)r|   r   r   
ValueErrorr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s<    $zAq6<
3K3K*L:> @  @  @ A A r   r   c                  <    t          t          dd                     S r$   )r|   	interposer   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T)At*<*<%=%= r   r   c                       t          d           S r	   )
isdistinctr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    Z%5%5 r   r   F
isiterablec                  <    t          t          d d                    S r$   )r|   iterater   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T'$*:*:%;%; r   r   c                       t          d           S r	   )lastr   r   r   r"   z test_itertoolz.<locals>.<lambda>   rz   r   r   c                  D    t          t          d dgdgg                    S r   )r|   mapcatr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s     d6$!qc
+C+C&D&D r   c                  L    t          t          t          d dgg                    S )Nr    r|   r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T&D1#;*G*G%H%H r   c                  F    t          t          t          d                     S r	   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>       T&4*@*@%A%A r   r   c                  @    t          t          d ddg                    S r   )r|   merge_sortedr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T,taV*D*D%E%E r   r   c                  &    t          d ddg          S r   nthr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    S1v%6%6 r   c                  "    t          dd           S Nr   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   r   r   r   c                  &    t          d g d          S Nr   r    r?   	partitionr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    YtYYY%?%? r   c                  "    t          dd           S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    Yq$%7%7 r   r   c                  @    t          t          d g d                    S r   r|   partition_allr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T-iii*H*H%I%I r   c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T-4*@*@%A%A r   r   c                  D    t          t          d dgdgg                    S r   r|   pluckr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s     T%sQCj*A*A%B%B r   c                  B    t          t          dd dgg                    S )Nr   r    r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T%D1#;*?*?%@%@ r   c                  <    t          t          dd                     S r   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T%4..%9%9 r   r   c                  4    t          d t          g dd          S Nr   r   )reducebyr   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    XdCA%F%F r   c                  4    t          t          d g dd          S r   )r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    Xhiii%K%K r   c                  :    t          t          t          d d          S r   )r   r1   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    XhT1%E%E r   r   c                  @    t          t          d ddg                    S r   )r|   remover   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    T&1v*>*>%?%? r   c                  F    t          t          t          d                     S r	   )r|   r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  r   r   r   c                       t          d           S r	   )secondr   r   r   r"   z test_itertoolz.<locals>.<lambda>	  r   r   r   c                  @    t          t          d g d                    S r   r|   sliding_windowr   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    d>$			+J+J&K&K r   r   c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    T.D*A*A%B%B r   r   c                  L    t          t          d ddg                    ddgk    S r   r|   taker   r   r   r"   z test_itertoolz.<locals>.<lambda>  %    d4q!f+=+=&>&>1a&&H r   c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  r   r   r   c                  L    t          t          d ddg                    ddgk    S r   r|   tailr   r   r   r"   z test_itertoolz.<locals>.<lambda>  r   r   c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  r   r   r   c                  @    t          t          d ddg                    S r   r|   take_nthr   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    d8D1a&+A+A&B&B r   c                  <    t          t          dd                     S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>!  s    T(1d*;*;%<%< r   r   c                  :    t          t          d                     S r	   )r|   uniquer   r   r   r"   z test_itertoolz.<locals>.<lambda>$  s    T&,,%7%7 r   )r   r   r    r}   r   c                  :    t          t          d t          d          S r   rg   r   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>(  s    T%vy%I%I r   c                  :    t          t          dt          d           S r   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>)  s    T%FD%I%I r   rg   c                  &    t          d g d          S r   topkr   r   r   r"   z test_itertoolz.<locals>.<lambda>,  s    T$			%:%: r   c                  "    t          dd           S r]   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>-  r   r   r   c                  @    t          t          d g d                    S r   r|   diffr   r   r   r"   z test_itertoolz.<locals>.<lambda>0  s    T$tYYY*?*?%@%@ r   c                  :    t          t          d                     S r	   r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>1  s    T$t**%5%5 r   c                  <    t          t          d g                    S r	   r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>2  s    T$v,,%7%7 r   c                  >    t          t          d d g                    S r	   r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>3  s    T$d|*<*<%=%= r   r  c                       t          d           S r	   )peekr   r   r   r"   z test_itertoolz.<locals>.<lambda>6  rz   r   r  c                  &    t          d g d          S r   peeknr   r   r   r"   z test_itertoolz.<locals>.<lambda>9  s    U4%;%; r   c                  "    t          dd           S r]   r
  r   r   r   r"   z test_itertoolz.<locals>.<lambda>:  s    U1d^^ r   r  c                  >    t          t          d dg                    S r$   r|   random_sampler   r   r   r"   z test_itertoolz.<locals>.<lambda>=  s    T-qc*B*B%C%C r   c                  <    t          t          dd                     S )Ng?r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>>  s    T-T*B*B%C%C r   r  r^   r_   )r   r`   rb   r|   r   r   r   r   r   r   r   r   rc   rd   	itertoolzrf   rg   rh   s      r   test_itertoolzr     s
   F)CCDDDDD)EEFFFFF
MM,)1122222)99:::::
MM()8899999
MM))8899999
MM&)0011111
MM' 9>>?? 0dQF##$$A....)8899999
MM&)0011111
MM')6677777
MM-   )1122222)6677777
MM%)::;;;;;)<<=====
MM));;<<<<<)CCDDDDD)A AB B B B B MM,)==>>>>>
MM+)5566666
MM,du$$$$
MM,);;<<<<<
MM))//00000
MM& 9DDEE :sQCj))**sQCj8888)HHIIIII)AABBBBB
MM()EEFFFFF
MM.!!!)6677777)1122222
MM%)??@@@@@)7788888
MM+)IIJJJJJ)AABBBBB
MM/""")BBCCCCC)@@AAAAA)99:::::
MM')FFGGGGG)KKLLLLL)EEFFFFF
MM*)??@@@@@)AABBBBB
MM()1122222
MM( 9KKLL 9iii0011R7777)BBCCCCC
MM"### 9HHII 0dQF##$$A....)8899999
MM& 9HHII 0dQF##$$A....)8899999
MM& 9BBCC 4$A''((QF2222)<<=====
MM*)7788888yyyd+++,,A6666
MM()IIJJJJJ)IIJJJJJ
MM&)::;;;;;)2233333
MM&)@@AAAAA)5566666)7788888)==>>>>>
MM&)//00000
MM&);;<<<<<)3344444
MM')CCDDDDD)CCDDDDD
MM/"""	VB	W&	'	'B8888499R"W;M;MM88888r   c                  F   g } t          t          d           st          d ddg          dddk    sJ t          t          d           sJ |                     d           t          t          d           s't	          t          d ddg                    dd	gk    sJ t          t          d
           sJ |                     d           t          |           }t          t          j        j	                  }||k    s#J dd
                    ||z
            z              d S )Nc                  &    t          d ddg          S r   )countbyr   r   r   r"   ztest_recipes.<locals>.<lambda>I  rT   r   r   r    )r6   rP   c                  ,    t          t          d           S r	   )r  r1   r   r   r   r"   ztest_recipes.<locals>.<lambda>K  r   r   r  c                  @    t          t          d ddg                    S r   )r|   partitionbyr   r   r   r"   ztest_recipes.<locals>.<lambda>O  s    d;taV+D+D&E&E r   r6   rP   c                  F    t          t          t          d                     S r	   )r|   r  r1   r   r   r   r"   ztest_recipes.<locals>.<lambda>Q  s    T+h*E*E%F%F r   r  r^   r_   )r   r`   r  rb   r|   r  rc   rd   recipesrf   rg   rh   s      r   test_recipesr  F  s)   F9;;<< 9D1a&!!AQ%7%77777)<<=====
MM) 9EEFF =TAq6**++d|;;;;)FFGGGGG
MM-   	VB	W_$	%	%B8888499R"W;M;MM88888r   )__doc__rd   cytoolz.utilsr   operatorr   objectr   rl   r   r  r  r   r   r   <module>r      s    (                           6   DN DN DNN4N 4N 4Nn\N \N \N~N N N N Nr   