o
    Ö­jÿN  ã                   @   s0  d dl Z zd dlmZ W n ey   d dlmZ Y nw 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 d dlmZ d dlmZmZmZmZmZmZ d dlZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$d d!„ Z%d"d#„ Z&d$d%„ Z'd&d'„ Z(d(d)„ Z)d*d+„ Z*d,d-„ Z+d.d/„ Z,d0d1„ Z-d2d3„ Z.d4d5„ Z/d6d7„ Z0d8d9„ Z1d:d;„ Z2d<d=„ Z3d>d?„ Z4d@dA„ Z5dBdC„ Z6dDdE„ Z7dFdG„ Z8dHdI„ Z9dJdK„ Z:dLdM„ Z;dNdO„ Z<dPdQ„ Z=dRdS„ Z>dTdU„ Z?dVdW„ Z@dXdY„ ZAdZd[„ ZBd\d]„ ZCd^d_„ ZDd`da„ ZEdbdc„ ZFddde„ ZGejHjIdfdg„ ƒZJdS )hé    N)ÚStringIO)Úassert_Úassert_array_equalÚassert_allcloseÚassert_equal)Úraises)Ú
coo_matrix)Úerf)Úmodify_meshÚestimate_fun_jacÚestimate_bc_jacÚcompute_jac_indicesÚconstruct_global_jacÚ	solve_bvpc                 C   s   t  |d |d f¡S ©Né   r   ©ÚnpÚvstack©ÚxÚy© r   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/integrate/tests/test_bvp.pyÚexp_fun   s   r   c                 C   s:   t  dd| jd f¡}d|d< d|d< d|d< d|d< |S )Né   r   ©r   r   r   ©r   r   ©r   r   ©r   r   ©r   ÚemptyÚshape©r   r   Údf_dyr   r   r   Úexp_fun_jac   s   r%   c                 C   s   t  | d d |d f¡S ©Nr   r   ©r   Úhstack©ÚyaÚybr   r   r   Úexp_bc#   ó   r,   c                 C   s   t  | d d d |d f¡S )Nr   r   y              ð?r'   r)   r   r   r   Úexp_bc_complex'   s   r.   c                 C   s4   t  ddgddgg¡}t  ddgddgg¡}||fS r   ©r   Úarray©r*   r+   Údbc_dyaÚdbc_dybr   r   r   Ú
exp_bc_jac+   ó   þþr4   c                 C   s(   t  |  ¡t  | d ¡ dt  d¡  S )Nr   r   éþÿÿÿ)r   Úexp©r   r   r   r   Úexp_sol7   s   (r9   c                 C   s$   t  |d |d d  |d  f¡S )Nr   r   r   r   ©r   r   Úpr   r   r   Úsl_fun;   ó   $r<   c                 C   s|   |j \}}t |d|f¡}d|d< d|d< |d d  |d< d|d< t |d|f¡}d|d< d|d  |d  |d< ||fS )	Nr   r   r   r   r   r   r   r6   )r"   r   r!   ©r   r   r;   ÚnÚmr$   Údf_dpr   r   r   Ú
sl_fun_jac?   s   
rB   c                 C   s$   t  | d |d | d |d  f¡S r&   r'   ©r*   r+   r;   r   r   r   Úsl_bcN   r=   rD   c                 C   sH   t  d¡}d|d< d|d< t  d¡}d|d< t  d¡}d|d< |||fS )	N)é   r   r   r   )r   r   r   )rE   r   éÿÿÿÿ)r   r   ©r   Úzeros)r*   r+   r;   r2   r3   Údbc_dpr   r   r   Ú	sl_bc_jacR   s   



