o
    \iY                     @   s  d dl mZmZmZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZddlmZmZmZmZ ddlmZ dd	lmZmZ d
dlmZmZ d
dlmZmZmZ edZedZd dlm Z m!Z!m"Z" d dl#mZ d dl$m%Z%m&Z&m'Z' ej(ddddd Z)dd Z*diddZ+dd Z,dd Z-d d! Z.ej/0d"dd#gej/0d$eegd%d& Z1eej/0d"dd#gej/0d'd(d)gej/0d$eegd*d+ Z2eej/0d$eegd,d- Z3d.d/ Z4d0d1 Z5ej/0d2dd3gd4d5 Z6d6d7 Z7G d8d9 d9e8Z9djd:d;Z:d<d= Z;d>d? Z<ej/0d@e=e>ddAdB Z?dCdD Z@dEdF ZAdGdH ZBdIdJ ZCdKdL ZDdMdN ZEdOdP ZFdQdR ZGdSdT ZHdUdV ZIdWdX ZJej/0dYdZd[gej/jKejLd\ko\ejLd]kd^d_d`da ZMdbdc ZNej/0dddedfgdgdh ZOdS )k    )absolute_importdivisionprint_functionNrandom)sleep)uuid4   )Paralleldelayedparallel_backendparallel_config)DaskDistributedBackend)AutoBatchingMixinThreadingBackend   )np
with_numpy)_recursive_backend_info_test_deadlock_with_generator8_test_parallel_unordered_generator_returns_fastest_firstdistributeddask)ClientLocalCluster
get_client)time)cleanupclusterincfunctionT)scopeautousec                 c   s\    ddl m} dd |jD }d V  | D ]\}}|d u r&tj|d  q|tj|< qd S )Nr   )ParallelBackendBasec                 S   s   i | ]	}|t j|qS  )osenvironget).0kr$   r$   v/var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/joblib/test/test_dask.py
<dictcomp>(   s    z(avoid_dask_env_leaks.<locals>.<dictcomp>)joblib._parallel_backendsr#   MAX_NUM_THREADS_VARSitemsr%   r&   pop)tmp_pathr#   	old_valuer)   vr$   r$   r*   avoid_dask_env_leaks!   s   r3   c                  O      d S Nr$   )argskwargsr$   r$   r*   noop3   s   r8   皙?c                 C   s   t | | r
tdd S )Nzcondition evaluated to True)r   
ValueError)	conditiondurationr$   r$   r*   slow_raise_value_error7   s   r=   c                    sF   | dd }i }| D ]\}}t fddt|D ||< q|S )Nc                 S   s   | j S r5   )log)dask_workerr$   r$   r*   <lambda>>   s    zcount_events.<locals>.<lambda>c                    s   g | ]
}|d   kr|qS r   r$   )r(   event
event_namer$   r*   
<listcomp>B   s    z count_events.<locals>.<listcomp>)runr.   lenlist)rD   clientworker_eventsevent_countsweventsr$   rC   r*   count_events=   s   
rN   c                 C   sD  t  \}\}}t|d | dp}tdd[ t dd tdD }|dd	 tdD ks0J tt t d
d tdD  W d    n1 sLw   Y  t dd tdD }|dd	 tdD ksjJ W d    n1 stw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Naddressloopr   backendc                 s       | ]	}t t|V  qd S r5   r   r   r(   ir$   r$   r*   	<genexpr>K       ztest_simple.<locals>.<genexpr>
   c                 S      g | ]}t |qS r$   r   rV   r$   r$   r*   rE   L       ztest_simple.<locals>.<listcomp>c                 s   s     | ]}t t|d kV  qdS )   N)r   r=   rV   r$   r$   r*   rX   O       
c                 s   rT   r5   rU   rV   r$   r$   r*   rX   S   rY   c                 S   r[   r$   r\   rV   r$   r$   r*   rE   T   r]   )r   r   r   r
   rangepytestraisesr:   rQ   sabrI   seqr$   r$   r*   test_simpleG   s$   

