
    [cN                        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e          Z G d de          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?d/ Z@d0 ZAd1 ZBd2 ZCd3 ZDd4 ZEd5 ZFdS )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    :lib/python3.11/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dS )AlwaysEquals=useful to test correct __eq__ implementation of other objectsc                     dS NTr   selfothers     r   __eq__zAlwaysEquals.__eq__       tr   c                     dS NFr   r-   s     r   __ne__zAlwaysEquals.__ne__!       ur   N__name__
__module____qualname____doc__r0   r4   r   r   r   r)   r)      s8        GG      r   r)   c                       e Zd ZdZd Zd ZdS )NeverEqualsr*   c                     dS r3   r   r-   s     r   r0   zNeverEquals.__eq__(   r5   r   c                     dS r,   r   r-   s     r   r4   zNeverEquals.__ne__+   r1   r   Nr6   r   r   r   r<   r<   %   s8        G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 d S )N   
   )rA   i  i@  )   i  i>  )r   r'   tuplemapr#   r   	TypeErrorr   r   r   
test_applyrF   /   sj    r!!!!UVS&1???CCDDHXXXXX)U#######r   c                  0   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 d S )Nr         r@      )r   r#   r'   r   r   r   r   test_thread_firstrK   5   s    ??a31$$$$3$$))))63''1,,,,C8V,,222222r   c                  J   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 d S )Nr   r   rH   r   rI   rH   r@   rJ   )	listr   rD   r#   filterr   r    r   r'   r   r   r   test_thread_lastrP   =   s    IIISzFF3CDDEE!QOOOOIIISzFE?CCDDKKKKq3(F++r111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 d S )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    RR2YY r   )r   r:   r   rE   )rV   rU   rY   s    @@r   test_memoizer[   C   s    sH     
B2a88rr!Qxx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 d S )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2a55AAaDD=2a88qqAww2a1:::1""""2a1:::1""""""r   c                      t           dd            }  | d          }t          |          } |d           |d          k    sJ  |d           |d          k    sJ d S )Nr   c                     | |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   `   s    
   U 
QB
"++C3q66RRUU?3q66RRUU?r   c                      dd} t          | d          }t          |          } |d           |d          k    sJ  |d           |d          k    sJ d S )Nr   c                     | |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   sx        
aB
"++C3q66RRUU?3q66RRUU?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 d S )Nc                     dS r3   r   r   s    r   rZ   z,test_memoize_key_signature.<locals>.<lambda>y   s    5 r   r   Tcacher   Fc                     dS r3   r   )r   argss     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>~   s    % r   )r   r   r   rv   c                     dS r3   r   r_   s     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>       e r   rH   c                        d          S )Nrv   r   rX   s   r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   s    RRZZ r   c                      dS r3   r   r   r   r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   s     r   r   r   c                     dS r3   r   r_   s     r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   s     r   ru   ))rT   r   )rv   Nra   c                     dS r3   r   r   s    r   rZ   z,test_memoize_key_signature.<locals>.<lambda>   s    U r   ))r   r   )ru   Nr   rb   )r   r   rE   	frozensetrX   s   @r   test_memoize_key_signaturer~   w   s   	D		2	2	2B2a55D=2a55E> 
''dA/F/F	G	G	GB2a55D=2a55E>2a88u2a88q=2f:: 
##FD>	:	:	:B2a88t2a88u)////00000 
r4j	1	1	1B2444< 
%%%y556&+
, 
, 
,B 2a1:::?2a88q=2a1:::2a88u2a55E>2f:: 
"""D)K2H2H+I1+7+< 
= 
= 
=B2445=2777a<2a55A:r   c                  x    t          ddi          d             }  | d          du sJ  | d          du sJ d S )Nr   Trq   c                     dS r3   r   r   s    r   rV   z#test_memoize_curry_cache.<locals>.f   s    ur   r   Frc   rV   s    r   test_memoize_curry_cacher      sc    At9   1Q444<1Q445=r   c                      t          d           d             }  | dd          dk    sJ  | dd          dk    sJ d S )Nc                     | d         S Nr   r   )rt   kwargss     r   rZ   z"test_memoize_key.<locals>.<lambda>   s
    d1g r   )keyc                     | |z   S r^   r   )r   rT   rt   r   s       r   rV   ztest_memoize_key.<locals>.f   rg   r   r   r   rH   rc   r   s    r   test_memoize_keyr      sg    --...  /. 1Q77a<1Q77a<r   c                  @    d } t          |           }|j        | u sJ d S )Nc                      dS )z
        Docstring
        Nr   r   r   r   fooz!test_memoize_wrapped.<locals>.foo   s	     	r   )r   __wrapped__)r   memoized_foos     r   test_memoize_wrappedr      s8      
 3<<L#s******r   c                     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 d S )Nr   rA   rB   rM   )r   rH   rI   c                      t                      S r^   r   r   r   r   rZ   z#test_curry_simple.<locals>.<lambda>   s
    UWW 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T!WWFF6"::::c""""::D	S		)))$$%%2222)__-----)223333333r   c                      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 d S )NrA   c                     | |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    RR1XX r   c                      ||           S r^   r   )r   funcs     r   hztest_curry_kwargs.<locals>.h   s    tAwwr   g        )r   z0.0rA   )r   rA   r   )r   r   rE   intstr)rV   r   r   r   s      @r   test_curry_kwargsr      s       	aA1Q1::?11Q441::?1Q77b=11Q!999Q<<111q666!Q<<1    
qAB244192777a<2777a<2Q<<<12a55A:)----.....     588C==A8588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 d S )Nc                 R    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    QQsAYY r   c                  ,       d          d          S r   r   r   s   r   rZ   z*test_curry_passes_errors.<locals>.<lambda>   s    VQQsVVAYY r   c                        ddd          S )Nr   r   rH   r   r   s   r   rZ   z*test_curry_passes_errors.<locals>.<lambda>   s    QQq!QZZ r   r   r   rE   r   s   @r   test_curry_passes_errorsr      s    
  U
 1Q77a<)..../////)..../////)////0000000r   c                      d } t          |           }|j        | j        k    sJ t          |          t          |           k    sJ  | dd           |dd          k    sJ d S )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      s{       	aA9	!!!!q66SVV1Q77aa1gg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 d S )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z'test_curry_is_like_partial.<locals>.foo  r   r   r   r   rH   ru   )r   r   keywordsrt   )r   pr   s      r   test_curry_is_like_partialr     s       3QsA!3!3!3qA:####6QV1Q4411Q44<3??JE#JJqMMqA:####6QV1Q4411Q44<1Q!999!q			!!!!3!jeCjj1oooqA:####6QV1Q77aa1gg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 d S )Nr   c                     | |z   |z   S r^   r   r   s      r   r   z%test_curry_is_idempotent.<locals>.foo  r   r   r   r   r   ru   )r   r   r   hasattrrt   r   )r   rV   r   s      r   test_curry_is_idempotentr     s        	c1AaAaa!&%(((((qvv&&&&&6QV6QV:######r   c                  l   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 d S )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 )Nrt   )r   setattrr   s   r   rZ   z0test_curry_attributes_readonly.<locals>.<lambda>.  s    '!VT*B*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*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 )Nrt   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   ru   )r   r   AttributeErrorr   rV   s    @r   test_curry_attributes_readonlyr   )  s        	c1A."B"B"B"BCCCCC."J"J"J"JKKKKK."?"?"?"?@@@@@."<"<"<"<=====."@"@"@"@AAAAA."<"<"<"<=======r   c                  B   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 d S d S )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_nameru   )r9   r   r7   r:   r8   r   r   r   s     r   test_curry_attributes_writabler   6  s       $Cc1A>]****AJAIAL"AN:""""9    <;&&&&>]****q+ )zQ[(((() )((r   c                  ,    ddl m}  | j        dk    sJ d S )Nr   mergeztoolz.curried.exceptions)toolz.curried.exceptionsr   r8   r   s    r   test_curry_moduler   H  s/    ......9999999r   c            	      Z  	
 d	d} t          | dd          }t          | dd          }t          | dd          }t          | d          } |d          } |            }||k    sJ ||k    rJ ||k    sJ ||k    rJ ||k    sJ ||k    sJ ||k    sJ d	d}t          |dd          }||k    sJ ||||||| |            h||||hk    sJ t          | g           	t          t          	fd          sJ t          | g           
