a
    kº”hÞ  ã                   @  s|   d dl mZ d dlmZ d dlmZmZ d dlm	Z	m
Z
mZmZ eddƒdfdd	„Zeddƒfd
d„Zeddƒfdd„ZdS )é    )Úannotations)Úfloor)ÚZZÚQQ)ÚDMRankErrorÚDMShapeErrorÚDMValueErrorÚDMDomainErroré   é   Fc              
     sH  t ddƒˆksˆt ddƒkr$tdƒ‚| jd | jd kr@tdƒ‚| jtkrRtdƒ‚| jd ‰| jd ‰
d}|  ¡ }|  ˆˆ
ft ¡‰|  ˆˆft ¡‰dd„ t	ˆƒD ƒ‰t dd	ƒ‰ˆr¾|  
ˆt¡nd }d
}‡fdd„‰ dddœ‡‡‡fdd„‰ddddœ‡‡fdd„‰	ddœdd„}ddœ‡ ‡‡
‡fdd„}t	ˆƒD ]¦‰dd„ |ˆ D ƒˆˆ< t	ˆƒD ]l‰||ˆˆˆfƒ}	z|	ˆˆ  ˆˆ ˆ< W n tyš   t|ƒ‚Y n0 ‡‡‡‡fdd„t	ˆ
ƒD ƒˆˆ< qR|ˆˆˆˆfƒˆˆ< q0|ˆk rþˆ	||d ƒs||ˆ|||d fƒ ˆ|ƒrTt	|d	 ddƒD ]$}
ˆ	||
ƒs"||ˆ|||
fƒ q"|d7 }qØˆ| |d  }ˆ| |d	 ˆ|d    }zˆ|d  | }W n ty°   t|ƒ‚Y n0 || ˆ| |d < ˆ| | ˆ|< |ˆ|d < ||d  ||  ||< ||d < ˆ|d  d |d … ˆ| d |d …  ˆ| d |d …< ˆ|d  d |d …< t	|d ˆƒD ]^‰ˆˆ | }ˆˆ |d  ||  ˆˆ |< ˆ| |d  ˆˆ |  | ˆˆ |d < qdˆrì||d  ||  ||< ||d < t|d dƒ}qØt‡fdd„t	dˆƒD ƒƒs J ‚t‡	fd d„t	ˆƒD ƒƒs@J ‚||fS )!Né   r   z!delta must lie in range (0.25, 1)r   z/input matrix must have shape (m, n) with m <= nzinput matrix domain must be ZZc                 S  s   g | ]}t d dƒ‘qS ©r   r   )r   )Ú.0Ú_© r   úF/var/www/auris/lib/python3.9/site-packages/sympy/polys/matrices/lll.pyÚ
<listcomp>   ó    z_ddm_lll.<locals>.<listcomp>é   z-input matrix contains linearly dependent rowsc                   s   t t| ˆ  ƒƒS ©N)r   Úmfloor)Úx)Úhalfr   r   Úclosest_integer   s    z!_ddm_lll.<locals>.closest_integerÚintÚbool)ÚkÚreturnc                   s,   ˆ|  ˆ ˆ|  | d  d  ˆ| d   kS )Nr   r   r   )r   )ÚdeltaÚg_starÚmur   r   Úlovasz_condition   s    z"_ddm_lll.<locals>.lovasz_condition)r   Újr   c                   s   t ˆ|  | ƒˆ kS r   )Úabs)r   r"   )r   r    r   r   Úmu_small!   s    z_ddm_lll.<locals>.mu_smallztuple[int, int])Úrowsc                   s$   t ‡ ‡‡fdd„tˆjd ƒD ƒƒS )Nc                 3  s.   | ]&}ˆˆ d   | ˆˆ d  |  V  qdS )r   r   Nr   ©r   Úz©r%   r   Úyr   r   Ú	<genexpr>%   r   z-_ddm_lll.<locals>.dot_rows.<locals>.<genexpr>r   )ÚsumÚrangeÚshape)r   r)   r%   r   r(   r   Údot_rows$   s    z_ddm_lll.<locals>.dot_rowsc                   s²   ˆˆˆd  ˆd  ƒ‰‡‡‡fdd„t ˆƒD ƒˆˆd < ‡‡‡fdd„t ˆd ƒD ƒˆˆd  d ˆd …< ˆˆd  ˆd   ˆ8  < ˆr®‡ ‡‡fdd„t ˆƒD ƒˆ ˆd < d S )Nr   r   c                   s0   g | ](}ˆˆd   | ˆ ˆˆd  |   ‘qS r   r   r&   )Úrr%   r)   r   r   r   )   r   z0_ddm_lll.<locals>.reduce_row.<locals>.<listcomp>c                   s0   g | ](}ˆ ˆd   | ˆˆ ˆd  |   ‘qS r   r   r&   )r    r/   r%   r   r   r   *   r   c                   s0   g | ](}ˆ ˆd   | ˆˆ ˆd  |   ‘qS r   r   r&   )ÚTr/   r%   r   r   r   -   r   ©r,   )r0   r    r)   r%   )r   ÚmÚnÚreturn_transform)r0   r    r/   r%   r)   r   Ú
reduce_row'   s    "2z_ddm_lll.<locals>.reduce_rowc                 S  s   g | ]}t  |t¡‘qS r   )r   Zconvert_fromr   r&   r   r   r   r   0   r   c                   s0   g | ](}ˆˆ  | ˆˆ  ˆ ˆˆ |   ‘qS r   r   r&   )Úir"   r    Úy_starr   r   r   7   r   éÿÿÿÿc                 3  s   | ]}ˆ |ƒV  qd S r   r   )r   r6   )r!   r   r   r*   T   r   z_ddm_lll.<locals>.<genexpr>c                 3  s&   | ]}t |ƒD ]}ˆ ||ƒV  qqd S r   r1   )r   r6   r"   )r$   r   r   r*   U   r   )r   r   r-   r   Údomainr   r	   ÚcopyÚzerosr,   ZeyeÚZeroDivisionErrorr   ÚmaxÚall)r   r   r4   r   r)   r0   Zlinear_dependent_errorr.   r5   Zrow_dotÚlÚnuÚalphaÚbetaÚxir   )r   r   r   r   r6   r"   r!   r2   r    r$   r3   r4   r7   r   Ú_ddm_lll	   sx    



$

"R 0"" rD   c                 C  s   t | |ddd S )NF©r   r4   r   ©rD   ©r   r   r   r   r   Úddm_lllY   s    rH   c                 C  s   t | |ddS )NTrE   rF   rG   r   r   r   Úddm_lll_transform]   s    rI   N)Ú
__future__r   Úmathr   r   Zsympy.polys.domainsr   r   Zsympy.polys.matrices.exceptionsr   r   r   r	   rD   rH   rI   r   r   r   r   Ú<module>   s   P