"rh   c                 C   s,  t jtju sJ t \}\}}t|d | d\}tddG t 4}|j}t|t s-J |j	|u s4J |j
dks;J |dd ttdD  |j
d	ksOJ W d    n1 sYw   Y  W d    n1 shw   Y  W d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )
NrO   rP   r   rR   r   c                 s   s    | ]
}t d d  V  qdS )c                   S   r4   r5   r$   r$   r$   r$   r*   r@   j   s    z?test_dask_backend_uses_autobatching.<locals>.<genexpr>.<lambda>Nr   r(   _r$   r$   r*   rX   j   s    z6test_dask_backend_uses_autobatching.<locals>.<genexpr>     @rZ   )r   compute_batch_sizer   r   r   r   r
   _backend
isinstanceparallel_effective_batch_sizer`   int)rQ   rd   re   rf   rI   rp   rS   r$   r$   r*   #test_dask_backend_uses_autobatchingW   s*   "rs   n_jobscontextc              	   C   sv   t jddd* |d td |  W d    n1 sw   Y  W d    d S W d    d S 1 s4w   Y  d S Nr	   	n_workersthreads_per_workerr   )r   r   r   )rt   rv   r$   r$   r*   Atest_parallel_unordered_generator_returns_fastest_first_with_daskn   s   Pr{   	return_as	generatorgenerator_unorderedc              	   C   sx   t jddd+ | d td || W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S rw   )r   r   r   )rv   r|   rt   r$   r$   r*   %test_deadlock_with_generator_and_dasku   s   Pr   c              
   C   s  t jdddp tjtdtjd}tdD ].}| d t|d}W d    n1 s,w   Y  t|dks9J t	dd	 |D sDJ q| d t }W d    n1 sWw   Y  t|dksdJ t	d
d	 |D soJ W d    d S 1 szw   Y  d S )Nr	   rx   g    cAdtyper   data   c                 s       | ]	\}}|d kV  qdS r   Nr$   r(   namerk   r$   r$   r*   rX          
z4test_nested_parallelism_with_dask.<locals>.<genexpr>c                 s   r   r   r$   r   r$   r$   r*   rX      r   )
r   r   r   onesrr   uint8r`   r   rG   all)rv   r   rW   backend_types_and_levelsr$   r$   r*   !test_nested_parallelism_with_dask~   s$   

"r   c                   C   s   t  S r5   r   r$   r$   r$   r*   random2   s   r   c              
   C   s   t  V\}\}}t|d | d1}tdd t dd tdD \}}||ks+J W d    n1 s5w   Y  W d    n1 sDw   Y  W d    d S W d    d S 1 s\w   Y  d S )NrO   rP   r   rR   c                 s       | ]}t t V  qd S r5   )r   r   rV   r$   r$   r*   rX          z3test_dont_assume_function_purity.<locals>.<genexpr>r	   r   r   r   r
   r`   )rQ   rd   re   rf   rI   xyr$   r$   r*    test_dont_assume_function_purity   s   "r   mixedFc              
   C   s4  ddl m} |sdd tdD }d}ndd tdD }d}t|||ks)J t d\}\}}t|d	 | d
?}tdd tddd|}	W d    n1 sRw   Y  dd }
|dd}|	|
}t
dd |D sqJ W d    n1 s{w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   )Batchc                 S   s   g | ]}t t|qS r$   rU   rV   r$   r$   r*   rE          z&test_dask_funcname.<locals>.<listcomp>r   batch_of_inc_4_callsc                 S   s,   g | ]}|d  rt t|nt t|qS )r	   )r   absr   rV   r$   r$   r*   rE      s   , mixed_batch_of_inc_4_callsrO   rP   r   rR   r	   r   )
batch_sizepre_dispatchc                 S   s
   t | jS r5   )rH   transition_log)dask_schedulerr$   r$   r*   f      
ztest_dask_funcname.<locals>.f42c                 s   s    | ]	}d |d v V  qdS )batch_of_incr   Nr$   )r(   tupr$   r$   r*   rX      rY   z%test_dask_funcname.<locals>.<genexpr>)joblib._daskr   r`   reprr   r   r   r
   replacerun_on_schedulerr   )rQ   r   r   tasks
