o
    NrfwJ                     @   s  d dl Z d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4 e
e	d	Z5d
d Z6dd Z7dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@d d! ZAd"d# ZBd$d% ZCd&d' ZDd(d) ZEd*d+ ZFd,d- ZGd.d/ ZHd0d1 ZId2d3 ZJd4d5 ZKd6d7 ZLd8d9 ZMd:d; ZNd<d= ZOd>d? ZPd@dA ZQdBdC ZRdDdE ZSdFdG ZTdHdI ZUdJdK ZVdLdM ZWdNdO ZXdPdQ ZYdRdS ZZdTdU Z[dVdW Z\dXdY Z]dZd[ Z^d\d] Z_d^d_ Z`d`da Zadbdc Zbddde Zcdfdg Zddhdi Zedjdk Zfdldm Zgdndo Zhdpdq Zidrds Zjdtdu Zkdvdw ZldS )x    N)starmap)raises)partial)Random)dumpsloads)&removegroupbymerge_sortedconcatconcatv
interleaveunique
isiterablegettermapcat
isdistinctfirstsecondnthtaketaildrop	interposegetrestlastconsfrequenciesreducebyiterate
accumulatesliding_windowcount	partitionpartition_alltake_nthpluckjoindifftopkpeekpeeknrandom_sample)addmulZ__no__default__c                 C   s   | S N xr1   r1   e/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/cytoolz/tests/test_itertoolz.pyidentity   s   r5   c                 C      | d dkS N   r   r1   r2   r1   r1   r4   iseven      r9   c                 C   r6   )Nr8      r1   r2   r1   r1   r4   isodd    r:   r<   c                 C      | d S Nr;   r1   r2   r1   r1   r4   inc$      r?   c                 C   s   d|  S )Nr8   r1   r2   r1   r1   r4   double(   r@   rA   c                  C   s@   t ttd} t| tusJ t| ttttdksJ d S )N   )r   r9   rangetypelistfilterr<   )rr1   r1   r4   test_remove,   s   "rH   c                   C   s(   t tg dddgddgdksJ d S )Nr;   r8         r8   rK   r;   rJ   TF)r	   r9   r1   r1   r1   r4   test_groupby2   s   (rM   c                   C   sv   t dg dddgddgdksJ t dgg dddgddgdks%J t ddgg dddgddgdks9J d S )	Nr   )r;   r8   r;   rJ   r8   r8   r8   rK   rN   rO   rP   rQ   )r;   r8   ))r;   r;   rP   )r	   r1   r1   r1   r4   test_groupby_non_callable6   s   rT   c                  C   sN  t tg dg dg dksJ t tg dg dg dks"J t tdgddgd	gg g d
ks5J t tg dg dg dd dg dksKJ t tg dg ddd dg dks`J t tdd	gdd	gdd dg dksuJ dtddddksJ dtdddtddksJ dtddddd ddksJ t tdgg dtdg d
ksJ g dg dg dg} t t| d d!d ig d"ksJ t t g ksJ t tg dg dksJ t tg d#dd	gg d$ksJ t tg d#dd	gtdg d$ksJ t tdd%gdgdd&gd	d'gtdg d(ks%J d S ))Nr;   r8   rJ   )r;   r;   r8   r8   rJ   rJ   )r;   rJ   rB   )r8   rK      r;   r8   rJ   rK   rB   rV   r;   r8   rK   rJ   rI   )rB   rJ   r;   )rV   rK   rJ   c                 S      |  S r0   r1   r2   r1   r1   r4   <lambda>I       z#test_merge_sorted.<locals>.<lambda>key)rV   rB   rK   rJ   rJ   r;   )r8   r;   rJ   c                 S      | d S NrJ   r1   r2   r1   r1   r4   rY   K       )r8   r;   r;   r8   rJ   rJ   c                 S   r]   r^   r1   r2   r1   r1   r4   rY   M   r_   )r8   r;   rJ   rJ    abcZ	aaabbbcccZcbac                 S   s
   t |  S r0   )ordr2   r1   r1   r4   rY   Q      
 Z	cccbbbaaar8   rJ   rK   )rN   r   rK   rJ   rV   )rB   rJ   rV   rB      rj   )	   r;   rl   rj   rl   rl   r\   c                 S      | d S r>   r1   r2   r1   r1   r4   rY   V   r_   )	rk   rN   rg   re   rh   rf   ri   rm   rn   )r;   rK   rB   r;   r8   rJ   rK   rB   rB      rV   )r;   r8   rJ   rK   rB   rV   rq   )rE   r
   r(   rb   r5   datar1   r1   r4   test_merge_sortedD   sF   ""&$""(6rt   c                   C   s0   d tddksJ d tddksJ d S )Nr`   )ABCZ123ZA1B2C3)ru   1ZA1BC)r(   r   r1   r1   r1   r4   test_interleavea   s   rw   c                   C   sD   t tddks
J t tddksJ t tdtddks J d S )NrU   )r;   r8   r;   rJ   r[   rN   )tupler   r9   r1   r1   r1   r4   test_uniquef   s   ry   c                  C   s   G dd d} G dd d}G dd d}G dd d}t g d	d
u s&J t dd
u s.J t |  d
u s7J t | d
u s@J t ddu sHJ t | du sQJ t | du sZJ d S )Nc                   @      e Zd Zdd ZdS )z%test_isiterable.<locals>.IterIterablec                 S   s   t g dS Nabc)iter)selfr1   r1   r4   __iter__p   r:   z.test_isiterable.<locals>.IterIterable.__iter__N__name__
__module____qualname__r   r1   r1   r1   r4   IterIterableo       r   c                   @   rz   )z(test_isiterable.<locals>.GetItemIterablec                 S      g d| S r{   r1   r   itemr1   r1   r4   __getitem__t   r:   z4test_isiterable.<locals>.GetItemIterable.__getitem__N)r   r   r   r   r1   r1   r1   r4   GetItemIterables   r   r   c                   @   s   e Zd ZdZdS )z$test_isiterable.<locals>.NotIterableNr   r1   r1   r1   r4   NotIterabley   s    r   c                   @   s   e Zd ZdZdd ZdS )z3test_isiterable.<locals>.NotIterableEvenWithGetItemNc                 S   r   r{   r1   r   r1   r1   r4   r      r:   z?test_isiterable.<locals>.NotIterableEvenWithGetItem.__getitem__)r   r   r   r   r   r1   r1   r1   r4   NotIterableEvenWithGetItem|   s    r   rU   Tra   rB   F)r   )r   r   r   r   r1   r1   r4   test_isiterablel   s   r   c                   C   s|   t g ddu s
J t g ddu sJ t ddu sJ t ddu s$J t tg ddu s0J t tg ddu s<J d S )NrU   T)r;   r8   r;   FZHelloZWorld)r   r   r1   r1   r1   r4   test_isdistinct   s   r   c                   C   s   t dddks	J t dtddksJ t dddksJ t dddidks(J ttd	d
 s1J t dddks:J ttdd
 sCJ d S )Nr8   ABCDECr;   rJ   r8   r;   r   foobarc                   S   s   t dddiS )N
   r   )r   r1   r1   r1   r4   rY          ztest_nth.<locals>.<lambda>Dc                   S   s   t dtdS )Nr   r   )r   r   r1   r1   r1   r4   rY      r   )r   r   r   StopIteration