t          t          
fd          sJ d S )
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   ru   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8OOOb8OOOb8OOO8OOO8OOO   	sA			B8OOOBBB-"b"b1AAAAA CnnG)222233333C2G)22223333333r   c                      dd} t          |           }    |d          d          d          d           | dd          k    sJ d S )Nr   c                     | |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  so        
qB<722777Q<<<!Q11Q77******r   c                      G d dt                     }  | d          }|                    dd          dk    sJ  |                    d          d          dk    sJ |                     |dd          dk    sJ   |                     |          d          d          dk    sJ |                    dd          dk    sJ  |                    d          d          dk    sJ |                     dd          dk    sJ  |                     d          d          dk    sJ |                    dd          dk    sJ  |                    d          d          dk    sJ |                     dd          dk    sJ  |                     d          d          dk    sJ t	          |j        t
                    sJ t	          | j        t
                    sJ d S )	Nc                   z    e Zd ZdZd Zed             Zeed                         Ze	ed                         Z
dS )%test_curry_on_classmethods.<locals>.ArA   c                     || _         d S r^   BASEr.   bases     r   __init__z.test_curry_on_classmethods.<locals>.A.__init__|      DIIIr   c                     | j         |z   |z   S r^   r   r.   r   rT   s      r   	addmethodz/test_curry_on_classmethods.<locals>.A.addmethod      9q=1$$r   c                     | j         |z   |z   S r^   r   clsr   rT   s      r   addclassz.test_curry_on_classmethods.<locals>.A.addclass       8a<!##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  s        	 	 	 
	% 	% 
	% 
		$ 	$ 
 
	$ 
		 	 
 
	 	 	r   r  d   rH   rI   k         )objectr  r  r  r   r   r  r   s     r   test_curry_on_classmethodsr  x  s       F   ( 	
#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>>!!!!! ak5)))))ak5)))))))r   c                      G d dt                     }  | 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          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          dk    sJ |                     dd          dk    sJ d S )Nc                       e Zd ZdZdZd Zed             Zeed                         Z	e
ed                         Zd ZdS )'test_memoize_on_classmethods.<locals>.ArA   c                     || _         d S 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
    9r   N)r7   r8   r9   r  r$  r  r   r  r  r  r  r  r&  r   r   r   r  r    s        	 	 	 
	% 	% 
	% 
		$ 	$ 
 
	$ 
		 	 
 
		 	 	 	 	r   r  r  rH   rI   r        r  rB   r  )r  r  r  r$  r  r  r  s     r   test_memoize_on_classmethodsr)    s       F   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                              d          k    sJ d S )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    XSXa[[ r   r   r   )r   r   rE   r-  r.  s   @r   test_curry_callr/    s    
  U)00001111133q66!99A&&&&33q66!99AA&&&&&&r   c                     t           dd            }  |              | dd          k    sJ   | j        d          d           | dd          k    sJ   | j        d                              d                       | dd          k    sJ   | j        d          d           | dd          k    sJ   | j        d                              d                       | dd          k    sJ d S )	Nr   r   c                     | |z   S r^   r   r_   s     r   r   ztest_curry_bind.<locals>.add  rg   r   rA   rB   r   ra   rv   )r   bindr.  s    r   test_curry_bindr3    s%   
   U355CC1II838B<<ss2r{{**** 838B<<R  ""cc"bkk1111838b>>>B33r2;;....$838b>>>$$&&##b"++555555r   c                  z   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 d S )Nc                     | |z   |z   S r^   r   )r   rT   zs      r   add3z%test_curry_unknown_args.<locals>.add3  r   r   c                       |  S r^   r   )rt   r7  s    r   rV   z"test_curry_unknown_args.<locals>.f  s    tT{r   r   r   rH      rI   r   )rV   r7  s    @r   test_curry_unknown_argsr:    s          U 631133q66!99Q<<1411Q44771::?11Q771::?1Q1::?11Q771a==AAaAqMM))))))r   c                  6    t          t          d           sJ d S )Nc                       t          d          S r"   r   r   r   r   rZ   z&test_curry_bad_types.<locals>.<lambda>  s    U1XX r   )r   rE   r   r   r   test_curry_bad_typesr=    s"    )--.......r   c                  F    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 d S )Nc                       e Zd ZdS )(test_curry_subclassable.<locals>.mycurryN)r7   r8   r9   r   r   r   mycurryr@    s        r   rA  c                     | |z   S r^   r   r_   s     r   rZ   z)test_curry_subclassable.<locals>.<lambda>  s
    qs r   r   r   rH   )r   r   )rA  r   s     r   test_curry_subclassablerC    s        %    '""