rJ   c                 C   s   t  |d |  ¡S )Nr   )r   Úsin©r   r;   r   r   r   Úsl_sol`   s   rM   c                 C   s   t  |d |d d  f¡S )Nr   r   é   r   r   r   r   r   Ú	emden_fund   s   rO   c                 C   sF   t  dd| jd f¡}d|d< d|d< d|d d  |d< d|d	< |S )
Nr   r   r   r   r   éûÿÿÿé   r   r   r    r#   r   r   r   Úemden_fun_jach   s   rR   c                 C   s   t  | d |d d g¡S )Nr   r   çªLXèz¶ë?r/   r)   r   r   r   Úemden_bcq   r-   rT   c                 C   s4   t  ddgddgg¡}t  ddgddgg¡}||fS r&   r/   r1   r   r   r   Úemden_bc_jacu   r5   rU   c                 C   s   d| d d  d S )Nr   r   rE   ç      à¿r   r8   r   r   r   Ú	emden_sol�   s   rW   c                 C   s
   t  |¡S ©N©r   Ú
zeros_liker   r   r   r   Úundefined_fun…   ó   
r[   c                 C   s   t  | d |d d g¡S r&   r/   r)   r   r   r   Úundefined_bc‰   r-   r]   c                 C   s&   t  |¡}|dd d… |d d d…< |S )Nr   r   rY   )r   r   Úfr   r   r   Úbig_fun�   s   
r_   c                 C   s&   t  | d d d… |d d d… d f¡S )Nr   r   r'   r)   r   r   r   Úbig_bc“   s   &r`   c                 C   s&   t  d| | jf¡}| |d d d…< | S )Nr   )r   ÚonesÚsize)r   r?   r   r   r   r   Úbig_sol—   s   rc   c                 C   sr   t  |¡}|ddd… |ddd…< |d d  |ddd…  |ddd…< |d d  |ddd…  |ddd…< |S )aý   Big version of sl_fun, with two parameters.

    The two differential equations represented by sl_fun are broadcast to the
    number of rows of y, rotating between the parameters p[0] and p[1].
    Here are the differential equations:

        dy[0]/dt = y[1]
        dy[1]/dt = -p[0]**2 * y[0]
        dy[2]/dt = y[3]
        dy[3]/dt = -p[1]**2 * y[2]
        dy[4]/dt = y[5]
        dy[5]/dt = -p[0]**2 * y[4]
        dy[6]/dt = y[7]
        dy[7]/dt = -p[1]**2 * y[6]
        .
        .
        .

    r   Nr   r   rQ   rE   rY   )r   r   r;   r^   r   r   r   Úbig_fun_with_parameters�   s
   
&&rd   c                 C   sò   |j \}}t |||f¡}d|td|dƒtd|dƒf< |d d  |td|dƒtd|dƒf< |d d  |td|dƒtd|dƒf< t |d|f¡}d|d  |td|dƒ  |td|dƒdf< d|d  |td|dƒ  |td|dƒdf< ||fS )Nr   r   r   rQ   rE   r6   ©r"   r   rH   Úranger>   r   r   r   Úbig_fun_with_parameters_jac¸   s   
&&,,rg   c                 C   s>   t  | d d d… |d d d… | d |d  | d |d  f¡S )Nr   r   r   rE   r'   rC   r   r   r   Úbig_bc_with_parametersÇ   s   >rh   c                 C   s¼   | j d }t |d |f¡}t |d |f¡}d|t|d ƒtd|dƒf< d|t|d |ƒtd|dƒf< t |d df¡}d||df< d||df< d||d df< d||d df< |||fS )Nr   r   r   rF   rE   re   )r*   r+   r;   r?   r2   r3   rI   r   r   r   Úbig_bc_with_parameters_jacÌ   s   

ri   c                 C   s*   t  t  |d |  ¡t  |d |  ¡f¡S r&   )r   r   rK   rL   r   r   r   Úbig_sol_with_parametersÞ   s   *rj   c              	   C   s\   d}t  |d | |d  |t jd  t  t j|  ¡  t j|  t  t j|  ¡   | f¡S )Nçü©ñÒMbP?r   r   )r   r   ÚpiÚcosrK   )r   r   Úepsr   r   r   Ú	shock_funã   s   (ÿÿþro   c                 C   s   t  | d d |d g¡S )Nr   r   r/   r)   r   r   r   Úshock_bcì   r-   rp   c                 C   s:   d}t  d| ¡}t  t j|  ¡t| | ƒtd| ƒ  S )Nrk   r   r   )r   Úsqrtrm   rl   r	   )r   rn   Úkr   r   r   Ú	shock_solð   s   (rs   c                 C   s   t  |d t  | ¡g¡S )Nr   )r   ÚstackrZ   r   r   r   r   Únonlin_bc_funö   s   ru   c                 C   s    | \}}|\}}d\}}}}	}
d| d }|t  |
| ¡t  |
 | ¡  }|||  }|	| d }|t  |
