
    bilO                        d dl Z d dl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 d dlmZmZmZ d dlmZ d dlmZ d Zd Zd Zd	 Z G d
 d      Z G d d      Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d  Z0d! Z1d" Z2d# Z3d$ Z4d% Z5d& Z6d' Z7d( Z8d) Z9d* Z:d+ Z;d, Z<d- Z=d. Z>d/ Z?d0 Z@d1 ZAd2 ZBd3 ZCd4 ZDd5 ZEy)6    N)thread_firstthread_lastmemoizecurrycomposecompose_leftpipe
complementdojuxtflipexceptsapply)addmul
itemgetter)raises)partialc                     | dz  dk(  S )N   r    xs    U/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/toolz/tests/test_functoolz.pyisevenr          q5A:    c                     | dz  dk(  S )Nr      r   r   s    r   isoddr       r   r   c                     | dz   S Nr   r   r   s    r   incr#          q5Lr   c                     d| z  S Nr   r   r   s    r   doubler'      r$   r   c                       e Zd ZdZd Zd Zy)AlwaysEquals=useful to test correct __eq__ implementation of other objectsc                      yNTr   selfothers     r   __eq__zAlwaysEquals.__eq__       r   c                      yNFr   r-   s     r   __ne__zAlwaysEquals.__ne__!       r   N__name__
__module____qualname____doc__r0   r4   r   r   r   r)   r)      s    Gr   r)   c                       e Zd ZdZd Zd Zy)NeverEqualsr*   c                      yr3   r   r-   s     r   r0   zNeverEquals.__eq__(   r5   r   c                      yr,   r   r-   s     r   r4   zNeverEquals.__ne__+   r1   r   Nr6   r   r   r   r<   r<   %   s    Gr   r<   c                      t        t        d      dk(  sJ t        t        t         t        t        t        gg d            dk(  sJ t        t        t               sJ y )N   
   )rA   i  i@  )   i  i>  )r   r'   tuplemapr#   r   	TypeErrorr   r   r   
