o
    5ήc&                     @   sx   d dl Zd dlmZmZ d dlmZmZmZ d dl	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S )    N)assert_array_equalassert_equal)NonlinearConstraintBoundsPreparedConstraint)CanonicalConstraint initial_constraints_as_canonicalc                    sd   | || ||  | || | td fdd} fdd}fdd}|||fS )N)      r   c                    s"     |  d |  |   S )N      ?dotx)AHa i/tmp/pip-target-vg8gfxp4/lib/python/scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.pyfun   s   "z&create_quadratic_function.<locals>.func                    s     |  S Nr   r   )r   r   r   r   jac   s   z&create_quadratic_function.<locals>.jacc                    s
     |S r   r   )r   v)HTr   r   hess   s   
z'create_quadratic_function.<locals>.hess)randnp	transpose)nmrngr   r   r   r   )r   r   r   r   r   create_quadratic_function	   s   

r!   c                  C   s  t tj tj} tddg}t| |d}t|}t|jd t|j	d |
|\}}t|g  t|g  ||\}}t|td t|td t|jg  t tj dtjdgg d} tjg dtd	}t| |d}t|}t|jd t|j	d |
|\}}t|g  t|dd
g ||\}}t|td t|tg dg dg t|jddg t ddtj gtjg d} tjg dtd	}t| |d}t|}t|jd t|j	d |
|\}}t|g  t|ddg ||\}}t|td t|tg dg dg t|jddg t dtj ddgdtjddgg d} tg d}t| |d}t|}t|jd t|j	d |
|\}}t|dg t|g d ||\}}t|g dg t|g dg dg dg dg t|jg d d S )Nr
   Fr   )r   r
   r	   )FTT)r"   )dtyper      )r	   r   r   )r   r   r	   T)TFTr	   r
   r(   )r"   r   r   )r   r"   r   r(   
   )FTTT)r   r*            )r"   r#   r"   i)r   r   r   r	   )r	   r   r   r   )r   r   r	   r   )r"   r   r   r   )r   r   r"   r   )FTFT)r   r   infarrayr   r   from_PreparedConstraintr   n_eqn_ineqr   r   r   emptykeep_feasiblefloat)user_constraintx0prepared_constraintcc_eqc_ineqJ_eqJ_ineqr   r   r   test_bounds_cases   st   








r>   c               
   C   s  d} d}t jd}|| }t| ||\}}}||}||}ddt j t j dg}	ddt jdt jg}
t||	|
||g d}dD ]}t|||}t	|}t
|jd	 t
|jd
 ||\}}t
||d	 |	d	  g t
||d |
d  |	d
 |d
  |d |
d  |	d |d  g ||\}}|r| }| }t
||d  t
|t |d |d
  |d |d  f ||j}||j}t |}|d |d	< |d |d< |d	  |d
< |d |d  |d< t
||||||| t
|jg d qAd S )Nr(   r,   r   r*   TFFTFFTr	   r-   )r	   Nr
   )TFTT)r   randomRandomStater   r!   r.   r   r   r   r0   r   r1   r2   r   r   toarrayvstackzerosr   r4   )r   r   r    r7   r   r   r   fJlbubr6   sparse_jacobianr8   r9   r:   r;   r<   r=   v_eqv_ineqr   r   r   r   test_nonlinear_constraintm   sP   

 ,
rO   c                  C   s  t jd} d}| |}|}t |}dt j ddg}dt jt jdg}t||g d}t|d| \}}	}
||}|	|}d	dt j t j d
g}ddt jdt jg}t||||	|
g d}dD ]}t	|||}t	|||}t
|}t
|}t
||g|}t|jd t|jd ||\}}t||d |d  |d |d  g t||d |d  |d |d  |d |d  |d |d  |d |d  |d |d  |d |d  g ||\}}|r| }| }t|t |d |d f t|t |d  |d |d  |d |d  |d |d  f | |j}| |j}t d}|d |d< |d |d< |d  |d< |d |d  |d< ||||t |}t||
|| t|jg d q^d S )Nr   r-   r"   r#   r(   r	   FFTFr,   r?   r@   r*   rA   rB   r
         )TFFTFTT)r   rC   rD   r   eyer.   r   r!   r   r   r   r0   concatenater   r1   r2   r   r   r   rE   rF   rG   r   r   r4   )r    r   r7   f1J1lb1ub1boundsr   r   r   f2J2lb2ub2	nonlinearrL   bounds_preparednonlinear_preparedc1c2r9   r:   r;   r<   r=   rM   rN   r   r   r   r   r   test_concatenation   sh   




& $
rc   c                  C   s   t g d} td}t|jd t|jd || \}}t|g  t|g  |	| \}}t|t d t|t d |
| d d  }t|t d d S )Nr)   r(   r   r'   )r(   r(   )r   r/   r   r3   r   r1   r2   r   r   r   r   rE   rG   )r   r9   r:   r;   r<   r=   r   r   r   r   
test_empty   s   


rd   c                  C   s  t jd} t g d}t|}dt j ddg}dt jt jdg}t||g d}t|d| \}}}d	dt j t j d
g}	ddt jdt jg}
t||	|
||g d}dD ]}t	|||}t	|||}|j
j}|j
j}|j
j}|j
j}t|||g|\}}}}t||d |d  |d |	d  g t||d |d  |d |d  |d |d  |d |
d  |	d |d  |d |
d  |	d |d  g |r| }| }| }| }t|t |d |d f t|t |d  |d |d  |d |d  |d |d  f qSd S )Nr   )r   g?g333333?g?r"   r#   r(   r	   rP   r,   r?   r@   r*   rA   rB   r
   r-   )r   rC   rD   r/   lenr.   r   r!   r   r   r   rH   rI   r   r   rE   rF   )r    r7   r   rW   rX   rY   r   r   r   r\   r]   r^   rL   r_   r`   rU   rV   rZ   r[   r:   r;   r<   r=   r   r   r   %test_initial_constraints_as_canonical   sL   
& $
rf   c                  C   sv   d} dD ]4}t | g |\}}}}t|g  t|g  |r$| }| }t|td| f t|td| f qd S )Nr(   rB   r   )r   r   rE   r   r3   )r   rL   r:   r;   r<   r=   r   r   r   +test_initial_constraints_as_canonical_empty  s   

rg   )numpyr   numpy.testingr   r   scipy.optimize._constraintsr   r   r   7scipy.optimize._trustregion_constr.canonical_constraintr   r   r!   r>   rO   rc   rd   rf   rg   r   r   r   r   <module>   s    R0</