| ¡t  |
 | ¡  }|||  }t  ||g¡S )N)g=
×£p=ú?ç{®Gáz„?ç-Cëâ6?ç      à?g33333sC@ç        ç      ð?)r   r7   r0   )r*   r+   ÚphiAÚphipAÚphiCÚphipCÚkappaÚioAÚioCÚVr^   ÚhAÚiAÚres0ÚhCÚiCÚres1r   r   r   Únonlin_bc_bcû   s   ""r‰   c                 C   s   dd|   S )NgÝ“/Á¿g)ø·ò?r   r8   r   r   r   Únonlin_bc_sol  s   rŠ   c                  C   sˆ   t jg d¢td�} t| t  dg¡t  dg¡ƒ}t|t  g d¢¡ƒ t jg d¢td�} t| t jdgtd�t  g d¢¡ƒ}t|g d	¢ƒ d S )
N)r   r   rE   é	   ©Údtyper   r   )r   rx   r   rE   rN   é   r‹   )éúÿÿÿéýÿÿÿr   rE   é   r   )r   r   rE   )r�   rP   éüÿÿÿr�   g      ø¿r   r   r   rE   rQ   rN   r‘   )r   r0   Úfloatr
   r   Úint)r   Úx_newr   r   r   Útest_modify_mesh  s   "r–   c                  C   sj  t  ddd¡} t  d| jd f¡}d|d< d|d< t  g ¡}tdd„ | ||ƒ\}}t| |ƒ}t||ƒ t|d u ƒ t  dt j	d¡} t  d| jd f¡}t  
| ¡|d< t  | ¡|d< t  d	g¡}tt| ||ƒ\}}t| ||ƒ\}}t||ƒ t||ƒ t  ddd
¡} t  d| jd f¡}d|d< d|d< t  g ¡}tdd„ | ||ƒ\}}t| |ƒ}t||ƒ t|d u ƒ d S )Nr   r   rN   r   rv   g{®Gáz”?c                 S   ó
   t | |ƒS rX   ©r   r:   r   r   r   Ú<lambda>"  ó   
 z&test_compute_fun_jac.<locals>.<lambda>rz   é
   rS   rw   c                 S   r—   rX   )rO   r:   r   r   r   r™   6  rš   )r   Úlinspacer!   r"   r0   r   r%   r   r   rl   rK   rm   r<   rB   rR   )r   r   r;   r$   rA   Údf_dy_anÚdf_dp_anr   r   r   Útest_compute_fun_jac  s6   







rŸ   c            	      C   sH  t  ddg¡} t  ddg¡}t  g ¡}tdd„ | ||ƒ\}}}t| |ƒ\}}t||ƒ t||ƒ t|d u ƒ t  ddg¡} t  dd	g¡}t  dg¡}tt| ||ƒ\}}}t| ||ƒ\}}}t||ƒ t||ƒ t||ƒ t  dd
g¡} t  ddg¡}t  g ¡}tdd„ | ||ƒ\}}}t| |ƒ\}}t||ƒ t||ƒ t|d u ƒ d S )Ng      ð¿r   rx   rE   c                 S   r—   rX   ©r,   rC   r   r   r   r™   A  rš   z%test_compute_bc_jac.<locals>.<lambda>ry   r   rF   éd   iüÿÿg      %@c                 S   r—   rX   )rT   rC   r   r   r   r™   T  rš   )	r   r0   r   r4   r   r   rD   rJ   rU   )	r*   r+   r;   r2   r3   rI   Ú
dbc_dya_anÚ
dbc_dyb_anÚ	dbc_dp_anr   r   r   Útest_compute_bc_jac<  s8   

ÿ






ÿ