batch_reprrd   re   rf   rI   rk   r   r>   r$   r$   r*   test_dask_funcname   s(   
"r   c               	      s  dd t dD } tdtd d fdd	tdd	d
}t|}ztdd t fdd| D }W d    n1 sDw   Y  | dd t dD ksVJ t	d|}t
| dkseJ tdd |D spJ tdd t  fdd| D }W d    n1 sw   Y  t	d|}t
| dksJ tdd |D sJ W |jdd |jdd d S |jdd |jdd w )Nc                 S      g | ]}g qS r$   r$   rj   r$   r$   r*   rE          z;test_no_undesired_distributed_cache_hit.<locals>.<listcomp>d   numpyg    .Ac                    s(   |d urj |  | t j | S r5   )testingassert_array_equalappendr   hex)list_r   )Xr   r$   r*   isolated_operation   s   zCtest_no_undesired_distributed_cache_hit.<locals>.isolated_operationr   r	   rx   r   rR   c                 3   s    | ]	}t  |V  qd S r5   ri   r(   r   )r   r$   r*   rX      rY   z:test_no_undesired_distributed_cache_hit.<locals>.<genexpr>c                 S   r   r$   r$   rj   r$   r$   r*   rE      r   receive-from-scatterr   c                 S      g | ]}t |d kqS rA   rG   r(   rr$   r$   r*   rE      r   c                 3   s     | ]}t | d V  qdS )r   Nri   r   )r   r   r$   r*   rX      r_   c                 S   r   rA   r   r   r$   r$   r*   rE      r      timeoutr5   )r`   ra   importorskiparangerr   r   r   r   r
   rN   sumvaluesr   close)listsr   rI   rescountsr$   )r   r   r   r*   'test_no_undesired_distributed_cache_hit   s4   



r   c                   @   s(   e Zd Zdd Zdd ZeZdd ZdS )CountSerializedc                 C   s   || _ d| _d S )Nr   )r   count)selfr   r$   r$   r*   __init__   s   
zCountSerialized.__init__c                 C   s   | j t|d| S )Nr   )r   getattr)r   otherr$   r$   r*   __add__   s   zCountSerialized.__add__c                 C   s   |  j d7  _ t| jffS )Nr   )r   r   r   )r   r$   r$   r*   
__reduce__   s   zCountSerialized.__reduce__N)__name__
__module____qualname__r   r   __radd__r   r$   r$   r$   r*   r      s
    r   c                 C   s   | | | | | S r5   r$   )re   rf   cder$   r$   r*   add5  s   r   c                    s  dd t dD \}ttfddt dD }|ddddddg7 }d	d |D }t t\}}t|d
 | dZ td|gd tdd|}||kshJ W d    n1 srw   Y  tt	 td| dd W d    n1 sw   Y  W d    n1 sw   Y  W d    n1 sw   Y  W d    n1 sw   Y  |j
}j
|ksJ j
|ksJ j
}|fD ]}	d|	_
qt J\}}t|d
 | d/ t |fD ]}
 j|
ddt|
< q fdd|D }||ksJ W d    n	1 s"w   Y  W d    n	1 s2w   Y  |j
}j
|ksBJ j
|ksJJ ||ksQJ tdd tjdD }|dk roj
|d ksmJ d S j
|kswJ d S )Nc                 s       | ]}t |V  qd S r5   )r   rV   r$   r$   r*   rX         z&test_manual_scatter.<locals>.<genexpr>r   c              	      s   g | ]} d ddqS )r      r   r   r$   rj   )r   r   r   zr$   r*   rE     s    z'test_manual_scatter.<locals>.<listcomp>rZ   r   r   c                 S   s    g | ]\}}}||i |qS r$   r$   r(   funcr6   r7   r$   r$   r*   rE     s     rO   rP   r   )rS   scatterr   )r   )rS   rQ   r   r   T)	broadcastc              	      s`   g | ],\}}} j |gfd d|D R i tfdd| D dtt i qS )c                 3   s     | ]}  t||V  qd S r5   r'   id)r(   arg	scatteredr$   r*   rX   :  s    z1test_manual_scatter.<locals>.<listcomp>.<genexpr>c                 3   s(    | ]\}}|  t||fV  qd S r5   r   )r(   keyvaluer   r$   r*   rX   ;  
    
