a
    BCCfN                     @   s   d dl Z zd dlmZ W n ey6   d dlmZ Y n0 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	 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 ZGdfdg ZHd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   Z/var/www/html/django/DPS/env/lib/python3.9/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   Zhstackyaybr   r   r   exp_bc!   s    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)   s    r2   c                 C   s(   t |  t | d  dt d  S )Nr   r   )r   expr   r   r   r   exp_sol5   s    r6   c                 C   s$   t |d |d d  |d  fS )Nr   r   r   r   r   r   pr   r   r   sl_fun9   s    r9   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   r3   )r"   r   r!   r   r   r8   nmr$   df_dpr   r   r   
sl_fun_jac=   s    
r>   c                 C   s$   t | d |d | d |d  fS r&   r'   r)   r*   r8   r   r   r   sl_bcL   s    r@   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   )rA   r   )r   r   r   zeros)r)   r*   r8   r0   r1   dbc_dpr   r   r   	sl_bc_jacP   s    


rF   c                 C   s   t |d |  S )Nr   )r   sinr   r8   r   r   r   sl_sol^   s    rI   c                 C   s   t |d |d d  fS )Nr   r      r   r   r   r   r   	emden_funb   s    rK   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_jacf   s    rN   c                 C   s   t | d |d d gS )Nr   r   LXz?r-   r(   r   r   r   emden_bco   s    rP   c                 C   s4   t ddgddgg}t ddgddgg}||fS r&   r-   r/   r   r   r   emden_bc_jacs   s    rQ   c                 C   s   d| d d  d S )Nr   r   rA         r   r5   r   r   r   	emden_sol   s    rS   c                 C   s
   t |S Nr   
zeros_liker   r   r   r   undefined_fun   s    rW   c                 C   s   t | d |d d gS r&   r-   r(   r   r   r   undefined_bc   s    rX   c                 C   s&   t |}|dd d |d d d< |S )Nr   r   rU   )r   r   fr   r   r   big_fun   s    
rZ   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    r^   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   rM   rA   rU   )r   r   r8   rY   r   r   r   big_fun_with_parameters   s
    
&&r_   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   rM   rA   r3   r"   r   rD   ranger:   r   r   r   big_fun_with_parameters_jac   s    
&&,,rb   c                 C   s>   t | d d d |d d d | d |d  | d |d  fS )Nr   r   r   rA   r'   r?   r   r   r   big_bc_with_parameters   s    rc   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   rB   rA   r`   )r)   r*   r8   r;   r0   r1   rE   r   r   r   big_bc_with_parameters_jac   s    
rd   c                 C   s*   t t |d |  t |d |  fS r&   )r   r   rG   rH   r   r   r   big_sol_with_parameters   s    re   c              	   C   s\   d}t |d | |d  |t jd  t t j|    t j|  t t j|     | fS )NMbP?r   r   )r   r   picosrG   )r   r   epsr   r   r   	shock_fun   s    (rj   c                 C   s   t | d d |d gS )Nr   r   r-   r(   r   r   r   shock_bc   s    rk   c                 C   s:   d}t d| }t t j|  t| | td|   S )Nrf   r   r   )r   sqrtrh   rg   r	   )r   ri   kr   r   r   	shock_sol   s    rn   c                 C   s   t |d t | gS )Nr   )r   stackrV   r   r   r   r   nonlin_bc_fun   s    rp   c                 C   s   | \}}|\}}d\}}}}	}
d| d }|t |
| t |
 |   }|||  }|	| d }|t |
| t |
 |   }|||  }t ||gS )N)g=
ףp=?{Gz?-C6?      ?g33333sC@              ?)r   r4   r.   )r)   r*   ZphiAZphipAZphiCZphipCkappaZioAZioCVrY   ZhAZiAZres0ZhCZiCZres1r   r   r   nonlin_bc_bc   s    ""rx   c                 C   s   dd|   S )Ng/g)?r   r5   r   r   r   nonlin_bc_sol  s    ry   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   rA   	   Zdtyper   r   )r   rs   r   rA   rJ      rz   )r   rA      r   )r   r   rA   )r}   rL   r~   g      r   r   r   rA   rM   rJ   r   )r   r.   floatr
   r   int)r   Z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   rJ   r   rq   g{Gz?c                 S   s
   t | |S rT   r   r7   r   r   r   <lambda>       z&test_compute_fun_jac.<locals>.<lambda>ru   
   rO   rr   c                 S   s
   t | |S rT   )rK   r7   r   r   r   r   4  r   )r   linspacer!   r"   r.   r   r%   r   r   rg   rG   rh   r9   r>   rN   )r   r   r8   r$   r=   Zdf_dy_anZ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   rs   rA   c                 S   s
   t | |S rT   r+   r?   r   r   r   r   ?  r   z%test_compute_bc_jac.<locals>.<lambda>rt   r   rB   d   ig      %@c                 S   s
   t | |S rT   )rP   r?   r   r   r   r   R  r   )	r   r.   r   r2   r   r   r@   rF   rQ   )	r)   r*   r8   r0   r1   rE   Z