r¥   c                  C   sŠ   d} d}d}t | ||ƒ\}}tt |¡||ffƒ ¡ }t g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
¡}t||ƒ d S )Nr   rQ   )
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   r   r   r   )r   r   r   Ú	ones_likeÚtoarrayr0   r   )r?   r@   rr   ÚiÚjÚsÚs_truer   r   r   Útest_compute_jac_indices[  s$   ör¬   c                  C   s6  d} d}d}t dddƒ\}}t ddd¡}t |¡}t t tj| ¡tjt tj| ¡ f¡}t dg¡}t	|||ƒ}	|d d… d|  }
d|d d …d d…f |d d …dd …f   |d |	d d …dd …f |	d d …d d…f    }t
|||ƒ\}}t
|
||ƒ\}}t|d d …df |d d …df |ƒ\}}}t| ||||||||||||ƒ}| ¡ }d	d
„ }t ||  | ||  | f¡}t|d ƒD ]}||| |d ƒ|||  |d |  …||  |d |  …f< qÆ||d  d |dd d…f |ddd …f   |d |d |  d…df< |||dd d…f |ddd …f   |d d |dd d…f |ddd …f     |d|d |  d…df< d|d< d|d< d|d< d|d< t||dd� tt	|||ƒ\}}tt	|
||ƒ\}}tt|d d …df |d d …df |ƒ\}}}t| ||||||||||||ƒ}| ¡ }t||ddd� d S )Nr   rN   r   r   g      @rF   rx   é   c              
   S   s�   t  | d |d  d d d|  | d  |d  d d d|  gd|  |d  | d |d  d d d|  |d  d| d |d  d  gg¡S )Nr   é   r   rV   rx   r/   )Úhr;   r   r   r   ÚJ_block‡  s   <Jþz(test_compute_global_jac.<locals>.J_blockr‘   )r­   r   )r‹   r­   )r›   r   )r›   r›   ç»½×Ùß|Û=©Úrtolg:Œ0âŽyU>©r³   Úatol)r   r   rœ   Údiffr   rK   rl   rm   r0   r<   rB   rJ   r   r§   rH   rf   r   r   r   rD   )r?   r@   rr   Úi_jacÚj_jacr   r¯   r   r;   r^   Úx_middleÚy_middler$   rA   Údf_dy_middleÚdf_dp_middler2   r3   rI   ÚJr°   ÚJ_truer¨   r   r   r   Útest_compute_global_jacp  sN   
,\*
ÿ<F$*ÿ,
ÿr¿   c               	   C   sÎ   g d¢} t  d¡}ttttt| |ƒ t  ddd¡} t  d¡}ttttt| |ƒ dd„ }d	d
„ }t  d| jd f¡}ttt||| |dgd� dd„ }ttt||| |ƒ t  	ddgg¡}ttttt| ||d� d S )N)r   r   rx   )r   rE   r   r   rN   )r   rQ   c                 S   r—   rX   r˜   r:   r   r   r   Úfun®  r\   z&test_parameter_validation.<locals>.func                 S   r—   rX   r    rC   r   r   r   Úbc°  r\   z%test_parameter_validation.<locals>.bcr   )r;   c                 S   s
   t  d¡S )NrE   rG   r   r   r   r   Úwrong_shape_fun¶  r\   z2test_parameter_validation.<locals>.wrong_shape_fun)ÚS)
r   rH   Úassert_raisesÚ
ValueErrorr   r   r,   rœ   r"   r0   )r   r   rÀ   rÁ   rÂ   rÃ   r   r   r   Útest_parameter_validation¥  s   

rÆ   c               
   C   sF  t  ddd¡} t  ddd¡}t  d| jd f¡}d tfD ]„}d tfD ]}}ttt| |||d�}t	|j
dƒ t|jƒ t	|jjdƒ | |¡}t|d t|ƒdd� t||ƒ}| |d¡| }|dt  |¡  }	t j|	d dd	�d
 }
tt  |
dk ¡ƒ tt  |jdk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� q"qd S )Nr   r   rN   r¡   r   ©Úfun_jacÚbc_jacçñhãˆµøä>©rµ   ©Úaxisrx   rk   r±   r´   )r   rœ   rH   r"   r%   r4   r   r   r,   r   Ústatusr   Úsuccessr   rb   Úsolr   r9   ÚabsÚsumÚallÚrms_residualsr   Úyp©r   Úx_testr   rÈ   rÉ   rÐ   Úsol_testÚf_testÚrÚrel_resÚnorm_resr   r   r   Útest_no_params¿  s.   ÿ


