
    'i/                     ^    d Z ddlZddl ddlmZ ddlmZ  G d d      Zd Zd	 Zd
 Z	d Z
y)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y)GenExceptionc                     || _         y Nexc)selfr   s     M/var/www/br/venv/lib/python3.12/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__"       hh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      s    r   r   c                     g } t        t        t        fd       sJ | j                  d       t        t        t        fd       sJ | 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 | j                  d
       t        t        d       sJ t        t        t        fd       sJ | j                  d       t        t        d       st        d ddi      ddik(  sJ t        t        t        fd       sJ | j                  d       t        t        d       sJ t        t        t        fd       sJ | j                  d       t        t        d       sJ t        t        d       sJ t        t        t        fd       sJ | j                  d       t        t        d       sJ t        t        d       sJ t        t        t        fd       sJ | j                  d       t        t        d       sJ t        t        t        fd       sJ | j                  d        t        t        d!       st        d ddi      dd"ik(  sJ t        t        t        fd#       sJ | j                  d$       t        t        d%       st        d ddi      dd"ik(  sJ t        t        t        fd&       sJ | j                  d'       t        t        d(       sJ t        t        t        fd)       sJ | j                  d*       t        t        t        fd+       sJ t        t        d,       sJ | j                  d-       t        |       }t        t        j                  j                        }||k(  sJ d.d/j                  ||z
        z         y )0Nc                      t        d dd      S N      )assocr   r   r   <lambda>z test_dicttoolz.<locals>.<lambda>+   s    uT1a7H 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 r   c                      t        d i d      S )NT
