o
    h                     @   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)pytestraises
ValueErrorr   )selfr   r   r	    r   a/var/www/vscode/kcb/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
   )shape
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   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
   r0   )r    linspacer   r   r,   r-   arange)r   r0   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            ?r8   r8   r
      )r9   r   r
   r1   	   r      r1   r+   )      ?r<   r<   r:   r:   r:         )@r=   )r   r<   r   )r   r9   r   r   )r
   r   r
   r
   r
   r
   r
   r8   r8   r8   r
   r9   )r9   r   r
   r
   r
   r
   r
   r1   r:   r   r;   r1   r   r   r   r
   )r    r!   r   r   r,   r   r-   diff)r   r   r   r.   w2y2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   r9   r7   r   r
   r   r:   r   )
r   8T笪@rC   rC   rC   rC   rC   8T笪@rD   rD   )r   r
   r   r1   d   r   r
   F)numendpointr7   r1   )dg        g_ӽ-?gO*e?g%2g?g;ك?g6Y:tW?g>l&?g?g:ǰ?g{?g!:Fv?gEr/?gk;?$'
"?rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   rH   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@rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   rI   r2   )r   r   r,   r   r-   r    r3   sinallr>   sum)r   r   r.   x_Rr5   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 )Nr9   r   Fr+   )r    r4   floatr*   flags	writeabler   rK   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 )Nr1   r   r9   r+   )r    r4   rP   r*   rQ   c_contiguousf_contiguousr   rK   rS   r,   r   r-   rT   r   r   r   test_non_contiguous_arrays   s   z1TestIsotonicRegression.test_non_contiguous_arrays)__name__
__module____qualname__r   markparametrizer   r'   r    r"   float32int64int32r/   r6   rB   rO   rU   rX   r   r   r   r   r   	   sF    



8r   )numpyr    numpy.testingr   r   r   scipy.optimize._pava_pybindr   scipy.optimizer   r   r   r   r   r   <module>   s    