o
    i                     @   sJ   d dl Zd dlmZmZ d dlZd dlmZ d dlm	Z	 G dd dZ
dS )    N)assert_allcloseassert_equal)pava)isotonic_regressionc                   @   s  e Zd Zejdddggddfddgddggdfddgdgdfdddgdfddgddfddgddgdfgd	d
 Zdd Zejdej	ej
ejejgejdej	ej
ejejgejdddgdd Zejdddgdd Zdd Zdd Zdd Zdd ZdS ) TestIsotonicRegression)ywmsgr      Nz7array has incorrect number of dimensions: 2; expected 1   z<Input arrays y and w must have one dimension of equal lengthz#Weights w must be strictly positivec                 C   s@   t jt|d t||d W d    d S 1 sw   Y  d S )N)match)r   weights)pytestZraises
ValueErrorr   )selfr   r   r	    r   g/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/optimize/tests/test_isotonic_regression.pytest_raise_error
   s   "z'TestIsotonicRegression.test_raise_errorc                 C   st   t jg dt jd}t |}t j|jd d dt jd}t||| t|g d t|g d t|g d	 d S )
N      r   r   r   r   r   dtyper   r
   )shapeZ
fill_valuer   r   r   r   r   r   r   r   )   r
   r
   r
   r
   r
   r
   )r   r      r   r   r   r   r   )	nparrayfloat64	ones_likefullr   Zintpr   r   )r   r   r   rr   r   r   test_simple_pava   s   
z'TestIsotonicRegression.test_simple_pavay_dtypew_dtyper   onesc                 C   s   t jg d|d}|d urt j||d}t||d}|jjt jks#J |jjt jks,J t|jg d t|jddg t|j	g d t
|t jg dt jd d S )Nr   r   r   r   r   r
   )r   r   r   )r   r   r!   r   xr   r    r   r   blocksr   )r   r   r&   r%   r   resr   r   r   test_simple_isotonic_regression,   s   z6TestIsotonicRegression.test_simple_isotonic_regression
increasingTFc                 C   sV   d}|rt dd|nt dd|}t||d}t|j| t|jt |d  d S )N
   r   r
   r-   )r   linspacer   r   r)   r*   arange)r   r-   nr   r+   r   r   r   test_linspace>   s
    z$TestIsotonicRegression.test_linspacec                 C   s   t g d}t g d}t||d}t|jg d t|jg d t|jg d t g d}t g d}t||d}tt |jd	d
 d	 t|jdd  |j t|j|j t|jdd  d |jdd   d S )N)r
   r            ?r5   r5   r
      )r6   r   r
   r.   	   r      r.   r(   )      ?r9   r9   r7   r7   r7         )@r:   )r   r9   r   )r   r6   r   r   )r
   r   r
   r
   r
   r
   r
   r5   r5   r5   r
   r6   )r6   r   r
   r
   r
   r
   r
   r.   r7   r   r8   r.   r   r   r   r
   )r   r   r   r   r)   r   r*   diff)r   r   r   r+   Zw2y2Zres2r   r   r   test_weightsF   s   &z#TestIsotonicRegression.test_weightsc                 C   s   g d}t |}g d}t|j| t|jg d d}tjdd|dd}d	| td
|  }t |}g d}t|j| tt	|jdksKJ tt
|jt
| t | dd}t|j |j t|j|j d S )N)
r   r   r   r6   r4   r   r
   r   r7   r   )
r   8T笪@r>   r>   r>   r>   r>   8T笪@r?   r?   )r   r
   r   r.   d   r   r
   F)numZendpointr4   r.   )dg        g_ӽ-?gO*e?g%2g?g;ك?g6Y:tW?g>l&?g?g:ǰ?g{?g!:Fv?gEr/?gk;?$'
"?rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   rB   gV ?gQk?v?g0n?g<?g [ @g7Y@g[d@g2-ڱ{@g+@g>	l@goT@gZO"@gN%U	@glJ
@gt NԐ@go@gDN>	@gVi$'@glO@gc@g]@gǾ@g{ur @gfue@g@gkY@gHZ@DFjv@rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   rC   r/   )r   r   r)   r   r*   r   r0   sinallr;   sum)r   r   r+   Zx_Rr2   Zres_invr   r   r   test_against_R_monotoneX   s    z.TestIsotonicRegression.test_against_R_monotonec                 C   s~   t jdtd}t jdtd}d|j_d|j_t||d}t t |j	s'J t t |j
s2J t t |js=J d S )Nr6   r   Fr(   )r   r1   floatr'   flagsZ	writeabler   rE   isfiniter)   r   r*   r   r)   r   r+   r   r   r   test_readonly   s   z$TestIsotonicRegression.test_readonlyc                 C   s   t jdtdd d d }t jdtdd d d }|jjrJ |jjr$J |jjr*J |jjr0J t||d}t t 	|j
sAJ t t 	|jsLJ t t 	|jsWJ d S )Nr.   r   r6   r(   )r   r1   rH   r'   rI   c_contiguousf_contiguousr   rE   rJ   r)   r   r*   rK   r   r   r   test_non_contiguous_arrays   s   z1TestIsotonicRegression.test_non_contiguous_arrays)__name__
__module____qualname__r   markZparametrizer   r$   r   r    Zfloat32Zint64Zint32r,   r3   r=   rG   rL   rO   r   r   r   r   r   	   sF    



8r   )numpyr   Znumpy.testingr   r   r   Zscipy.optimize._pava_pybindr   Zscipy.optimizer   r   r   r   r   r   <module>   s    