no_defaultr'   r   r   r   r"   z test_dicttoolz.<locals>.<lambda>5   s    VD"%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 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47P 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7M 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    uT47H 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 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                  (    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 r   c                  ,    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 r   c                  (    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7N 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(D7Q 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!fa7P 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   )   sz   F9n-/HIII
MM'9n-/FGGG
MM( 9674$& % )FGGG1a&$''')JKKK
MM()<===>9-/PQQQ
MM+ 9:;4!Q T1I-/ .>9-/MNNN
MM()01119n-/HIII
MM')EFFF)?@@@9n-:< < <
MM,)IJJJ)KLLL9n-<> > >
MM+)<===>9-/PQQQ
MM+ 9:;4!Q QI-/ .>9-/MNNN
MM(9;<D1a&!aY.0 />9-/NOOO
MM))=>>>>9-/QRRR
MM,>9-/PQQQ):;;;
MM*	VB	W&&	'B8M8499R"W;MMM8r   c                  f   g } t        t        d       sJ | j                  d       t        d       J t        t        d       sJ | j                  d       t	        d       J t        t        d       sJ | j                  d       t        t        d       sJ | j                  d       t        t        d	       sJ | j                  d
       t        d       J | j                  d       t        t        d       sJ t        t        d       sJ | j                  d        t        t
        d       d      dk(  sJ  t        t
        d       d      dk(  sJ | j                  d       t        t        d       sJ | j                  d       t        dd       J | j                  d       t        dd       J | j                  d         t        d       d       d       dk(  sJ | j                  d       t        t
        d       J t        t        d       sJ | j                  d       t        d d        t        t        d        | j                  d       t        |       }t        t        j                  j                        }||k(  sJ ddj!                  ||z
        z         y ) Nc                  "     t        d              S r	   )
complementr   r   r   r"   z test_functoolz.<locals>.<lambda>r   s    %5Z%5%7 r   ro   c                  $     t        d d              S r	   )composer   r   r   r"   z test_functoolz.<locals>.<lambda>v   s    %8WT4%8%: r   rq   c                  $     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$Z r   c                  6    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   sd   F)7888
MM,4=   ):;;;
MM)%%%)?@@@
MM.!)0111
MM')0111
MM$D>!!!
MM*)/000)=>>>
MM&&78&q)Q...(784(+q000
MM))2333
MM&4 (((
MM.!q$'''
MM- *$4#$T*40L@@@
MM&4 ((()0111
MM'D+It
MM)	VB	W&&	'B8M8499R"W;MMM8r   c                  x   g } t        t        d       sJ t        t        d       sJ | j                  d       t        t        d       sJ t        t        d       sJ | j                  d       t        t        d       sJ | j                  d       t        t        d	       sJ | j                  d
       t        t        d       sJ | j                  d       t        t        d       st        t	        d ddg            ddgk(  sJ t        t        d       sJ | j                  d       t        t        d       sJ | j                  d       t        t        d       sJ | j                  d       t        t        d       sJ t        t        d       sJ | j                  d       t        t        d       sJ t        t        d       sJ | j                  d       t        t        d       sJ t        t        d       sJ t        t        d       sJ | j                  d       t        t        d        sJ | j                  d!       t        t        d"       sJ | j                  d#       t        d       d$u sJ | j                  d%       t        t        d&       sJ | j                  d'       t        t        d(       sJ | 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 | j                  d-       t        t        d.       sJ | j                  d/       t        t        d0       sJ t        t        d1       sJ | j                  d2       t        t        d3       sJ t        t        d4       sJ | j                  d5       t        t        d6       sJ t        t        d7       sJ | j                  d8       t        t        d9       sJ t        t        d:       sJ t        t        d;       sJ | j                  d<       t        t        d=       sJ t        t        d>       sJ t        t        d?       sJ | j                  d@       t        t        dA       sJ t        t        dB       sJ | j                  dC       t        t        dD       sJ | j                  dE       t        t        dF       st        t        d g dG            g k(  sJ t        t        dH       sJ | j                  dI       t        t        dJ       st        t        d ddg            ddgk(  sJ t        t        dK       sJ | j                  dL       t        t        dM       st        t        d ddg            ddgk(  sJ t        t        dN       sJ | j                  dO       t        t        dP       st        t        d ddg            ddgk(  sJ t        t        dQ       sJ | j                  dR       t        t        dS       sJ t        t        g dTd U            ddgk(  sJ | j                  dV       t        t        dW       sJ t        t        dX       sJ | j                  dY       t        t        dZ       sJ t        t        d[       sJ | j                  d\       t        t        d]       sJ t        t        d^       sJ t        t        d_       sJ t        t        d`       sJ | j                  da       t        t        db       sJ | j                  dc       t        t        dd       sJ t        t        de       sJ | j                  df       t        t        dg       sJ t        t        dh       sJ | j                  di       t        |       }t        t        j                  j                        }||k(  sJ djdkj!                  ||z
        z         y )lNc                  0    t        t        d ddg            S r   )r|   