#
#Cc5!!!!!c7#####cc!ffg&&&&&ecceeAhh(((((33q66!99>
 
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.
    rA   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   Falserv   3r   rH   10r   )r#   r'   r   r   r   )rF  s    r   generate_compose_test_casesrJ    s    
   
 "	
 F"	
 SM"	
 &#v&"	
 #JB	
 #()S!H	
5 r   c                  \    t                      D ]\  } }}} t          |  |i ||k    sJ d S r^   )rJ  r   )compose_argsrt   kwexpecteds       r   test_composerO  9  sR    .I.K.K ? ?*tR%w%t2r2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                    | |          k    sJ t          | |          k    sJ t                      k    sJ t          ||           k    rJ t                      k    rJ t                      k    rJ t          ||           k    sJ t                      k    sJ t                      k    sJ t          | |          k    rJ t                      k    rJ t                    t          t          | |                    k    sJ t                    t          t          ||                     k    sJ t          t          d dd
           G fdd          }|
                    d          dk    sJ |
                    dd          dk    sJ |                    d          dk    sJ  |            
                                dk    sJ  |            
                    d          dk    sJ  |                                d	          dk    s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          }t1          t)          j         |            j                  j                  dk    sJ d S ) 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  rR  r   f_of_gz-lambda *args, **kwargs: f(g(*args, **kwargs))ComposezA composition of functionszCompose({!r}, {!r})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                   0    e Zd Zd Z Z e           ZdS )&test_compose_metadata.<locals>.MyClassc                     dS )N   r   r%  s    r   __int__z.test_compose_metadata.<locals>.MyClass.__int__g  s    1r   N)r7   r8   r9   r\  	my_methodr  my_static_method)bindables   r   MyClassrY  e  s7        	 	 	 	'<11r   r`  rH   6r   ra   rI  416220r   2sandboxc                     dS )NrI   r   )r   r   r   des        r   myfuncz%test_compose_metadata.<locals>.myfunc{  s    qr   c                 ,    d                     |           S )Nz
