U
    ˜9%eä  ã                   @  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              
     sL  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 ]n‰||ˆˆˆfƒ}	z|	ˆˆ  ˆˆ ˆ< W n tk
rœ   t|ƒ‚Y nX ‡‡‡‡fdd„t	ˆ
ƒD ƒˆˆ< qR|ˆˆˆˆfƒˆˆ< q0|ˆk rˆ	||d ƒs
||ˆ|||d fƒ ˆ|ƒrVt	|d	 ddƒD ]$}
ˆ	||
ƒs$||ˆ|||
fƒ q$|d7 }qÚˆ| |d  }ˆ| |d	 ˆ|d    }zˆ|d  | }W n tk
r´   t|ƒ‚Y nX || ˆ| |d < ˆ| | ˆ|< |ˆ|d < ||d  ||  ||< ||d < ˆ|d  d |d … ˆ| d |d …  ˆ| d |d …< ˆ|d  d |d …< t	|d ˆƒD ]^‰ˆˆ | }ˆˆ |d  ||  ˆˆ |< ˆ| |d  ˆˆ |  | ˆˆ |d < qhˆrð||d  ||  ||< ||d < t|d dƒ}qÚt‡fdd„t	dˆƒD ƒƒs$t‚t‡	fdd„t	ˆƒD ƒƒsDt‚||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   úW/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/matrices/lll.pyÚ
<listcomp>   s     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                   s,   g | ]$}ˆˆ d   | ˆˆ d  |  ‘qS r   r   ©r   Úz©r$   r   Úyr   r   r   %   s     z._ddm_lll.<locals>.dot_rows.<locals>.<listcomp>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   )   s     z0_ddm_lll.<locals>.reduce_row.<locals>.<listcomp>c                   s0   g | ](}ˆ ˆd   | ˆˆ ˆd  |   ‘qS r   r   r%   )r   r-   r$   r   r   r   *   s     c                   s0   g | ](}ˆ ˆd   | ˆˆ ˆd  |   ‘qS r   r   r%   )ÚTr-   r$   r   r   r   -   s     ©r*   )r.   r   r(   r$   )r   ÚmÚnÚreturn_transform)r.   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   s     c                   s0   g | ](}ˆˆ  | ˆˆ  ˆ ˆˆ |   ‘qS r   r   r%   )Úir!   r   Úy_starr   r   r   7   s     éÿÿÿÿc                   s   g | ]}ˆ |ƒ‘qS r   r   )r   r4   )r    r   r   r   T   s     c                   s$   g | ]}t |ƒD ]}ˆ ||ƒ‘qqS r   r/   )r   r4   r!   )r#   r   r   r   U   s     
  )r   r   r+   r   Údomainr   r	   ÚcopyZzerosr*   ÚeyeÚZeroDivisionErrorr   ÚmaxÚallÚAssertionError)r   r   r2   r   r(   r.   Zlinear_dependent_errorr,   r3   Zrow_dotÚlÚnuÚalphaÚbetaÚxir   )r   r   r   r   r4   r!   r    r0   r   r#   r1   r2   r5   r   Ú_ddm_lll	   sx    



$

"R 0"" rC   c                 C  s   t | |ddd S )NF©r   r2   r   ©rC   ©r   r   r   r   r   Úddm_lllY   s    rG   c                 C  s   t | |ddS )NTrD   rE   rF   r   r   r   Úddm_lll_transform]   s    rH   N)Ú
__future__r   Úmathr   r   Zsympy.polys.domainsr   r   Zsympy.polys.matrices.exceptionsr   r   r   r	   rC   rG   rH   r   r   r   r   Ú<module>   s   P