ValueErrorr1   r1   r1   r4   test_nth   s   r   c                   C   <   t ddksJ t ddksJ tt dddtsJ d S )Nr   Ar   rJ   zerooner   r;   )r   
isinstanceintr1   r1   r1   r4   
test_first      r   c                   C   r   )Nr   Br   r8   r   r   r   )r   r   r   r1   r1   r1   r4   test_second   r   r   c                   C   r   )Nr   Er   r;   r   r   r   )r   r   r   r1   r1   r1   r4   	test_last   r   r   c                   C   s4   t tdt dksJ t tdt dksJ d S )Nr   ZBCDEr   r8   r;   )rE   r   r1   r1   r1   r4   	test_rest   s   r   c                   C   8   t tddt dksJ t tddt dksJ d S )NrJ   r   ru   r8   r   )rJ   r8   )rE   r   r1   r1   r1   r4   	test_take      r   c                   C   sV   t tddt dksJ t tdtdt dksJ t tddt dks)J d S )NrJ   r   ZCDEr8   r   r   )rE   r   r   r1   r1   r1   r4   	test_tail   s   r   c                   C   r   )NrJ   r   ZDEr;   r   r   )rE   r   r1   r1   r1   r4   	test_drop   r   r   c                   C   s   t tddt dksJ d S )Nr8   r   ZACE)rE   r&   r1   r1   r1   r4   test_take_nth   s   r   c                   C   s4  t dddks	J tt ddgdtdksJ t ddddddks%J t dd	gddddd
ks4J t di dddks?J t i g ddddksLJ t ddgdddksXJ t dgddksbJ t g ddkskJ ttdd stJ ttdd s}J ttdd sJ ttdd sJ ttdd sJ d S )Nr;   r   r   rJ   ZBDr}   r8   r|   r~   rN   r   r   defaultrU   r   ZABr   )r   r   r   r1   c                   S   s
   t ddS )Nr   ru   r   r1   r1   r1   r4   rY      rc   ztest_get.<locals>.<lambda>c                   S   s   t dddiS )Nr   r}   r;   r   r1   r1   r1   r4   rY      r   c                   S   s   t i g dS )NrU   r   r1   r1   r1   r4   rY      r   c                   S   s   t g ddd S )NrU   r;   r   r1   r1   r1   r4   rY          c                   S   s   t di tdS )Nr   r   )r   no_default2r1   r1   r1   r4   rY      r   )r   rE   r   