accumulater   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*TAq6*B%C r   c                  4    t        t        t        d             S r	   )r|   r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T*Xt*D%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 r   r   c                  *    t        t        d             S r	   )r|   concatvr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T'$-%8 r   r   c                  ,    t        t        dd             S r$   )r|   consr   r   r   r"   z test_itertoolz.<locals>.<lambda>       T$q$-%8 r   r   c                      t        d       S r	   )countr   r   r   r"   z test_itertoolz.<locals>.<lambda>   r<   r   r   c                  0    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 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 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%C r   c                  P    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<
3K*L:> @ 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 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                  4    t        t        d dgdgg            S r   )r|   mapcatr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    d6$!qc
+C&D r   c                  :    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%H r   c                  4    t        t        t        d             S r	   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>       T&4*@%A r   r   c                  0    t        t        d ddg            S r   )r|   merge_sortedr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T,taV*D%E r   r   c                      t        d ddg      S r   nthr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    S1v%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    YtY%? r   c                      t        dd       S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    Yq$%7 r   r   c                  0    t        t        d g d            S r   r|   partition_allr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T-i*H%I r   c                  ,    t        t        dd             S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T-4*@%A r   r   c                  4    t        t        d dgdgg            S r   r|   pluckr   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    T%sQCj*A%B r   c                  2    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 r   r   c                  *    t        d t        g dd      S Nr   r   )reducebyr   r   r   r   r"   z test_itertoolz.<locals>.<lambda>   s    XdCA%F r   c                  *    t        t        d g dd      S r   )r   r1   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    Xhi%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 r   r   c                  0    t        t        d ddg            S r   )r|   remover   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    T&1v*>%? r   c                  4    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                  0    t        t        d g d            S r   r|   sliding_windowr   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    d>$	+J&K r   r   c                  ,    t        t        dd             S r$   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    T.D*A%B r   r   c                  :    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                  :    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                  0    t        t        d ddg            S r   r|   take_nthr   r   r   r"   z test_itertoolz.<locals>.<lambda>  s    d8D1a&+A&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 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 r   c                  .    t        t        dt        d       S r   r   r   r   r   r"   z test_itertoolz.<locals>.<lambda>)  s    T%FD%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                  0    t        t        d g d            S r   r|   diffr   r   r   r"   z test_itertoolz.<locals>.<lambda>0  s    T$tY*?%@ r   c                  *    t        t        d             S r	   r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>1  s    T$t*%5 r   c                  ,    t        t        d g            S r	   r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>2  s    T$v,%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%C r   c                  ,    t        t        dd             S )Ng?r  r   r   r   r"   z test_itertoolz.<locals>.<lambda>>  s    T-T*B%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     s7   F)CDDD)EFFF
MM,)1222)9:::
MM()8999
MM))8999
MM&)0111
MM' 9>?dQF#$A.0 / )8999
MM&)0111
MM')6777
MM- )1222)6777
MM%):;;;)<===
MM));<<<)CDDD)AB B B MM,)=>>>
MM+)5666
MM,du$$$
MM,);<<<
MM))/000
MM& 9DEsQCj)*sQCj8: 9)HIII)ABBB
MM()EFFF
MM.!)6777)1222
MM%)?@@@)7888
MM+)IJJJ)ABBB
MM/")BCCC)@AAA)9:::
MM')FGGG)KLLL)EFFF
MM*)?@@@)ABBB
MM()1222
MM( 9KLi01R79 8)BCCC
MM"# 9HIdQF#$A.0 /)8999
MM& 9HIdQF#$A.0 /)8999
MM& 9BC$A'(QF24 3)<===
MM*)7888yd+,A666
MM()IJJJ)IJJJ
MM&):;;;)2333
MM&)@AAA)5666)7888)=>>>
MM&)/000
MM&);<<<)3444
MM')CDDD)CDDD
MM/"	VB	W&&	'B8M8499R"W;MMM8r   c                     g } t        t        d       st        d ddg      dddk(  sJ t        t        d       sJ | j                  d       t        t        d       st	        t        d ddg            dd	gk(  sJ t        t        d
       sJ | j                  d       t        |       }t        t        j                  j                        }||k(  sJ ddj                  ||z
        z         y )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                  0    t        t        d ddg            S r   )r|   partitionbyr   r   r   r"   ztest_recipes.<locals>.<lambda>O  s    d;taV+D&E r   r6   rP   c                  4    t        t        t        d             S r	   )r|   r  r1   r   r   r   r"   ztest_recipes.<locals>.<lambda>Q  s    T+h*E%F r   r  r^   r_   )r   r`   r  rb   r|   r  rc   rd   recipesrf   rg   rh   s      r   test_recipesr  F  s    F9;<D1a&!AQ%779 8)<===
MM) 9EFTAq6*+d|;= <)FGGG
MM- 	VB	W__$$	%B8M8499R"W;MMM8r   )__doc__rd   cytoolz.utilsr   operatorr   r   rl   r   r  r  r   r   r   <module>r     s?   (      DNN4Nn\N~Nr   