a
    ›¬<bA  ã                   @   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   s8  |dkrt d| ƒ | j}t | ¡\}}|dkrBt d|ƒ t d|ƒ || | ¡  }t dt tj¡ ¡}d}t|ƒD ]2}t|ƒD ]$}	|t	| |	|f ||	|f  ƒ7 }q€qt|||  }d}
t|ƒD ],}t|d |ƒD ]}	|
t	||	|f ƒ7 }
qÒqÀ|dkrt d||
ƒ |dkrt d	|ƒ ||k s&J ‚|
dks4J ‚d S )
Né   zoriginal matrix (hessenberg):
úQ:
zH:
çš™™™™™é?r   é   zdifference (H):úB:
)
ÚprintÚrowsr   Z
hessenbergÚtranspose_conjÚexpÚlogÚepsÚxrangeÚabs)ÚAÚverboseÚnÚQÚHÚBr   Úerr0ÚxÚyÚerr1© r   úg/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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}t|ƒD ]2}	t|ƒD ]$}
|t	| |
|	f ||
|	f  ƒ7 }qŒq€|||  }d}t|ƒD ]B}	t|ƒD ]4}
|	|
krø||
|	f  d8  < |t	||
|	f ƒ7 }qØqÌ|||  }d}t|ƒD ]0}	t|	d |ƒD ]}
|t	||
|	f ƒ7 }q:q(|dkrrt d|||ƒ |dkr†t d|ƒ ||k s”J ‚||k s¢J ‚|dks°J ‚d S )	Nr   zoriginal matrix (schur):
r   zR:
r   r   zdifference (S):r   )
r	   r
   r   Zschurr   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	}t|ƒD ]|}| |d d …|f  || |d d …|f   }	t|t 	|	¡ƒ}||d d …f |  ||d d …f ||   }	t|t 	|	¡ƒ}qv|||  }|d	krt d
|ƒ ||k s"J ‚d S )Nr   zoriginal matrix (eig):
T)ÚleftÚrightzE:
zEL:
zER:
r   r   zdifference (E):)
r	   r
   r   Zeigr   r   r   r   ÚmaxZmnorm)
r   r   r   ÚEZELZERr   r   Úir   r   r   r   Úrun_eig\   s&    



,,

r&   c                  C   sP  d} t dƒD ]<}dtt ¡ d ƒ }t ¡ dkrdt ||¡ d }t ¡ dkrŽ|d9 }t |ƒD ]*}t |ƒD ]}t|||f ƒ|||f< qnqbn–dt ||¡ d ddt ||¡ d   }t ¡ dkr&|d9 }t |ƒD ]J}t |ƒD ]<}tt |||f ¡ƒdtt |||f ¡ƒ  |||f< qæqÚt|| d t|| d t	|| d q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  g d¢g d¢g d¢g¡}| |¡ | | ¡ ¡ t  g d¢g d¢g d¢g¡}| |¡ | | ¡ ¡ t  g d¢g d¢g d¢g¡}| |¡ | | ¡ ¡ t  g d¢g d	¢g d
¢g¡}| |¡ | | ¡ ¡ |D ](}t|| d t|| d t|| d qÜd S )Nr   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r)   )r   ZmatrixÚappendZ	transposer   r    r&   )r,   ZASr   r   r   r   Útest_eig”   s<    
þ

þ

þ

þ
r/   N)r   )r   )r   )
Zmpmathr   r   Úbackendr   r   r    r&   r-   r/   r   r   r   r   Ú<module>   s   
%
.
 