IndexErrorKeyError	TypeErrorr1   r1   r1   r4   test_get   s   r   c                  C   s   t ttg dg dgg dksJ t ttg dg dg dgt tdks+J dd	 } g d
t ttt| g dg dgksEJ d S )NrU   )rK   rB   rV   rW   )rJ   r8   r;   r   )rV   rB   rK   )rl   rj   rq   r   c                 S   r=   r>   r1   )ir1   r1   r4   rY      r_   ztest_mapcat.<locals>.<lambda>)rK   rB   rV   rq   rj   rl   rJ   rK   rB   )rV   rq   rj   )rE   r   r5   reversedrC   r   map)r?   r1   r1   r4   test_mapcat   s   
r   c                   C   s"   t tdddgg dksJ d S )Nr;   r8   rJ   rU   )rE   r   r1   r1   r1   r4   	test_cons      "r   c                   C   sH   t tg g g gg ksJ t tdtddgtdgg dks"J d S NrB   r}   r~    ʚ;)r}   r~   r   r;   r8   )rE   r   r   rC   r1   r1   r1   r4   test_concat   s   r   c                   C   sD   t tg g g g ksJ t tdtddgtdg dks J d S r   )rE   r   r   rC   r1   r1   r1   r4   test_concatv   s   r   c                   C   sz   dt ttdtdksJ ddtddksJ ttdtdd	g d
ks,J ttdg dg dks;J d S )Nr}   r   ZtXaXrXzXaXnr`   XZtarzanr   r;   rK   )r;   r   r;   r   r;   r   r;   .r|   )r}   r   r~   r   r   )r   r   r   rC   r(   rE   	itertoolsrepeatr1   r1   r1   r4   test_interpose   s   ""r   c                
   C   sT   t g ddddddksJ t g i ksJ t ddddddddddks(J d S )	N)catpigr   eelr   dogr   r   r8   r;   rJ   )r   r   r   r   ZonomatopoeiarK   )r}   er   monpt)r   r1   r1   r1   r4   test_frequencies  s   
r   c                  C   s   g d} dd }t |t| ddddksJ t |t| dd	d
dks$J ddddddddddddddddg}t dd dd |ddddksLJ t ddd |ddddks\J d S )Nrp   c                 S   r6   r7   r1   r2   r1   r1   r4   rY         ztest_reduceby.<locals>.<lambda>r   rl   rV   )FTr;      rj   zbuild roadsCAi@B )namestatecostzfight crimeILi zhelp farmersi i@ c                 S   ro   )Nr   r1   r2   r1   r1   r4   rY     r_   c                 S      | |d  S Nr   r1   accr3   r1   r1   r4   rY     r   iO i   )r   r   r   c                 S   r   r   r1   r   r1   r1   r4   rY     r   )r   r.   r/   )rs   r9   Zprojectsr1   r1   r4   test_reduceby  s*   



r   c                   C   sB   t ttg ddddksJ t ttg dtdddksJ d S )NrI   rV   rK   rL   )r   r9   r.   r   r1   r1   r1   r4   test_reduce_by_init  s   r   c                  C   s4   dd } t t| g dtddhddhdksJ d S )	Nc                 S   s   |  | | S r0   )r.   )sr   r1   r1   r4   set_add%  s   
z0test_reduce_by_callable_default.<locals>.set_add)r;   r8   rJ   rK   r;   r8   r8   rK   r;   rJ   rL   )r   r9   set)r   r1   r1   r4   test_reduce_by_callable_default$  s   r   c                   C   sH   t tttdddg dksJ t tdttdg dks"J d S )Nr   rB   )r   r;   r8   rJ   rK   rK   r;   )r;   r8   rK   rj   )rE   r   islicer    r?   r   rA   r1   r1   r1   r4   test_iterate-  s   $$r   c                  C   s   t ttg dg dksJ t ttg dg dksJ t ttg ddg dks.J dd } t }t t| g ||gksBJ t t| g g ksMJ t ttg dtg d	ks]J d S )
Nrp   )r;   rJ   rV   r   r   )r;   r8   rV      x   )r   r   r8   rB   rl      c                 S   s   t d)Nzbinop should not be called)AssertionErrorr}   r~   r1   r1   r4   binop7  r@   ztest_accumulate.<locals>.binoprU   r;   rJ   rV   )rE   r!   r.   r/   objectr   )r   startr1   r1   r4   test_accumulate2  s    $r   c                   C   s"   t tttdg dksJ d S )NrU   r   )rE   r!   r.   r   r1   r1   r1   r4   -test_accumulate_works_on_consumable_iterables@  r   r   c                   C   s@   t tdg dg dksJ t tdg dddgksJ d S )Nr8   rI   )rN   r8   rJ   rJ   rK   rJ   rU   rd   rE   r"   r1   r1   r1   r4   test_sliding_windowD  s   "r   c                   C   s8   t tdddgg ksJ t tdddgg ksJ d S )NrJ   r;   r8   rq   r   r1   r1   r1   r4   %test_sliding_window_of_short_iteratorI  r   r   c                   C   sx   t tdg dddgksJ t tdtdddgksJ t tdtd	d
dddgks/J t tdg g ks:J d S )Nr8   rI   rN   r   rJ   rq   r   r;   r8   r   rK   r   )pad)rJ   r   r   )rE   r$   rC   r1   r1   r1   r4   test_partitionN  s   
r   c                  C   s   t tdg dddgksJ t tdtdddgksJ t tdg g ks)J G dd	 d	t} |  }||||f|||fg}t td
|gd |ksMJ t td
t|gd |ks]J d S )Nr8   rI   rN   r   rJ   rB   r   c                   @   rz   )z%test_partition_all.<locals>.NoComparec                 S   s   | j |j krdS t )NT)	__class__r   )r   otherr1   r1   r4   __eq__]  s   z,test_partition_all.<locals>.NoCompare.__eq__N)r   r   r   r  r1   r1   r1   r4   	NoCompare\  r   r  rK   rq   )rE   r%   rC   r   r   )r  objresultr1   r1   r4   test_partition_allV  s   $r  c                   C   s\   t ddksJ t g dksJ t tddksJ t ddks"J t tddks,J d S )NrU   rJ   r   rI   rK   ZhellorB   )r#   r   r1   r1   r1   r4   
test_countg  s
   r  c                  C   s  t tdddgddgddggg dksJ t tddgg dg d	gd
dgks+J t tddgddggd d dgks>J dddddddg} t td| ddgksVJ t td| dddgksdJ t tddg| ddgkssJ t tdg| ddgksJ t tddg| dddgksJ ttdd sJ ttdd sJ t tdddgddgddggtg dksJ ttdd sJ d S )Nr   r;   r8   rJ   rK   rB   )r   r8   rK   r   r   r   r   cheese)idr   pies)r  r   pricer  r
  r   )r;   r  )r8   r	  )r  )r	  r   )r   r   )r;   r   c                   S   s   t tddggS Nr;   r   rE   r'   r1   r1   r1   r4   rY   |      ztest_pluck.<locals>.<lambda>c                   S   s   t tdddigS )Nr   r  r;   r  r1   r1   r1   r4   rY   }      c                   S   s   t tddggtS r  )rE   r'   r   r1   r1   r1   r4   rY     r  )rE   r'   r   r   r   r   rr   r1   r1   r4   
test_pluckp  s   ,*& .r  c                  C   sr   g d} g d}dd }t tttt| t|}h d}||ks"J t tttt| t|ttd}||ks7J d S )Nr;   r   r8   tworJ   three)appler;   oranger;   )bananar8   )coconutr8   c                 S   s   | d | d  S Nr   r;   r1   )pairr1   r1   r4   addpair  s   ztest_join.<locals>.addpair>   r8   r  r  r8   r;   r   r  r;   r;   r   r  r;   r8   r  r  r8   left_defaultright_default)r   r   r.   r(   r   r   r   )namesfruitr  r  expectedr1   r1   r4   	test_join  s   
r)  c                   C   sB   t dddks
J t dgddksJ t g ddksJ d S )Nr   Alicer   r   r1   )r   r1   r1   r1   r4   test_getter  s   r+  c                  C   s   dd t dD } dd t dD }ttd| d|ttdd | dd |ks*J d	d }ttdd
g| dd
g|tt|| ||ksFJ dd }ttdg| dg|tt|| ||ks`J d S )Nc                 S   s   g | ]}||d  fqS rS   r1   .0r   r1   r1   r4   
<listcomp>  s    z&test_key_as_getter.<locals>.<listcomp>rB   c                 S   s   g | ]}||d  |d fqS r   r1   r,  r1   r1   r4   r.    s    r   c                 S   ro   Nr   r1   r2   r1   r1   r4   rY     r_   z$test_key_as_getter.<locals>.<lambda>c                 S   ro   r/  r1   r2   r1   r1   r4   rY     r_   c                 S   s   | d | d fS r  r1   r2   r1   r1   r4   rY     r   r;   c                 S   s
   | d fS r/  r1   r2   r1   r1   r4   rY     rc   )rC   r   r(   )ZsquaresZpowsr   r1   r1   r4   test_key_as_getter  s    r0  c                  C   s@   g d} g d}t tttt| t|}h d}||ksJ d S )N)r  r  r  )r;   uno)r8   dosr  >   )r8   r2  r  r8   )r;   r1  r  r;   r  r   )r;   r1  r  r;   r"  )r8   r2  r  r8   r!  r   r   r.   r(   r   r   r&  r'  r  r(  r1   r1   r4   test_join_double_repeats  s
   	r5  c                  C   s>   g d} ddg}t tttt| t|}dh}||ksJ d S )Nr  )r  rB   r  r   r3  r4  r1   r1   r4   test_join_missing_element  s
   r6  c                  C   6   t ttddgtddgd d} ddh}| |ksJ d S )Nr;   r8   rJ   )r$  rP   r^   r   r(   r5   r  r(  r1   r1   r4   test_left_outer_join     r:  c                  C   r7  )Nr;   r8   rJ   )r%  rP   r;   Nr8  r9  r1   r1   r4   test_right_outer_join  r;  r=  c               	   C   s8   t ttddgtddgd d d} h d}| |ksJ d S )Nr;   r8   rJ   r#  >   r^   r<  rP   r8  r9  r1   r1   r4   test_outer_join  s
   r>  c                     s  t tdd s	J t tdd sJ t tdd sJ ttddgdtddgg ks-J ttg dd	tg d