r   )submitdictr.   strr   resultr   )rI   r   r$   r*   rE   7  s    
c                 s   r   r5   )rr   )r(   r2   r$   r$   r*   rX   M  r   .)i  r   )r`   r   r   r   r   r   r
   ra   rb   	TypeErrorr   r   r   r   tupler   __version__split)rQ   rL   r   expectedrd   rk   results_parallel%n_serialization_scatter_with_paralleln_serialization_with_parallelvarobjresults_nativen_serialization_scatter_nativedistributed_versionr$   )rI   r   r   r   r   r   r*   test_manual_scatter  sf   


r   c           	   
      s  t d}|jtd|jd |jtd|jd} gd |gd  }t Z\}\}}t|d | d>}tdd t d	d
 t	|D  W d    n1 sPw   Y  t
d|}||d  ||d   dksjJ W d    n1 stw   Y  W d    n1 sw   Y  t i\}\}}t|d | dD}tdd t  fdd
tdD  W d    n1 sw   Y  t
d|}||d  dksJ ||d  dksJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   rl   r   r^   rO   rP   r   rR   c                 s   s(    | ]\}}t t||||d V  qdS ))optNr   r8   )r(   rW   r   r$   r$   r*   rX   f  r   z$test_auto_scatter.<locals>.<genexpr>r   r	   c                 3   s&    | ]}t t d d |V  qd S )Nr^   r   rV   data1r$   r*   rX   s  s   $ r   r   )ra   r   r   rr   r   r   r   r   r
   	enumeraterN   r`   )	loop_in_threadr   data2data_to_processrd   re   rf   rI   r   r$   r   r*   test_auto_scatter[  s8   




"
"r  retry_noc              
      s   t dd d}fdd fddt V\}\}}t|d | d1}td	d
 dt fddt|D }W d    n1 sKw   Y  W d    n1 sZw   Y  W d    d S W d    d S 1 srw   Y  d S )Nr   rZ   c                    s
     | S r5   )r   )r   rW   j)r   r$   r*   my_sum  r   z#test_nested_scatter.<locals>.my_sumc                    s^   t  }tdd t  fddtD }W d    t|S 1 s&w   Y  t|S )Nr   rR   c                 3   s(    | ]}t  |d  |V  qd S r5   ri   )r(   r  )arrayrW   r	  r$   r*   rX     s    
zEtest_nested_scatter.<locals>.outer_function_joblib.<locals>.<genexpr>)r   r   r
   r`   r   )r
  rW   rI   results)NUM_INNER_TASKSr	  )r
  rW   r*   outer_function_joblib  s   

z2test_nested_scatter.<locals>.outer_function_joblibrO   rP   r   rR   i'  c                 3   s&    | ]}t  |d  |V  qd S r5   ri   rV   )my_arrayr  r$   r*   rX     s
    
z&test_nested_scatter.<locals>.<genexpr>)ra   r   r   r   r   r   r
   r`   )rQ   r  NUM_OUTER_TASKSrd   re   rf   rk   r$   )r  r  r	  r   r  r*   test_nested_scatter{  s$   


"r  c              
      s|  dd  t  \}\}}t|d | d<}tdd' tdd fd	d
tdD }|D ]}tt|dks9J q-W d    n1 sDw   Y  W d    n1 sSw   Y  t|d | d<}tdd' tdd fdd
tdD }|D ]}tt|dksJ qyW d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                  S   sH   t tdddd tdD } | t tdddd tdD O } | S )Nr	   rt   c                 s       | ]	}t tj V  qd S r5   r   r%   getpidrj   r$   r$   r*   rX     rY   zOtest_nested_backend_context_manager.<locals>.get_nested_pids.<locals>.<genexpr>c                 s   r  r5   r  rj   r$   r$   r*   rX     rY   )setr
   r`   )pidsr$   r$   r*   get_nested_pids  s    $z<test_nested_backend_context_manager.<locals>.get_nested_pidsrO   rP   r   rR   r	   r  c                 3       | ]}t   V  qd S r5   ri   rj   r  r$   r*   rX         

z6test_nested_backend_context_manager.<locals>.<genexpr>rZ   c                 3   r  r5   ri   rj   r  r$   r*   rX     r  )r   r   r   r
   r`   rG   r  )r  rd   re   rf   rI   
