B
    &]\                 @   sZ   d dl mZmZmZ d dlZG dd deZG dd deZdd Z	d	d
 Z
dddZdS )    )divisionprint_functionabsolute_importNc               @   s   e Zd Zdd ZdS )_FakeMatrixc             C   s   || _ |j| _d S )N)_dataZ__array_interface__)selfdata r	   6lib/python3.7/site-packages/scipy/linalg/_testutils.py__init__   s    z_FakeMatrix.__init__N)__name__
__module____qualname__r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )_FakeMatrix2c             C   s
   || _ d S )N)r   )r   r   r	   r	   r
   r      s    z_FakeMatrix2.__init__c             C   s   | j S )N)r   )r   r	   r	   r
   	__array__   s    z_FakeMatrix2.__array__N)r   r   r   r   r   r	   r	   r	   r
   r      s   r   c             C   s   t | dkrB| d dkrBtj| |d}d|dddf< d|d< |S t | dkr| d | d krtj| |d}t| d }d|||f< d||dd |dd d f< d||dd d |dd f< |S tjd tjj|  |S dS )zz
    Get a test array of given shape and data type.
    Returned NxN matrices are posdef, and 2xN are banded-posdef.

       r   )dtype   Ni  )lennpZzerosZarangeZrandomZseedZrandnZastype)shaper   xjr	   r	   r
   
_get_array   s      r   c             C   s   | S )Nr	   )r   r	   r	   r
   _id-   s    r   c          	      s   |dkrt jt jt jt jg}x|D ] xdD ]|xvtttgD ]h fdd|D }fdd|D }| |  d f }x(t||D ]\}}t j	j
|||d qW q<W q,W q"W dS )zA
    Test that a call does not overwrite its input arguments
    N)CFc                s   g | ]}t | qS r	   )r   ).0s)r   r	   r
   
<listcomp><   s    z'assert_no_overwrite.<locals>.<listcomp>c                s   g | ]} | qS r	   )copy)r   r   )fakerorderr	   r
   r    =   s    zcall modified inputs [%r, %r])Zerr_msg)r   Zfloat32Zfloat64Z	complex64Z
complex128r   r   r   zipZtestingZassert_equal)ZcallZshapesZdtypesZorig_inputsZinputsmsgabr	   )r   r"   r#   r
   assert_no_overwrite1   s    

r(   )N)Z
__future__r   r   r   Znumpyr   objectr   r   r   r   r(   r	   r	   r	   r
   <module>   s   