ëÿrÝ   c                  C   sl  t  dt jd¡} t  dt jd¡}t  d| jd f¡}d tfD ]•}d tfD ]Ž}ttt	| |dg||d�}t
|jdƒ t|jƒ t|jjdk ƒ t|jdgd	d
� | |¡}t|d t|dgƒd	d	d� t||dgƒ}| |d¡| }|dt  |¡  }	t j|	d dd�d }
tt  |
dk ¡ƒ tt  |jdk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� q$qd S )Nr   rN   r¡   r   rx   ©r;   rÈ   rÉ   r›   r   rw   r²   r´   rÌ   rk   r±   )r   rœ   rl   ra   r"   rB   rJ   r   r<   rD   r   rÎ   r   rÏ   r   rb   r   r;   rÐ   rM   rÑ   rÒ   rÓ   rÔ   r   rÕ   rÖ   r   r   r   Útest_with_paramsÜ  s4   ÿ

ÿèÿrß   c                  C   s^  t  ddd¡} t  ddd¡}t  d¡}d|d< d|d< t  ddgdd	gg¡}d tfD ]‚}d tfD ]{}ttt| ||||d
�}t	|j
dƒ t|jƒ t	|jjdƒ | |¡}t|d t|ƒdd� t||ƒ| |¡|  }| |d¡| }	|	dt  |¡  }
t j|
d dd�d }tt  |dk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� q0q*d S )Nr   r   r›   gš™™™™™©?r¡   )r   r›   rS   rw   r6   )rÃ   rÈ   rÉ   rÊ   rË   r   rÌ   rx   rk   r±   r´   )r   rœ   r!   r0   rR   rU   r   rO   rT   r   rÎ   r   rÏ   r   rb   rÐ   r   rW   ÚdotrÑ   rÒ   rÓ   r   rÕ   )r   r×   r   rÃ   rÈ   rÉ   rÐ   rØ   rÙ   rÚ   rÛ   rÜ   r   r   r   Útest_singular_termý  s2   
ÿ

íÿrá   c               
   C   sb  t  ddd¡} t  ddd¡}t jd| jd ftd�}d tfD ]�}d tfD ]‰}ttt	| |||d�}t
|jdƒ t|jƒ | |¡}t|d jt|ƒdd	� t|d jt|ƒdd	� t||ƒ}| |d¡| }|dt  |¡  }	t jt  |	t  |	¡ ¡dd
�d }
tt  |
dk ¡ƒ tt  |jdk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� q$qd S )Nr   r   rN   r¡   r   rŒ   rÇ   rÊ   rË   rÌ   rx   rk   r±   r´   )r   rœ   rH   r"   Úcomplexr%   r4   r   r   r.   r   rÎ   r   rÏ   rÐ   r   Úrealr9   ÚimagrÑ   rÒ   ÚconjrÓ   rÔ   r   r   rÕ   rÖ   r   r   r   Útest_complex  s6   ÿ


ÿÿëÿræ   c                  C   s’   t  ddd¡} t  d| jf¡}ttt| |ddd�}t|jdƒ t	|j
 ƒ t  ddd¡} t  d| jf¡}ttt| |ƒ}t|jdƒ t	|j
 ƒ d S )Nr   r   r   rÊ   rN   )ÚtolÚ	max_nodes)r   rœ   rH   rb   r   r   r,   r   rÎ   r   rÏ   r[   r]   )r   r   Úresr   r   r   Útest_failures;  s   rê   c            	      C   s  d} t  ddd¡}t  d|  |jf¡}ttt||ƒ}t|jdƒ t	|j