pid_groups	pid_groupr$   r  r*   #test_nested_backend_context_manager  s6   	
"r  c           	         s6  dd   fddt  \}\}}t|d | d_}tddJ t $} |d	ks-J |jd
ks4J |fddtdD }W d    n1 sKw   Y  |D ]\}}|d	ks\J |d
ksbJ qRW d    n1 smw   Y  W d    n1 s|w   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                 S   s
   | j jjS r5   )rn   	__class__r   pr$   r$   r*   _backend_type  r   zJtest_nested_backend_context_manager_implicit_n_jobs.<locals>._backend_typec                     s8   t  }  | | jfW  d    S 1 sw   Y  d S r5   )r
   rt   r  )r!  r$   r*   get_nested_implicit_n_jobs  s   $zWtest_nested_backend_context_manager_implicit_n_jobs.<locals>.get_nested_implicit_n_jobsrO   rP   r   rR   r   ru   c                 3   r  r5   ri   rj   )r"  r$   r*   rX     r  zFtest_nested_backend_context_manager_implicit_n_jobs.<locals>.<genexpr>r	   )r   r   r   r
   rt   r`   )	rQ   rd   re   rf   rI   r   all_nested_n_jobsbackend_typenested_n_jobsr$   )r!  r"  r*   3test_nested_backend_context_manager_implicit_n_jobs  s,   
"r&  c              	   C   sn   t t}tdd W d    n1 sw   Y  W d    n1 s%w   Y  dt|j v s5J d S )Nr   rR   zcreate a dask client)ra   rb   r:   r   r   r   lower)rQ   infor$   r$   r*   test_errors  s   r)  c              
   C   s4  t  \}\}}t|d | dh}tdd# tdddd td	D }t|d
 d
 d
 ts2J W d    n1 s<w   Y  tdd# tdddd td	D }t|d
 d
 d
 tsbJ W d    n1 slw   Y  W d    n1 s{w   Y  W d    d S W d    d S 1 sw   Y  d S )NrO   rP   r   rR   r	   r  c                 s   s    | ]
}t td dV  qd S )Nnested_requirer   outerrj   r$   r$   r*   rX         
z.test_correct_nested_backend.<locals>.<genexpr>r   r   c                 s   s    | ]
}t td dV  qdS )	sharedmemr*  Nr,  rj   r$   r$   r*   rX     r.  )r   r   r   r
   r`   ro   r   r   )rQ   rd   re   rf   rI   r   r$   r$   r*   test_correct_nested_backend  s&   "r0  c                    s"   t ddd fddtdD S )Nr	   threads)rt   preferc                 3   s    | ]	}t t V  qd S r5   )r   middlerj   r*  r$   r*   rX     r   zouter.<locals>.<genexpr>r   r
   r`   r*  r$   r*  r*   r-    s   r-  c                 C   s   t d| ddd tdD S )Nr	   )rt   requirec                 s   r   r5   )r   innerrj   r$   r$   r*   rX     r   zmiddle.<locals>.<genexpr>r   r4  )r5  r$   r$   r*   r3    s   r3  c                   C   s   t  jS r5   )r
   rn   r$   r$   r$   r*   r6    s   r6  c              	   C   s   t | ddd4 tdd tdddd	 td
D  W d    n1 s&w   Y  W d    d S W d    d S 1 s>w   Y  d S )NFT)rQ   	processesset_as_defaultr   rR   r   r  c                 s   rT   r5   )r   r   rV   r$   r$   r*   rX     rY   z0test_secede_with_no_processes.<locals>.<genexpr>r	   )r   r   r
   r`   rP   r$   r$   r*   test_secede_with_no_processes  s   "r9  c                 C   s   ddl m} | jS )Nr   )
