B
    <ZA  ã               @   sR   d dl mZ d dl mZ ejjZddd„Zddd„Zddd„Zd	d
„ Zdd„ Z	dS )é    )Úmp)Úlibmpc             C   sH  |dkrt d| ƒ | j}t | ¡\}}|dkrBt d|ƒ t d|ƒ || | ¡  }t dt tj¡ ¡}d}xBt|ƒD ]6}x0t|ƒD ]$}	|t	| |	|f ||	|f  ƒ7 }q„W qvW |||  }d}
x<t|ƒD ]0}x*t|d |ƒD ]}	|
t	||	|f ƒ7 }
qÞW qÊW |dkrt d||
ƒ |dkr(t d	|ƒ ||k s6t
‚|
dksDt
‚d S )
Né   zoriginal matrix (hessenberg):
zQ:
zH:
gš™™™™™é?r   é   zdifference (H):zB:
)ÚprintÚrowsr   Z
hessenbergÚtranspose_conjÚexpÚlogÚepsÚxrangeÚabsÚAssertionError)ÚAÚverboseÚnÚQÚHÚBr   Úerr0ÚxÚyÚerr1© r   ú6lib/python3.7/site-packages/mpmath/tests/test_eigen.pyÚrun_hessenberg	   s0    


(


r   c             C   sÎ  |dkrt d| ƒ | j}t | ¡\}}|dkrBt d|ƒ t d|ƒ || | ¡  }|| ¡  }t dt tj¡ ¡}d}xBt|ƒD ]6}	x0t|ƒD ]$}
|t	| |
|	f ||
|	f  ƒ7 }qW q‚W |||  }d}xTt|ƒD ]H}	xBt|ƒD ]6}
|	|
kr||
|	f  d8  < |t	||
|	f ƒ7 }qäW qÖW |||  }d}x@t|ƒD ]4}	x,t|	d |ƒD ]}
|t	||
|	f ƒ7 }qPW q<W |dkrŒt d|||ƒ |dkr t d|ƒ ||k s®t
‚||k s¼t
‚|dksÊt
‚d S )	Nr   zoriginal matrix (schur):
zQ:
zR:
gš™™™™™é?r   zdifference (S):zB:
)r   r   r   Zschurr   r	   r
   r   r   r   r   )r   r   r   r   ÚRr   ÚCr   r   r   r   r   Zerr2r   r   r   Ú	run_schur.   sB    


(
 


r   c       
      C   s*  |dkrt d| ƒ | j}tj| ddd\}}}|dkrTt d|ƒ t d|ƒ t d|ƒ t dt tj¡ ¡}d	}xˆt|ƒD ]|}| |d d …|f  || |d d …|f   }	t|t 	|	¡ƒ}||d d …f |  ||d d …f ||   }	t|t 	|	¡ƒ}qxW |||  }|d	krt d
|ƒ ||k s&t
‚d S )Nr   zoriginal matrix (eig):
T)ÚleftÚrightzE:
zEL:
zER:
gš™™™™™é?r   zdifference (E):)r   r   r   Zeigr	   r
   r   r   ÚmaxZmnormr   )
r   r   r   ÚEZELZERr   r   Úir   r   r   r   Úrun_eig\   s&    



,,

r$   c              C   sf  d} xZt dƒD ]L}dtt ¡ d ƒ }t ¡ dkrœdt ||¡ d }t ¡ dkrš|d9 }xÚt |ƒD ].}x(t |ƒD ]}t|||f ƒ|||f< qvW qhW nždt ||¡ d ddt ||¡ d   }t ¡ dkr:|d9 }xZt |ƒD ]N}xHt |ƒD ]<}tt |||f ¡ƒdtt |||f ¡ƒ  |||f< qöW qèW t|| d t|| d t	|| d qW d S )	Nr   é   r   g      à?r   é
   y              ð?)r   )
r   Úintr   ZrandZ
randmatrixÚreZimr   r   r$   )Úvr#   r   r   r   r   r   r   r   Útest_eig_dyn|   s&    ",@r*   c              C   s&  d} g }t  dddgdddgdddgg¡}| |¡ | | ¡ ¡ t  dddgdddgdddgg¡}| |¡ | | ¡ ¡ t  dddgdddgdddgg¡}| |¡ | | ¡ ¡ t  dddgdddgdddgg¡}| |¡ | | ¡ ¡ x0|D ](}t|| d t|| d t|| d qöW d S )Nr   r   r   )r   )r   ZmatrixÚappendZ	transposer   r   r$   )r)   ZASr   r   r   r   Útest_eig”   s4    




r,   N)r   )r   )r   )
Zmpmathr   r   Zbackendr   r   r   r$   r*   r,   r   r   r   r   Ú<module>   s   
%
.
 