test_applyrF   /   sK    r!!!UVS&1?CDHXXXX)U###r   c                      t        d      dk(  sJ t        dt              dk(  sJ t        dt        t              dk(  sJ t        dt        t              dk(  sJ t        dt        dft              dk(  sJ y )Nr         r@      )r   r#   r'   r   r   r   r   test_thread_firstrK   5   sr    ?a31$$$3$)))63'1,,,C8V,222r   c                     t        t        g dt        t        ft        t
        f            ddgk(  sJ t        t        g dt        t        ft        t        f            dgk(  sJ t        dt        dft              dk(  sJ y )Nr   r   rH   r   rI   rH   r@   rJ   )	listr   rD   r#   filterr   r    r   r'   r   r   r   test_thread_lastrP   =   sl    ISzFF3CDE!QOOOISzFE?CDKKKq3(F+r111r   c                      dgfd} t        |        dd       dd      u sJ dgk(  sJ j                  | j                  k(  sJ t        t        fd      sJ y )Nr   c                 (    dxx   dz  cc<   | |z   S ) A docstring r   r   r   )r   yfn_callss     r   fztest_memoize.<locals>.fF   s    q1ur   r   rH   r   c                        di       S r"   r   mfs   r   <lambda>ztest_memoize.<locals>.<lambda>O   s    R2Y r   )r   r:   r   rE   )rV   rU   rY   s    @@r   test_memoizer[   C   si    sH 
Ba8r!Qxs??::""").///r   c                      dg} dd}t        |      } |d       |d      k(  sJ  |dd       |dd      k(  sJ  |dd       |dd      k(  sJ  |dd       |dd      k(  sJ y )Nr   c                     | |z   S Nr   r   rT   s     r   rV   ztest_memoize_kwargs.<locals>.fU       1ur   r   r   rT   rH   r   r   )rU   rV   rY   s      r   test_memoize_kwargsrd   R   s{    sH 
Ba5AaD==a8qAwa1:1"""a1:1"""r   c                      t         dd       }  | d      }t        |      } |d       |d      k(  sJ  |d       |d      k(  sJ y )Nc                     | |z   S r^   r   r_   s     r   rV   ztest_memoize_curried.<locals>.fa       1ur   r   ra   rH   rb   )r   r   rV   f2fm2s      r   test_memoize_curriedrk   `   sP    
  
QB
"+Cq6RU??q6RU??r   c                      dd} t        | d      }t        |      } |d       |d      k(  sJ  |d       |d      k(  sJ y )Nc                     | |z   S r^   r   r_   s     r   rV   ztest_memoize_partial.<locals>.fm   r`   r   r   ra   rH   rb   )r   r   rh   s      r   test_memoize_partialrn   l   sE     
aB
"+Cq6RU??q6RU??r   c                      t        d ddi         d      du sJ   d      du sJ t        d ddd         d      du sJ   d      du sJ   dd      du sJ   dd      dk(  sJ   d	      du sJ t        d
 d	di         dd      du sJ   dd      du sJ t        t         fd      sJ t        d ddi                du sJ t        dddt        d      fdddi         dd      dk(  sJ   dd      dk(  sJ   dd      du sJ   dd      du sJ   d      du sJ   d	      du sJ t        ddd t        d      fdddi                du sJ   d      dk(  sJ   d      dk(  sJ y )Nc                      yr3   r   r   s    r   rZ   z,test_memoize_key_signature.<locals>.<lambda>y       r   r   Tcacher   Fc                      yr3   r   )r   argss     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>~   rq   r   )r   r   r   rw   c                      yr3   r   r_   s     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   rq   r   rH   c                        d      S )Nrw   r   rX   s   r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   s    RZ r   c                       yr3   r   r   r   r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   rq   r   r   c                      yr3   r   r_   s     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   rq   r   rv   ))rT   r   )rw   Nra   c                      yr3   r   r   s    r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   rq   r   ))r   r   )rv   Nr   rb   )r   r   rE   	frozensetrX   s   @r   test_memoize_key_signaturer~   w   s   	D		2Ba5D==a5E>> 
'dA/F	GBa5D==a5E>>a8ua8q==f: 
#FD>	:Ba8ta8u)/000 
r4j	1B44<< 
%y56&+
,B a1:??a8q==a1:a8ua5E>>f: 
"D)K2H+I1+7+< 
=B45==7a<<a5A::r   c                  \    t        ddi      d        }  | d      du sJ  | d      du sJ y )Nr   Trr   c                      yr3   r   r   s    r   rV   z#test_memoize_curry_cache.<locals>.f   s    r   r   Frc   rV   s    r   test_memoize_curry_cacher      s?    At9  Q44<<Q45==r   c                  b    t        d       d        }  | dd      dk(  sJ  | dd      dk(  sJ y )Nc                     | d   S Nr   r   )ru   kwargss     r   rZ   z"test_memoize_key.<locals>.<lambda>   s
    d1g r   )keyc                     | |z   S r^   r   )r   rT   ru   r   s       r   rV   ztest_memoize_key.<locals>.f   rg   r   r   r   rH   rc   r   s    r   test_memoize_keyr      s@    -. / Q7a<<Q7a<<r   c                  @    d } t        |       }|j                  | u sJ y )Nc                       y)z
        Docstring
        Nr   r   r   r   fooz!test_memoize_wrapped.<locals>.foo   s     	r   )r   __wrapped__)r   memoized_foos     r   test_memoize_wrappedr      s&    
 3<L##s***r   c                  R   t        t              }  | d      }t        |      sJ  |d      dk(  sJ t        |       t        t              k(  sJ t        t              }t          |t              g d            g dk(  sJ t        t        d       sJ t        t        d       sJ y )Nr   rA   rB   rM   )r   rH   rI   c                      t               S r^   r   r   r   r   rZ   z#test_curry_simple.<locals>.<lambda>   s    UW r   c                      t        ddi      S Nr   r   r   r   r   r   rZ   z#test_curry_simple.<locals>.<lambda>   s    UAq6] r   )	r   r   callablereprrD   rN   r#   r   rE   )cmulr'   cmaps      r   test_curry_simpler      s    :D!WFF"::c""":D	S	)$%222)_---)2333r   c                  f   dd} t        |       }  | ddd      dk(  sJ   | d      dd      dk(  sJ  | dd      dk(  sJ   | dd      d      dk(  sJ   | d      dd      dk(  sJ dd	}t        |d
              dk(  sJ  d
      dk(  sJ  d      dk(  sJ  dd      dk(  sJ  d      dk(  sJ t        t        fd      sJ t        fd} t        |      d      dk(  sJ   t        |      t              d      dk(  sJ  t        |t              d      dk(  sJ y )Nc                     | |z   |z  S r^   r   abcs      r   rV   ztest_curry_kwargs.<locals>.f       A{r   r   r   rH   	      r   r   c                     | |z   |z   S r^   r   r   s      r   gztest_curry_kwargs.<locals>.g       1uqyr   )r   rI   r   r   r   c                        dd      S r   r   )cgs   r   rZ   z#test_curry_kwargs.<locals>.<lambda>   s    R1X r   c                      ||       S r^   r   )r   funcs     r   hztest_curry_kwargs.<locals>.h   s    Awr   g        )r   z0.0rA   )r   rA   r   )r   r   rE   intstr)rV   r   r   r   s      @r   test_curry_kwargsr      sX    	aAQ1:??1Q41:??Q7b==1Q!9Q<11q6!Q<1 
qAB41997a<<7a<<Q<1a5A::)-...  58C=A858c"e+++5c"e+++r   c                       t         d           dd      dk(  sJ t        t         fd      sJ t        t         fd      sJ t        t         fd      sJ y )Nc                 @    t        | t              s
t               | |z   S r^   )
isinstancer   rE   r   s     r   rV   z#test_curry_passes_errors.<locals>.f   s    !S!+1ur   r   r   rH   c                        dd      S N1r   r   r   s   r   rZ   z*test_curry_passes_errors.<locals>.<lambda>   s    QsAY r   c                          d      d      S r   r   r   s   r   rZ   z*test_curry_passes_errors.<locals>.<lambda>   s    VQsVAY r   c                        ddd      S )Nr   r   rH   r   r   s   r   rZ   z*test_curry_passes_errors.<locals>.<lambda>   s    Qq!QZ r   r   r   rE   r   s   @r   test_curry_passes_errorsr      s\    
 
 Q7a<<).///).///)/000r   c                      d } t        |       }|j                  | j                  k(  sJ t        |      t        |       k(  sJ  | dd       |dd      k(  sJ y )Nc                     | S )rS   r   r_   s     r   rV   ztest_curry_docstring.<locals>.f   s    r   r   r   )r   r:   r   )rV   r   s     r   test_curry_docstringr      sX     	aA99		!!!q6SVQ7a1gr   c                     dd} t        | dd       t        |       dd      }}|j                  |j                  k(  sJ |j                  |j                  k(  sJ  |d       |d      k(  sJ t        | d       t        |       d      }}|j                  |j                  k(  sJ |j                  |j                  k(  sJ  |d       |d      k(  sJ  |dd       |dd      k(  sJ t        | d       t        |       d      }}|j                  |j                  k(  sJ |j                  |j                  k(  sJ  |dd       |dd      k(  sJ y )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z'test_curry_is_like_partial.<locals>.foo  r   r   r   r   rH   rv   )r   r   keywordsru   )r   pr   s      r   test_curry_is_like_partialr     s;    3QsA!3qA::###66QVVQ41Q4<<3?JE#JqMqA::###66QVVQ41Q4<<Q!9!q	!!!3!jeCj1oqA::###66QVVQ7a1gr   c                     dd} t        | dd      }t        |      }t        |t               sJ t        |t               sJ t        |j                  t               rJ t        |j                  d      rJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j
                  |j
                  k(  sJ y )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z%test_curry_is_idempotent.<locals>.foo  r   r   r   r   r   rv   )r   r   r   hasattrru   r   )r   rV   r   s      r   test_curry_is_idempotentr     s     	c1AaAaa!&&%(((qvvv&&&66QVV66QVV::###r   c                  &   dd} t        | dd      t        t        fd      sJ t        t        fd      sJ t        t        fd      sJ t        t        fd      sJ t        t        fd	      sJ t        t        fd
      sJ y )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z+test_curry_attributes_readonly.<locals>.foo*  r   r   r   r   c                      t         dd      S )Nru   )r   setattrr   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>.  s    '!VT*B r   c                  "    t         dddi      S )Nr   r   rH   r   r   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>/  s    '!Z#q*J r   c                      t         d       S Nr   r   r   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>0  s    '!VQ*? r   c                      t         d      S )Nru   delattrr   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>1      '!V*< r   c                      t         d      S )Nr   r   r   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>2  s    '!Z*@ r   c                      t         d      S r   r   r   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>3  r   r   rv   )r   r   AttributeErrorr   rV   s    @r   test_curry_attributes_readonlyr   )  s~     	c1A."BCCC."JKKK."?@@@."<===."@AAA."<===r   c                  h   dd} d| _         t        | dd      }|j                   dk(  sJ d|_        d|_        d|_        d	|_         |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                   d	k(  sJ t        |d
      r|j                  |j                  k(  sJ y y )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z+test_curry_attributes_writable.<locals>.foo7  r   r   zthis.is.foor   r   newnamenewdoc	newmodulenewqualname	func_namerv   )r9   r   r7   r:   r8   r   r   r   s     r   test_curry_attributes_writabler   6  s    $Cc1A>>]***AJAIAL"AN::"""99   <<;&&&>>]***q+zzQ[[((( r   c                  2    ddl m}  | j                  dk(  sJ y )Nr   mergeztoolz.curried.exceptions)toolz.curried.exceptionsr   r8   r   s    r   test_curry_moduler   H  s    .9999r   c            	        	
 d	d} t        | dd      }t        | dd      }t        | dd      }t        | d      } |d      } |       }||k(  sJ ||k7  rJ ||k7  sJ ||k(  rJ ||k7  sJ ||k(  sJ ||k(  sJ d	d}t        |dd      }||k7  sJ ||||||| |       h||||hk(  sJ t        | g       	t        t        	fd      sJ t        | g       
t        t        
fd      sJ y )
Nr   c                     | |z   |z   S r^   r   r   s      r   r   z"test_curry_comparable.<locals>.fooN  r   r   r   r   rH   c                     | |z   |z   S r^   r   r   s      r   barz"test_curry_comparable.<locals>.bar_  r   r   c                      t               S r^   hash)unhash1s   r   rZ   z'test_curry_comparable.<locals>.<lambda>h      T'] r   c                      t               S r^   r   )unhash2s   r   rZ   z'test_curry_comparable.<locals>.<lambda>j  r   r   rv   r   )r   f1ri   g1h1h2h3r   b1r   r   s            @@r   test_curry_comparabler   M  s   	sA	B	sA	B	sA	B	saB	aB	B8O8b>8O8b>8O88O88O8	sA	B8O8BBB-"b"b1AAAA CnG)2333C2G)2333r   c                  t    dd} t        |       }    |d      d      d      d       | dd      k(  sJ y )Nc                     | |z   S r^   r   r_   s     r   rV   z*test_curry_doesnot_transmogrify.<locals>.fq  r`   r   r   ra   r   rH   rb   r   )rV   cfs     r   test_curry_doesnot_transmogrifyr   m  s>     
qB<727Q<!Q1Q7***r   c                  
    G d d      }  | d      }|j                  dd      dk(  sJ  |j                  d      d      dk(  sJ | j                  |dd      dk(  sJ   | j                  |      d      d      dk(  sJ |j                  dd      dk(  sJ  |j                  d      d      dk(  sJ | j                  dd      dk(  sJ  | j                  d      d      dk(  sJ |j                  dd      dk(  sJ  |j                  d      d      dk(  sJ | j                  dd      dk(  sJ  | j                  d      d      dk(  sJ t        |j                   t              sJ t        | j                   t              sJ y )	Nc                   Z    e Zd ZdZd Zed        Zeed               Ze	ed               Z
y)%test_curry_on_classmethods.<locals>.ArA   c                     || _         y r^   BASEr.   bases     r   __init__z.test_curry_on_classmethods.<locals>.A.__init__|  	    DIr   c                 &    | j                   |z   |z   S r^   r   r.   r   rT   s      r   	addmethodz/test_curry_on_classmethods.<locals>.A.addmethod      99q=1$$r   c                 &    | j                   |z   |z   S r^   r   clsr   rT   s      r   addclassz.test_curry_on_classmethods.<locals>.A.addclass       88a<!##r   c                     | |z   S r^   r   r_   s     r   	addstaticz/test_curry_on_classmethods.<locals>.A.addstatic       q5Lr   N)r7   r8   r9   r  r  r   r  classmethodr  staticmethodr  r   r   r   Ar   y  sX    	 
	% 
	% 
		$ 
 
	$ 
		 
 
	r   r  d   rH   rI   k         )r  r  r  r   r   r  r   s     r   test_curry_on_classmethodsr  x  s    ( 	
#A;;q!###1;;q>!###;;q!Q3&&&>1;;q>!Q3&&&::ar!!!1::a=r!!!::ar!!!1::a=r!!!;;q!!!!1;;q>!!!!;;q!!!!1;;q>!!!! akk5)))akk5)))r   c                  .    G d d      }  | d      }|j                  dd      dk(  sJ | j                  |dd      dk(  sJ d|_        |j                  dd      dk(  sJ d|_        |j                  dd      dk(  sJ |j                  dd      d	k(  sJ | j                  dd      d	k(  sJ d
| _        | j                  dd      d	k(  sJ d
| _        | j                  dd      d	k(  sJ |j	                  dd      dk(  sJ | j	                  dd      dk(  sJ y )Nc                   d    e Zd ZdZdZd Zed        Zeed               Z	e
ed               Zd Zy)'test_memoize_on_classmethods.<locals>.ArA   c                     || _         y r^   r   r  s     r   r  z0test_memoize_on_classmethods.<locals>.A.__init__  r  r   c                 &    | j                   |z   |z   S r^   r   r  s      r   r  z1test_memoize_on_classmethods.<locals>.A.addmethod  r	  r   c                 &    | j                   |z   |z   S r^   r   r  s      r   r  z0test_memoize_on_classmethods.<locals>.A.addclass  r  r   c                     | |z   S r^   r   r_   s     r   r  z1test_memoize_on_classmethods.<locals>.A.addstatic  r  r   c                     | j                   S r^   )HASHr.   s    r   __hash__z0test_memoize_on_classmethods.<locals>.A.__hash__  s    99r   N)r7   r8   r9   r  r#  r  r   r  r  r  r  r  r%  r   r   r   r  r    sb    	 
	% 
	% 
		$ 
 
	$ 
		 
 
		r   r  r  rH   rI   r        r  rB   r  )r  r  r#  r  r  r  s     r   test_memoize_on_classmethodsr(    s/    0 	
#A;;q!###;;q!Q3&&&AF;;q!###AF;;q!###::ar!!!::ar!!!AF::ar!!!AF::ar!!!;;q!!!!;;q!!!!r   c                       t         d         t        t         fd      sJ    d      d        j                  dd      k(  sJ    d      d        d      j                  d      k(  sJ y )Nc                     | |z   S r^   r   r_   s     r   r   ztest_curry_call.<locals>.add  rg   r   c                  (      j                   d      S r"   )callr   s   r   rZ   z!test_curry_call.<locals>.<lambda>  s    XSXXa[ r   r   r   )r   r   rE   r,  r-  s   @r   test_curry_callr.    sn    
 )01113q6!9A&&&3q6!9AA&&&r   c                     t         dd       }  |         | dd      k(  sJ   | j                  d      d       | dd      k(  sJ   | j                  d      j                  d              | dd      k(  sJ   | j                  d      d       | dd      k(  sJ   | j                  d      j                  d              | dd      k(  sJ y )	Nr   r   c                     | |z   S r^   r   r_   s     r   r   ztest_curry_bind.<locals>.add  rg   r   rA   rB   r   ra   rw   )r   bindr-  s    r   test_curry_bindr2    s    
 5C1I8388B<s2r{*** 8388B<R "c"bk1118388b>B3r2;...$8388b>$&#b"+555r   c                     d t         fd       }     |        d      d      d      dk(  sJ    | d      d      d      dk(  sJ   | dd      d      dk(  sJ  | ddd      dk(  sJ   | dd      dd       | dddd      k(  sJ y )Nc                     | |z   |z   S r^   r   )r   rT   zs      r   add3z%test_curry_unknown_args.<locals>.add3  r   r   c                       |  S r^   r   )ru   r6  s    r   rV   z"test_curry_unknown_args.<locals>.f  s    T{r   r   r   rH      rI   r   )rV   r6  s    @r   test_curry_unknown_argsr9    s       6313q6!9Q<141Q471:??1Q71:??Q1:??1Q71a=AaAqM)))r   c                  *    t        t        d       sJ y )Nc                      t        d      S r"   r   r   r   r   rZ   z&test_curry_bad_types.<locals>.<lambda>  s
    U1X r   )r   rE   r   r   r   test_curry_bad_typesr<    s    )-...r   c                       G d dt               }  | d       }t        |t               sJ t        ||       sJ t         |d      |       sJ t          |       d      |       sJ   |d      d      dk(  sJ y )Nc                       e Zd Zy)(test_curry_subclassable.<locals>.mycurryN)r7   r8   r9   r   r   r   mycurryr?    s    r   r@  c                     | |z   S r^   r   r_   s     r   rZ   z)test_curry_subclassable.<locals>.<lambda>  s
    qs r   r   r   rH   )r   r   )r@  r   s     r   test_curry_subclassablerB    s    %  "
#Cc5!!!c7###c!fg&&&eceAh(((3q6!9>>
r   c            	          dd} ddi dft         fdi dft        t         fdi dft        t        t         t        fdi dft        t        fd	i d
ft        t         | fd	ddidffS )zM
    Generate test cases for parametrized tests of the compose function.
    c                     | |z   |z  S r^   r   r   s      r   add_then_multiplyz6generate_compose_test_cases.<locals>.add_then_multiply  r   r   r   rb   r   r   r   )rH   Falserw   3r   rH   10r   )r#   r'   r   r   r   )rE  s    r   generate_compose_test_casesrI    s    

 "	
 F"	
 SM"	
 &#v&"	
 #JB	
 #()S!H	
5 r   c                  R    t               D ]  \  } }}} t        |  |i ||k(  rJ  y r^   )rI  r   )compose_argsru   kwexpecteds       r   test_composerN  9  s<    .I.K ?*tR%w%t2r2h>>>?r   c                     d } d }t        | |      j                  dk(  sJ j                  dk(  sJ t               }t        | |      j                  dk(  sJ j                  dk(  sJ t	              d| d|d	k(  sJ t        | |      k(  sJ t               k(  sJ t        ||       k(  rJ t               k(  rJ t               k(  rJ t        ||       k7  sJ t               k7  sJ t               k7  sJ t        | |      k7  rJ t               k7  rJ t              t        t        | |            k(  sJ t              t        t        ||             k7  sJ t        t        d
 d!d       G fdd      }|j                  d      dk(  sJ |j                  dd      dk(  sJ |j                  d      dk(  sJ  |       j                         dk(  sJ  |       j                  d      dk(  sJ  |       j                  d      dk(  sJ  |       j                  dd      dk(  sJ t        | |      j                  |u sJ t        t        d      r"t        | |      j                  j                  J d }d }t        t        t         t        t"        t        d|_        t        t        d|_        t        ||      t'        j(                        }|j*                  t'        j(                  |      j*                  k(  sJ |j,                  t        k(  sJ  G fdd      }t/        t'        j(                   |       j0                        j*                        d k(  sJ y )"Nc                     | S r^   r   r   s    r   rV   z test_compose_metadata.<locals>.fA      r   c                     | S r^   r   r   s    r   r   z test_compose_metadata.<locals>.gD  rQ  r   f_of_gz-lambda *args, **kwargs: f(g(*args, **kwargs))ComposezA composition of functionszCompose(z, )c                     | dz  S r&   r   r   s    r   rZ   z'test_compose_metadata.<locals>.<lambda>c  s
    ac r   r   c                     t        |       |z   S r^   )r   r_   s     r   rZ   z'test_compose_metadata.<locals>.<lambda>c  s    #a&1* r   c                   ,    e Zd Zd ZW  Z eW        Zy)&test_compose_metadata.<locals>.MyClassc                      y)N   r   r$  s    r   __int__z.test_compose_metadata.<locals>.MyClass.__int__g  s    r   N)r7   r8   r9   r\  	my_methodr  my_static_method)bindables   r   MyClassrY  e  s    	 	'1r   r`  rH   6r   ra   rH  416220r   2sandboxc                      y)NrI   r   )r   r   r   des        r   myfuncz%test_compose_metadata.<locals>.myfunc{  s    r   c                     d|  S )Nzresult: r   r   s    r   	otherfuncz(test_compose_metadata.<locals>.otherfunc~  s    !~r   )r   r   r   ri  rj  return)rV   rn  c                       e Zd ZW  Zy)rY  N)r7   r8   r9   method)composeds   r   r`  z&test_compose_metadata.<locals>.MyClass  s    r   rI   rb   )r   r7   r:   objectr   r)   r<   r   r   r]  r^  r   r   toolz	__class__r   floatbool__annotations__inspect	signature
parametersreturn_annotationlenrp  )	rV   r   r   r`  rk  rm  sigr_  rq  s	          @@r   test_compose_metadatar~  >  si    q!}H(((NNNN 	Aq!}H	)));;;;>xuBqe15555wq!}$$$|~%%%71a=(((68###;=(((wq!}$$${}$$$vx71a=(((<>)))>T'!Q-0000>T'!Q-0000sM+DEH2 2 Q3&&&Q!$,,,##A&#---9 D(((9#t+++9%%a(C///9%%a+s2221a=$$)))ui q!}&&22:::
 F '*S 9Iy&)H


H
%C>>W..v6AAAAA  C'''  w  !1!12==>!CCCr   c                  6    t        d t               D              S )z
    Generate test cases for parametrized tests of the compose function.

    These are based on, and equivalent to, those produced by
    enerate_compose_test_cases().
    c              3   V   K   | ]!  \  }}}}t        t        |            |||f # y wr^   )rC   reversed).0rK  ru   r   rM  s        r   	<genexpr>z3generate_compose_left_test_cases.<locals>.<genexpr>  s3      2\4 
x%	&fh?s   '))rC   rI  r   r   r    generate_compose_left_test_casesr    s#       '(  r   c                  R    t               D ]  \  } }}} t        |  |i ||k(  rJ  y r^   )r  r   )compose_left_argsru   rL  rM  s       r   test_compose_leftr    s@    3S3U I/	D"h/|./<<HHHIr   c                      t        dt              dk(  sJ t        dt        t              dk(  sJ t        dt        t        t              du sJ y )Nr   r   rH   F)r	   r#   r'   r   r   r   r   	test_piper    sF    3<13!!!63'5000r   c                      t        d              sJ  t        d              rJ  t        t              d      sJ  t        t              d      rJ  t        t        t                    d      sJ  t        t        t                    d      rJ d }  t        |       dd      sJ  t        |       dd      rJ  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              rJ y )Nc                       yr3   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                       yr,   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   r   r   c                 2    t        |       xr t        |      S r^   )r   r   s     r   rZ   z!test_complement.<locals>.<lambda>  s    VAY46!9 r   c                       y)N r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                       yr   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                       y r^   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                      g S r^   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    b r   c                       y)Nr   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                       yr"   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rq   r   c                      dgS r"   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    1# r   )r
   r   r    )	both_evens    r   test_complementr    sG   $:m$&&&'z,'))) :fa   !z&!!$$$):j()!,,,,z*U+,Q/// 5I :i A&&&$z)$Q*** ":j!### :i """#:l#%%%!:j!###&z+&((($z)$&&&&z+&((((r   c                  v    d } t        | d      dk(  sJ g }t        |j                  d      dk(  sJ |dgk(  sJ y )Nc                     | dz   S r"   r   r   s    r   rZ   ztest_do.<locals>.<lambda>  s
    AE r   r   )r   append)r#   logs     r   test_dor    sE    
Cc1:??
Ccjj!!!!1#::r   c                      t        t        d            } t        d t        d      D              } ||       dk(  sJ  ||       dk(  sJ y )NrA   c              3   8   K   | ]  }t        d |z          yw)r   N)r   )r  is     r   r  z,test_juxt_generator_input.<locals>.<genexpr>  s     6JqsO6s   r@   )r   r   rI   r8  r[  )rN   ranger   )datajuxtfuncs     r   test_juxt_generator_inputr    sG    b	?D6U1X66HD>_,,,D>_,,,r   c                  .    d } t        | dd      dk(  sJ y )Nc                 
    | |fS r^   r   r   s     r   rV   ztest_flip.<locals>.f  s    !tr   r   r   )r   r   )r   r   s    r   	test_flipr    s      3
***r   c                      t         j                  dk(  sJ dj                  d t         j                  j	                         D              } d| v sJ d }d }t        t
        ||       d      dk(  sJ  d	      dk(  sJ  d
      dk(  sJ j                  dk(  sJ dj                  v sJ dj                  v sJ dj                  v sJ d }t        t        t        f|       g       J  dg      dk(  sJ  i       J  ddi      dk(  sJ j                  dk(  sJ dj                  v sJ dj                  v sJ dj                  v sJ d }t        t
        t        f|       t
              J  t              J t        t        fd      sJ t        t        fd      sJ t        t               t               t                     j                  dk(  sJ j                  t         j                  k(  sJ y )Nr   
c              3   <   K   | ]  }|j                           y wr^   )strip)r  lines     r   r  ztest_excepts.<locals>.<genexpr>  s     P4$**,Ps   zKA wrapper around a function to catch exceptions and
dispatch to a handler.
c                 (    ddgj                  |       S )zidx docstring
        r   r   )indexr   s    r   idxztest_excepts.<locals>.idx  s     1v||Ar   c                 (    t        | t              sJ y)zhandler docstring
        )r   
ValueError)rj  s    r   handlerztest_excepts.<locals>.handler  s     !Z(((r   r   r   r   rH   r  idx_excepting_ValueErrorzidx docstringr  zhandler docstringc                     | d   S )zgetzero docstring
        r   r   r   s    r   getzeroztest_excepts.<locals>.getzero  s     tr   (getzero_excepting_IndexError_or_KeyErrorzgetzero docstringreturn_nonezReturns Nonec                      |        )zHA function that raises an instance of the exception type given.
        r   r   s    r   raise_ztest_excepts.<locals>.raise_  s     c	r   c                        t               S r^   )rE   	exceptings   r   rZ   ztest_excepts.<locals>.<lambda>  s    Yy%9 r   c                        t               S r^   )NotImplementedErrorr  s   r   rZ   ztest_excepts.<locals>.<lambda>  s    y9L/M r   r  )r   r7   joinr:   
splitlinesr  
IndexErrorKeyErrorr   rE   r  rr  )	testlinesr  r  r  r  r  s        @r   test_exceptsr    sC   y((( 		P7??3M3M3OPPI	#	  

 
C1IQ<1Q<1Q<2!;;;;i/////9,,,,,)"3"3333
 X.8IR=   aS>QR=   aV!!!!KKKK)"3"3333I-----Y.....
 X.7IZ (((X&&&)9:::%'MNNN&(FH5I,,,///r   )Frx  rs  toolz.functoolzr   r   r   r   r   r   r	   r
   r   r   r   r   r   operatorr   r   r   toolz.utilsr   	functoolsr   r   r    r#   r'   r)   r<   rF   rK   rP   r[   rd   rk   rn   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r(  r.  r2  r9  r<  rB  rI  rN  r~  r  r  r  r  r  r  r  r  r   r   r   <module>r     s&    3 3 3 3 * )    $320#	)X+4,>
1*$
>)$:
4@+'*T*"Z'6*/2'T?
VDrI
1)6-+=0r   