get_worker)r   r:  rO   )rk   r:  r$   r$   r*   _worker_address  s   r;  c              
   C   s0  t  \}\}}t|d | df}td|d d t dd tdD }||d gd ks1J W d    n1 s;w   Y  td|d d t dd tdD }||d gd ks`J W d    n1 sjw   Y  W d    n1 syw   Y  W d    d S W d    d S 1 sw   Y  d S )	NrO   rP   r   )rS   workersc                 s   rT   r5   r   r;  rV   r$   r$   r*   rX     rY   z-test_dask_backend_keywords.<locals>.<genexpr>rZ   c                 s   rT   r5   r=  rV   r$   r$   r*   rX     rY   r   rc   r$   r$   r*   test_dask_backend_keywords  s   "r>  c              	   C   s   t d| dI}tdd t dd tdD  W d    n1 s#w   Y  t }|jjjrBtd t |d	 k s=J |jjjs0|j	rGJ W d    d S 1 sRw   Y  d S )
NF)r7  rQ   r   rR   c                 s   rT   r5   rU   rV   r$   r$   r*   rX     rY   z/test_scheduler_tasks_cleanup.<locals>.<genexpr>rZ   g{Gz?r   )
r   r   r
   r`   r   r   	schedulerr   r   futures)rQ   rI   startr$   r$   r*   test_scheduler_tasks_cleanup
  s   

"rB  cluster_strategyadaptivelate_scalingz2.1.1z1.28.0z?distributed bug - https://github.com/dask/distributed/pull/2841)reasonc                 C   s   t dddd}t|}| dkr|jddd n	| dkr |d z7tdd	 t d
d tdD  W d    n1 s=w   Y  W |  |  d S W |  |  d S |  |  w )Nr   Fr	   ry   r7  rz   rD  )minimummaximumrE  r   rR   c                 s   rT   r5   rU   rV   r$   r$   r*   rX   +  rY   z(test_wait_for_workers.<locals>.<genexpr>rZ   )r   r   adaptscaler   r
   r`   r   )rC  r   rI   r$   r$   r*   test_wait_for_workers  s"   

rL  c               	   C   sB  t dddd} t| }ztddd- d}tjt|d	 t d
d tdD  W d    n1 s3w   Y  W d    n1 sBw   Y  tddd- d}tjt|d	 t dd tdD  W d    n1 snw   Y  W d    n1 s}w   Y  W |	  | 	  d S W |	  | 	  d S |	  | 	  w )Nr   Fr	   rG  r   g?)rS   wait_for_workers_timeoutz7DaskDistributedBackend has no worker after 0.1 seconds.)matchc                 s   rT   r5   rU   rV   r$   r$   r*   rX   :  rY   z0test_wait_for_workers_timeout.<locals>.<genexpr>rZ   z+DaskDistributedBackend has no active workerc                 s   rT   r5   rU   rV   r$   r$   r*   rX   @  rY   )
r   r   r   ra   rb   TimeoutErrorr
   r`   RuntimeErrorr   )r   rI   msgr$   r$   r*   test_wait_for_workers_timeout1  s0   
rR  rS   lokymultiprocessingc              	      s   t dd}t|}z: fdd}||}| }t|dks!J |d j}t|ts-J dt|v s5J W |j	dd	 |j	dd	 d S |j	dd	 |j	dd	 w )
Nr	   )ry   c                     sP   t jdd} td ddd tdD  W d    | S 1 s!w   Y  | S )NTrecordr	   )rt   rS   c                 s   rT   r5   rU   rV   r$   r$   r*   rX   R  rY   zftest_joblib_warning_inside_dask_daemonic_worker.<locals>.func_using_joblib_parallel.<locals>.<genexpr>rZ   )warningscatch_warningsr
   r`   rU  rR   r$   r*   func_using_joblib_parallelL  s    
zStest_joblib_warning_inside_dask_daemonic_worker.<locals>.func_using_joblib_parallelr   r   zdistributed.worker.daemonr   r   )
r   r   r   r   rG   messagero   UserWarningr   r   )rS   r   rI   rY  futrV  warningr$   rR   r*   /test_joblib_warning_inside_dask_daemonic_workerF  s   



r^  )r9   )r   r   )P
__future__r   r   r   r%   rW  r   r   r   uuidr   ra    r
   r   r   r   _daskr   rp   r   r   commonr   r   test_parallelr   r   r   r   r   r   r   r   r   distributed.metricsdistributed.utils_testr   r   r   fixturer3   r8   r=   rN   rh   rs   markparametrizer{   r   r   r   r   r   r   objectr   r   r   r  rH   r`   r  r  r&  r)  r0  r-  r3  r6  r9  r;  r>  rB  skipifr   rL  rR  r^  r$   r$   r$   r*   <module>   s    





7
V 