result: {})formatr   s    r   	otherfuncz(test_compose_metadata.<locals>.otherfunc~  s    ""1%%%r   )r   r   r   ri  rj  return)rV   ro  c                       e Zd Z ZdS )rY  N)r7   r8   r9   method)composeds   r   r`  z&test_compose_metadata.<locals>.MyClass  s        r   rI   rb   )r   r7   r:   r  r   rm  r)   r<   r   r   r]  r^  r   r   toolz	__class__r   floatbool__annotations__inspect	signature
parametersreturn_annotationlenrq  )	rV   r   r   r`  rk  rn  sigr_  rr  s	          @@r   test_compose_metadatar~  >  s        q!}}H((((NNNNN 	Aq!}}H	))));;;;;>>299!Q??????wq!}}$$$$|~~%%%%71a==((((688####;==((((wq!}}$$$${}}$$$$vxx71a==((((<>>))))>>T'!Q--000000>>T'!Q--000000sMM+D+D+DEEH2 2 2 2 2 2 2 2 2 2 Q3&&&&Q!$$,,,,##A&&#----799  D((((799##t++++799%%a((C////799%%a++s22221a==$))))ui   ;q!}}&2:::  & & &
  F '*S 9 9Iy&))H

H
%
%C>W.v66AAAAA C''''          w !122=>>!CCCCCCr   c                  L    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   `   K   | ])\  }}}}t          t          |                    |||fV  *d S r^   )rC   reversed).0rL  rt   r   rN  s        r   	<genexpr>z3generate_compose_left_test_cases.<locals>.<genexpr>  sW        2\4 
x%%	&	&fh?     r   )rC   rJ  r   r   r    generate_compose_left_test_casesr    s:        '((     r   c                  \    t                      D ]\  } }}} t          |  |i ||k    sJ d S r^   )r  r   )compose_left_argsrt   rM  rN  s       r   test_compose_leftr    sX    3S3U3U I I/	D"h/|./<<<HHHHHI 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 d S )Nr   r   rH   F)r	   r#   r'   r   r   r   r   	test_piper    s]    3<<13!!!!63''5000000r   c                  x    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 d S )Nc                      dS r3   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  rx   r   c                      dS r,   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    $ r   r   r   c                 >    t          |           ot          |          S r^   )r   r   s     r   rZ   z!test_complement.<locals>.<lambda>  s    VAYY46!99 r   c                      dS )N r   r   r   r   rZ   z!test_complement.<locals>.<lambda>      b r   c                      dS r   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    a r   c                      d S r^   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    d r   c                      g S r^   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  r  r   c                      dS )Nr   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    # r   c                      dS r"   r   r   r   r   rZ   z!test_complement.<locals>.<lambda>  s    ! 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    s   $:mm$$&&&&&'z,,''))))) :fa     !z&!!!$$$$$):j(())!,,,,,,z*U++,,Q///// 54I :i  A&&&&&$z)$$Q***** ":jj!!##### :ii  """""#:ll##%%%%%!:jj!!#####&z++&&((((($z))$$&&&&&&z++&&(((((((r   c                      d } t          | d          dk    sJ g }t          |j        d          dk    sJ |dgk    sJ d S )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    s[    
/Cc1::?
Ccj!!!!!1#:r   c                      t          t          d                    } t          d t          d          D                       } ||           dk    sJ  ||           dk    sJ d S )NrA   c              3   :   K   | ]}t          d |z            V  dS )r   N)r   )r  is     r   r  z,test_juxt_generator_input.<locals>.<genexpr>  s,      66JqsOO666666r   r@   )r   r   rI   r9  r[  )rN   ranger   )datajuxtfuncs     r   test_juxt_generator_inputr    sm    b		??D66U1XX66666H8D>>_,,,,8D>>_,,,,,,r   c                  :    d } t          | dd          dk    sJ d S )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    s6       3
******r   c                     t           j        dk    sJ dt           j        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 d S )Nr   zOA wrapper around a function to catch exceptions and
    dispatch to a handler.
c                 0    ddg                     |           S )zidx docstring
        r   r   )indexr   s    r   idxztest_excepts.<locals>.idx  s     1v||Ar   c                 4    t          | t                    sJ dS )zhandler docstring
        )r   
ValueError)rj  s    r   handlerztest_excepts.<locals>.handler  s     !Z(((((rr   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     acc	r   c                  $      t                     S r^   )rE   	exceptings   r   rZ   ztest_excepts.<locals>.<lambda>  s    YYy%9%9 r   c                  $      t                     S r^   )NotImplementedErrorr  s   r   rZ   ztest_excepts.<locals>.<lambda>  s    yy9L/M/M r   r  )
r   r7   r:   r  
IndexErrorKeyErrorr   rE   r  r  )r  r  r  r  r  s       @r   test_exceptsr    s   y((((	'	   
  
   
C11I9Q<<19Q<<19Q<<2!;;;;;i/////9,,,,,)"33333  
 X.88I9R==   9aS>>Q9R==   9aV!!!!!KKKKK)"33333I-----Y.....  
 X.77I9Z  (((9X&&&)9999:::::%'M'M'M'MNNNNN&((FHH55I,,,,//////r   )Grx  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)   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/  r3  r:  r=  rC  rJ  rO  r~  r  r  r  r  r  r  r  r  r   r   r   <module>r     s    3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 * ) ) ) ) ) ) ) ) )                        6       &   $ $ $3 3 32 2 20 0 0# # #	 	 	  ) ) )X    + + +4 4 4, , ,>
1 
1 
1    *$ $ $
> 
> 
>) ) )$: : :
4 4 4@+ + +'* '* '*T*" *" *"Z' ' '6 6 6* * */ / /  2' ' 'T? ? ?
VD VD VDr  I I I
1 1 1) ) )6  - - -+ + +:0 :0 :0 :0 :0r   