ƒ | |¡}t|d t|| ƒƒ t||ƒ}| |d¡| }|dt  |¡  }t jt  |t  |¡ ¡dd�d }t	t  |dk ¡ƒ t	t  |jdk ¡ƒ t| |j¡|jd	d	d
� t| |jd¡|jd	d	d
� d S )Né   r   r   rN   r   rÌ   rx   rk   r±   r´   )r   rœ   rH   rb   r   r_   r`   r   rÎ   r   rÏ   rÐ   r   rc   rÑ   rÒ   rã   rå   rÓ   rÔ   r   r   rÕ   )	r?   r   r   rÐ   rØ   rÙ   rÚ   rÛ   rÜ   r   r   r   Útest_big_problemI  s    


" rì   c                  C   s¤  d} t  dt jd¡}t  dt jd¡}t  d|  |jf¡}d tfD ]¯}d tfD ]¨}ttt	||ddg||d�}t
|jdƒ t|jƒ t|jddgd	d
� | |¡}td| dƒD ]&}t|| t|ddgƒd d	d	d� t||d  t|ddgƒd d	d	d� qUt||ddgƒ}	| |d¡|	 }
|
dt  |	¡  }t j|d dd�d }tt  |dk ¡ƒ tt  |jdk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� q&q d S )Nrë   r   rN   r¡   r   rx   rÞ   r   rw   r²   rQ   r´   rÌ   rk   r±   )r   rœ   rl   ra   rb   rg   ri   r   rd   rh   r   rÎ   r   rÏ   r   r;   rÐ   rf   rj   rÑ   rÒ   rÓ   rÔ   r   r   rÕ   )r?   r   r×   r   rÈ   rÉ   rÐ   rØ   ÚisolrÙ   rÚ   rÛ   rÜ   r   r   r   Ú test_big_problem_with_parametersa  s@   ÿ

þþåÿrî   c            	      C   s  t  ddd¡} t  ddd¡}t  d| jf¡}ttt| |ƒ}t|jdƒ t	|j
ƒ t	|jjdk ƒ | |¡}t|d t|ƒddd	� t||ƒ}| |d¡| }|dt  |¡  }t j|d dd
�d }t	t  |dk ¡ƒ t| |j¡|jddd	� t| |jd¡|jddd	� d S )NrF   r   rN   r¡   r   r   én   rÊ   r´   rÌ   rx   rk   r±   )r   rœ   rH   rb   r   ro   rp   r   rÎ   r   rÏ   r   rÐ   r   rs   rÑ   rÒ   rÓ   r   rÕ   ©	r   r×   r   rÐ   rØ   rÙ   rÚ   rÛ   rÜ   r   r   r   Útest_shock_layer†  s    


 rñ   c            	      C   s  t  ddd¡} | }t  d| jg¡}ttt| |ƒ}t|jdƒ t	|j
ƒ t	|jjdk ƒ | |¡}t|d t|ƒddd� t||ƒ}| |d¡| }|dt  |¡  }t j|d dd	�d
 }t	t  |dk ¡ƒ t| |j¡|jddd� t| |jd¡|jddd� d S )Nr   gš™™™™™¹?rN   r   r­   rÊ   r´   r   rÌ   rx   rk   r±   )r   rœ   rH   rb   r   ru   r‰   r   rÎ   r   rÏ   r   rÐ   r   rŠ   rÑ   rÒ   rÓ   r   rÕ   rð   r   r   r   Útest_nonlin_bcž  s    


 rò   c               	   C   s¸   t  ddd¡} t  d| jd f¡}dD ]F}tj}tƒ t_zttt	| ||d�}tj 
¡ }W |t_n|t_w t|jƒ |dkrCt| |ƒ |dkrNtd|v |ƒ |dkrYtd|v |ƒ qd S )	Nr   r   rN   r   )r   r   r   )Úverbosez	Solved inzMax residual)r   rœ   rH   r"   ÚsysÚstdoutr   r   r   r,   Úgetvaluer   rÏ   )r   r   ró   Ú
old_stdoutrÐ   Útextr   r   r   Útest_verbose¶  s$   
€ñrù   )Krô   r   ÚImportErrorÚioÚnumpyr   Únumpy.testingr   r   r   r   Úpytestr   rÄ   Úscipy.sparser   Úscipy.specialr	   Úscipy.integrate._bvpr
   r   r   r   r   r   r   r%   r,   r.   r4   r9   r<   rB   rD   rJ   rM   rO   rR   rT   rU   rW   r[   r]   r_   r`   rc   rd   rg   rh   ri   rj   ro   rp   rs   ru   r‰   rŠ   r–   rŸ   r¥   r¬   r¿   rÆ   rÝ   rß   rá   ræ   rê   rì   rî   rñ   rò   ÚmarkÚthread_unsaferù   r   r   r   r   Ú<module>   s|    ÿ 			
 5!%