ddgksAJ ttddgdgdgksPJ ttddgdgd dddgksbJ t tdd skJ t tdd stJ t tdd s}J t tdd sJ ttddgdgksJ ddddddg} ddddddg}ddd  fdd}tt| ||d ddddddfgk d S )!Nc                   S   s
   t t S r0   rE   r)   r1   r1   r1   r4   rY     rc   ztest_diff.<locals>.<lambda>c                   S   s   t tddgS Nr;   r8   r?  r1   r1   r1   r4   rY     r   c                   S   s   t tddgdS Nr;   r8   rJ   r?  r1   r1   r1   r4   rY     r  r;   r8   rN   rU   )r;   r   rJ   )r;   r8   r   )r8   r   r8   )rJ   rJ   r   r   )r;   r   r   )r8   Nc                   S   s   t tg S r0   r?  r1   r1   r1   r4   rY     r   c                   S   s   t tg gS r0   r?  r1   r1   r1   r4   rY     r   c                   S   s   t tddggS r@  r?  r1   r1   r1   r4   rY     r  c                   S   s   t tddgdgS rA  r?  r1   r1   r1   r4   rY     r  rO   r   dollar)r   currencyd   yeni,  g{Gz?)rB  rE  c                    s    | d  | d  S )NrC  r   r1   )r   Zconversionsr1   r4   	indollars  s   ztest_diff.<locals>.indollarsr[   )r   r   rE   r)   r   )Zdata1Zdata2rG  r1   rF  r4   	test_diff  s2   $
