U
    /dw                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dl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S ))    N)exp)assert_assert_equal)rootc                     s$  d} d}t ttddddt ttddddt ttdd	d	dt ttd
d	d	dt ttddddt ttddddt ttddddt t	t
ddddt t	t
ddddt ttddddg
}tdddgdddgddgD ]R\}|D ]@  d } fdd}|f} d | }t||   |tj|||  }dt   }	 }
tjdd0 t|||t d| d d  |
|	|d!d"d#}W 5 Q R X t| tj||j|||j|j|jg	}t|j| t|j d d  k| t|j d$ k| ttj||j||k| qqd S )%Ngh㈵>-C6?i     )Fx0nnitnfevi'     i     i  d      c         i              ?g|=g    _Bcruzchengr
   c                    s    d |  | S )Nr    xr
   ZproblemZxscaleZyscaler   G/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/optimize/tests/test__spectral.py<lambda>)       z"test_performance.<locals>.<lambda>r	   ignore)Zoverr   r      )ftolfatolmaxfevsigma_0	sigma_epsline_searchDF-SANE)argsoptionsmethodr   )dictF_1x0_1F_2x0_2F_6x0_6F_7x0_7F_9x0_9F_10x0_10	itertoolsproductnpsqrtlinalgnormminZerrstater   reprr   successr   r   r   )Ze_aZe_rZtable_1r'   r
   funcr)   r	   r#   r&   r%   solerr_msgr   r   r   test_performance
   sV    	
(    rE   c                  C   s`   dd } d}d}t | ||dd}t|j tj| |}tj| |j}t||| k d S )Nc                 S   s   | d d d S )Nr   r!                  @r   )zr   r   r   rB   B   s    ztest_complex.<locals>.funcrF   r   r(   )Ztolr+   )r   r   rA   r;   r=   r>   r   )rB   r	   r"   rC   Zf0Zfxr   r   r   test_complexA   s    
rH   c                  C   s   d
dd} d}t jd t || ||}||| t dt |   }tt j|	 dk t |d }| ||d | ||d	 | | |d | | |d	 d S )Nr   c              	      st    fdd}t j }t j||d }t|t|dd|ddd}t|j tt j||j|k d S )	Nc                    s     |  S N)dot)r   Abr   r   r   X   r   zAtest_linear_definite.<locals>.check_solvability.<locals>.<lambda>g     @@r   isD  )r#   r"   r$   r'   r(   )r*   r+   )	r;   r=   Zsolver>   r   r,   r   rA   r   )rL   rM   r'   rB   ZxpZepsrC   r   rK   r   check_solvabilityW   s    
z/test_linear_definite.<locals>.check_solvabilityZ   i  r!   r   r   r   )r   )
r;   randomseedarangeZreshapeZdiagr   r=   Zeigvalsr?   )rN   r
   rL   rM   r   r   r   test_linear_definiteP   s    
	 rS   c                  C   sf   dd } t tfD ]P}tddg}tjddg|d}t| ||fdd}t|j t|j	j
|j
 qd S )Nc                 S   s   | | S rI   r   )r   argr   r   r   fq   s    ztest_shape.<locals>.fr   )Zdtyper(   )r)   r+   )floatcomplexr;   zerosonesr   r   rA   r   r   shape)rU   dtr   rT   rC   r   r   r   
test_shapep   s    
r\   c                 C   sd   t |g}t d|d }t| d d d |d< |t| dd  d | dd    |dd < |S )Nr   r!   r   r;   rX   rR   r   r   r
   gir   r   r   r-      s
    ,r-   c                 C   s"   t | g}|| | d   |S Nr!   r;   emptyfillr
   r	   r   r   r   r.      s    r.   c                 C   sd   t |g}t d|d }t| d d |d< d| t| dd  | d d  d  |dd < |S )Nr   r!   r   g?r]   r^   r   r   r   r/      s
    0r/   c                 C   s"   t | g}|d| d   |S )Nr!   r   rb   re   r   r   r   r0      s    r0   c                 C   s0  t |d d t|g}d| d d d  d| dd d d   d| dd d d   d| dd d   d	 |d d d< d
| d d d  d| dd d d   d| dd d d   d| dd d   | dd d  d| dd d d   d |dd d< d| dd d  d| dd d d   |dd d< |S )N   r   g333333?g?r!   g@r   g333333#@g333333@gQ?g
ףp=
?gQ	@gHzG@g?gHzG@g      ?g      ?)r   r;   rX   )r   r
   r_   r   r   r   F_4   s    ^2rh   c                 C   s*   t | d d tdddg| d  }|S )Nrg   r   rf         ?r   r;   arrayre   r   r   r   x0_4   s    rl   c                 C   sd   d}t d|d d | }| dd|d|  |d d d f |  |d d d f |  jdd    S )Ng?r!   ri   r   )Zaxis)r;   rR   sum)r   r
   cmur   r   r   r1      s    r1   c                 C   s   t | gS rI   r;   rY   r
   r   r   r   r2      s    r2   c                 C   s   t |d d dd }t|g}d| dd d d  d |d d d< t| d d d  t| dd d   d |dd d< || dd d |dd d< |S )	Nrg   r   c                 S   sd   d|  d }d| d  d| d   d|   d d | d	k || d	k< d|  d | dk || dk< |S )
Nri   r   irg   ix  i  i  i  rf   r   )tvr   r   r   phi   s    8zF_7.<locals>.phig     @r!   r   gqh ?)r   r;   rX   r   )r   r
   rt   r_   r   r   r   r3      s    $6r3   c                 C   s&   t | d d tdddg| d  S )Nrg   r   gMbP?r   r!   rj   rq   r   r   r   r4      s    r4   c                 C   s   t |g}t d|}| d d d | d d d  |d< | dd d  d || dd d  d  | dd  d d  |dd< | d d  d || d d  d  |d< |S )Nr   r   rg   r!   rf   )r;   rX   rR   r^   r   r   r   r5      s    $J*r5   c                 C   s   t | gS rI   rp   rq   r   r   r   r6      s    r6   c                 C   s   t d|  | |  S ra   )r;   logr   r   r   r   r7      s    r7   c                 C   s   t | gS rI   rp   rq   r   r   r   r8      s    r8   )r9   Znumpyr;   r   Znumpy.testingr   r   Zscipy.optimizer   rE   rH   rS   r\   r-   r.   r/   r0   rh   rl   r1   r2   r3   r4   r5   r6   r7   r8   r   r   r   r   <module>   s,   7 
