o
    GZh                     @   st   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ d	d
lmZ edfddZdd ZdS )z:

Routines for computing eigenvectors with DomainMatrix.

    )Dummy   )FiniteExtension)dup_factor_list)roots)PolyCRootOf   )DomainMatrixlambdac                    s\  |   }| j\} | jt|\}}g }g }|D ]\}}	t|dkrU|d  |d   fddt|D }
t|
| f}| | jdd}||	|f qt	j
|d}t|fd	d| j D }fd
d|D }t|| f} fddt|D }
t|
| f}|| jdd}|||	|f q||fS )Nr   r
   r   c                    &   g | ]  fd dt D qS )c                       g | ]}|kr
 nj qS  zero.0jeigenvalfieldir   I/var/www/auris/lib/python3.10/site-packages/sympy/polys/matrices/eigen.py
<listcomp>       -dom_eigenvects.<locals>.<listcomp>.<listcomp>ranger   colsr   r   r   r   r          z"dom_eigenvects.<locals>.<listcomp>T)Zdivide_lastdomainc                    s    g | ]} fd d|D qS )c                    s    g | ]}t j|g d jqS )r$   )r   	from_listrepr   itemr%   lr   r   r   +   s     r   r   r   rowr*   r   r   r   *   s    c                       g | ]} fd d|D qS )c                    s   g | ]} |qS r   r   r(   r   r   r   r   -   s    r   r   r,   r/   r   r   r   -   r   c                    r   )c                    r   r   r   r   r   r   r   r   0   r   r   r   r   r    r"   r   r   /   r#   )charpolyshaper%   r   lenr   r   Z	nullspaceappendr   r&   r   r'   to_ddm)Ar+   r0   rows_Zfactorsrational_eigenvectsalgebraic_eigenvectsbaseexpZEE_itemsZEEZbasisminpolyZAA_itemsZAAr   )r!   r%   r   r   r+   r   dom_eigenvects   s>   
r=   c           
         s   g }| D ]"\}}|j  } fdd|D }|||f q|D ]T\}}|j  }jd fdd|D } } tfi |}	t|	|krefddt	|D }	|	D ] fdd|D }|||f qgq)|S )Nc                    s"   g | ]} fd d|D qS )c                       g | ]}  |qS r   to_sympyr   xr/   r   r   r   D       6dom_eigenvects_to_sympy.<locals>.<listcomp>.<listcomp>r   r   Zvect)Matrixr   r   r   r   C   s    z+dom_eigenvects_to_sympy.<locals>.<listcomp>r   c                    r.   )c                    r>   r   r?   rA   r/   r   r   r   L   rC   rD   r   rE   r/   r   r   r   L   r   c                    s   g | ]}t  |qS r   r   )r   idx)r+   r<   r   r   r   R       c                    s$   g | ]} fd d|D qS )c                    s   g | ]}|  qS r   )subsrA   )
eigenvaluer+   r   r   r   V   rH   rD   r   rE   )rF   rJ   r+   r   r   r   U   s    )
r'   r4   r@   r3   ZgensdegreeZas_exprr   r2   r   )
r8   r9   rF   kwargsresultZmultiplicityZ
eigenvectsZnew_eigenvectsrK   Z	eigenvalsr   )rF   rJ   r   r+   r<   r   dom_eigenvects_to_sympy:   s0   



rN   N)__doc__Zsympy.core.symbolr   Zagca.extensionsr   Zfactortoolsr   Z	polyrootsr   Z	polytoolsr   Zrootoftoolsr	   Zdomainmatrixr   r=   rN   r   r   r   r   <module>   s    )