$

rH  c                   C   s   t dg ddksJ t dg ddd ddksJ t dtg dd	d ddks+J t dd
ddddddd
ddddgdddd
ddddfksNJ t dd
ddddddd
ddddgddd
dddddfksqJ t dg dddks}J d S )Nr8   )rK   r;   rB   r8   )rB   rK   c                 S   rX   r0   r1   r2   r1   r1   r4   rY     rZ   ztest_topk.<locals>.<lambda>r[   rN   )rB   r;   rK   r8   c                 S   rX   r0   r1   r2   r1   r1   r4   rY     rZ   r;   r   r   rl   r}   r~   )re   rO   rP   rJ   r;   rK   r   r   )rJ  rI  )r*   r   r1   r1   r1   r4   	test_topk  s(   "rK  c                   C   s"   t dg ddd ddksJ d S )NrK   )rB   rl   r8   r;   rB   rJ   c                 S   s   dS r>   r1   r2   r1   r1   r4   rY     s    z%test_topk_is_stable.<locals>.<lambda>r[   )rB   rl   r8   r;   )r*   r1   r1   r1   r4   test_topk_is_stable  r   rL  c                  C   sJ   g d} t | \}}|| d ksJ t|| ksJ ttdd s#J d S )Nr*  ZBobZCarolr   c                   S   s   t g S r0   )r+   r1   r1   r1   r4   rY     r_   ztest_peek.<locals>.<lambda>)r+   rE   r   r   )alistelementblistr1   r1   r4   	test_peek  s
   rQ  c                  C   sl   d} t d| \}}|| d d ksJ t|| ksJ t t| d | \}}|| ks,J t|| ks4J d S )NrM  r8   rK   )r,   rx   len)rN  elementsrP  r1   r1   r4   
test_peekn  s   rT  c                     s   t td t td dd ksJ d fdd	 } |  ks$J d}td}||ks4J | |ks:J ttttksHJ tttt ksWJ dd	ksaJ ttfd
dslJ d S )NrD  r;   i  ZprobseqZrandom_statec                    s   t td | dS )Ng?rU  )rE   r-   )rs)rN  r1   r4   rY   .  s    z$test_random_sample.<locals>.<lambda>i     ar}   c                      s    g S r0   r1   r1   )
mk_rsampler1   r4   rY   >  r_   rR   )rE   rC   r-   r   hashr   r   r   )Zrsample1Zrsample2Zrandobjr1   )rN  rY  r4   test_random_sample)  s   r[  )mr   r   Zcytoolz.utilsr   	functoolsr   randomr   pickler   r   Zcytoolz.itertoolzr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   operatorr.   r/   r   r5   r9   r<   r?   rA   rH   rM   rT   rt   rw   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r)  r+  r0  r5  r6  r:  r=  r>  rH  rK  rL  rQ  rT  r[  r1   r1   r1   r4   <module>   s    

				