dbc_dya_anZ
dbc_dyb_anZ	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   rM   )
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   Z	ones_liketoarrayr.   r   )r;   r<   rm   ijsZs_truer   r   r   test_compute_jac_indicesY  s$    r   c                  C   s8  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   rJ   r   r   g      @rB   rs      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   rR   rs   r-   )hr8   r   r   r   J_block  s    <Jz(test_compute_global_jac.<locals>.J_blockr   )r   r   )rz   r   )r   r   )r   r   绽|=rtolg:0yU>r   atol)r   r   r   diffr   rG   rg   rh   r.   r9   r>   rF   r   r   rD   ra   r   r   r   r@   )r;   r<   rm   Zi_jacZj_jacr   r   r   r8   rY   Zx_middleZy_middler$   r=   Zdf_dy_middleZdf_dp_middler0   r1   rE   Jr   ZJ_truer   r   r   r   test_compute_global_jacn  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   rs   )r   rA   r   r   rJ   )r   rM   c                 S   s
   t | |S rT   r   r7   r   r   r   fun  s    z&test_parameter_validation.<locals>.func                 S   s
   t | |S rT   r   r?   r   r   r   bc  s    z%test_parameter_validation.<locals>.bcr   )r8   c                 S   s
   t dS )NrA   rC   r   r   r   r   wrong_shape_fun  s    z2test_parameter_validation.<locals>.wrong_shape_fun)S)
r   rD   assert_raises
ValueErrorr   r   r+   r   r"   r.   )r   r   r   r   r   r   r   r   r   test_parameter_validation  s    

r   c               
   C   sH  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 qFq8d S )Nr   r   rJ   r   r   fun_jacbc_jach㈵>r   Zaxisrs   rf   r   r   )r   r   rD   r"   r%   r2   r   r   r+   r   statusr   successr   r]   solr   r6   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   sp  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 qJq<d S )Nr   rJ   r   r   rs   r8   r   r   r   r   rr   r   r   r   rf   r   )r   r   rg   r\   r"   r>   rF   r   r9   r@   r   r   r   r   r   r]   r   r8   r   rI   r   r   r   r   r   r   r   r   r   r   test_with_params  s0    

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 qbqTd S )Nr   r   r   g?r   )r   r   rO   rr   r3   )r   r   r   r   r   r   r   rs   rf   r   r   )r   r   r!   r.   rN   rQ   r   rK   rP   r   r   r   r   r   r]   r   r   rS   dotr   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_singular_term  s.    


r   c               
   C   sf  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 qJq<d S )Nr   r   rJ   r   r   r{   r   r   r   r   rs   rf   r   r   )r   r   rD   r"   complexr%   r2   r   r   r,   r   r   r   r   r   r   realr6   imagr   r   conjr   r   r   r   r   r   r   r   r   test_complex  s2    


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   rJ   )ZtolZ	max_nodes)r   r   rD   r]   r   r   r+   r   r   r   r   rW   rX   )r   r   resr   r   r   test_failures9  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   rJ   r   r   rs   rf   r   r   )r   r   rD   r]   r   rZ   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   test_big_problemG  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 ]P}ttt	||ddg||d}t
|jd t|j t|jddgd	d
 ||}td| dD ]L}t|| t|ddgd d	d	d t||d  t|ddgd d	d	d qt||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 qNq@d S )Nr   r   rJ   r   r   rs   r   r   rr   r   rM   r   r   rf   r   )r   r   rg   r\   r]   rb   rd   r   r_   rc   r   r   r   r   r   r8   r   ra   re   r   r   r   r   r   r   r   )r;   r   r   r   r   r   r   r   Zisolr   r   r   r   r   r   r    test_big_problem_with_parameters_  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 )NrB   r   rJ   r   r   r   n   r   r   r   rs   rf   r   )r   r   rD   r]   r   rj   rk   r   r   r   r   r   r   r   rn   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?rJ   r   r   r   r   r   r   rs   rf   r   )r   r   rD   r]   r   rp   rx   r   r   r   r   r   r   r   ry   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 ]}tj}t t_z&ttt	| ||d}tj
 }W |t_n|t_0 t|j |dkrt| | |dkrtd|v | |dkr&td|v | q&d S )	Nr   r   rJ   r   )r   r   r   )verbosez	Solved inzMax residual)r   r   rD   r"   sysstdoutr   r   r   r+   getvaluer   r   )r   r   r   Z
old_stdoutr   textr   r   r   test_verbose  s     
r   )Ir   r   ImportErrorionumpyr   Znumpy.testingr   r   r   r   Zpytestr   r   Zscipy.sparser   Zscipy.specialr	   Zscipy.integrate._bvpr
   r   r   r   r   r   r   r%   r+   r,   r2   r6   r9   r>   r@   rF   rI   rK   rN   rP   rQ   rS   rW   rX   rZ   r[   r^   r_   rb   rc   rd   re   rj   rk   rn   rp   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   st    			
 5!%