
    MZd                        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Z edd      fd	Z edd      fd
Zy)    )annotations)floor)ZZQQ)DMRankErrorDMShapeErrorDMValueErrorDMDomainError      Fc                2   t        dd      k\  st        dd      k\  rt        d      | j                  d   | j                  d   kD  rt        d      | j                  t
        k7  rt        d      | j                  d   | j                  d   d}| j                         }| j                  ft               }| j                  ft               t              D cg c]  }t        dd       c}t        dd      r| j                  t
              nd }d}fd	dfd
}	dfd}
dd}dfd}t              D ]  }||   D cg c]  }t        j                  |t
               c}||<   t        |      D ]Q  } |||||f      }	 ||   z  |   |<   t              D cg c]  }||   |   |   |   ||   |   z  z
   c}||<   S  |||||f      |<    |k  rk |
||dz
        s |||||dz
  f        |	|      r3t        |dz
  dd      D ]  } |
||      r |||||f        |dz  }n|   |dz
     }|   |dz  |dz
     z  z   }	 |dz
     |z  }||z  |   |dz
  <   |   |z  |<   ||dz
  <   ||dz
     ||   c||<   ||dz
  <   |dz
     d |dz
   |   d |dz
   c|   d |dz
   |dz
     d |dz
   t        |dz         D ]A  }|   |   }|   |dz
     ||z  z
  |   |<   |   |dz
     |   |   z  |z   |   |dz
  <   C r||dz
     ||   c||<   ||dz
  <   t        |dz
  d      }|k  rkt        t        d      D cg c]
  } |	|       c}      sJ t        t              D cg c]  }t        |      D ]  } |
||        c}}      sJ ||fS c c}w c c}w # t        $ r t        |      w xY wc c}w # t        $ r t        |      w xY wc c}w c c}}w )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 ZZ   z-input matrix contains linearly dependent rowsc                2    t        t        | z               S N)r   mfloor)xhalfs    :/usr/lib/python3/dist-packages/sympy/polys/matrices/lll.pyclosest_integerz!_ddm_lll.<locals>.closest_integer   s    &T"##    c                D    |    |    | dz
     dz  z
  | dz
     z  k\  S )Nr   r    )kdeltag_starmus    r   lovasz_conditionz"_ddm_lll.<locals>.lovasz_condition   s5    ayebeAEla&776!a%=HIIr   c                ,    t        |    |         k  S r   )abs)r   jr   r   s     r   mu_smallz_ddm_lll.<locals>.mu_small!   s    2a58}$$r   c           	         t        t        | j                  d         D cg c]  }| |d      |   ||d      |   z   c}      S c c}w )Nr   r   )sumrangeshape)r   yrowszs       r   dot_rowsz_ddm_lll.<locals>.dot_rows$   sE    5;LMaAd1gJqMAd1gJqM1MNNMs   Ac                    ||d      |d            }t              D cg c]  }||d      |   |||d      |   z  z
   c}||d   <   t        |d         D cg c]  }||d      |   |||d      |   z  z
   c}||d      d |d    ||d      |d   xx   |z  cc<   	r8t              D cg c]  }| |d      |   || |d      |   z  z
   c}| |d   <   y y c c}w c c}w c c}w )Nr   r   )r%   )
Tr   r'   r(   rr)   r   mnreturn_transforms
         r   
reduce_rowz_ddm_lll.<locals>.reduce_row'   s   BtAwKQ01AFqJAaQjma!DG*Q-&77J$q'
NSTXYZT[n ]DGQ!bak!n2D!D ]47HT!W
47DG!EJ1XN!DG*Q-!aQjm*;;NAd1gJ  K ] Os   !C!C#2!C()r   intreturnbool)r   r3   r!   r3   r4   r5   )r(   ztuple[int, int])r   r	   r&   r   domainr   r
   copyzerosr%   eyeconvert_fromZeroDivisionErrorr   maxall)r   r   r0   r   r'   y_star_r,   linear_dependent_errorr   r"   r*   r1   ir)   r!   row_dotlnualphabetaxir   r   r   r.   r   r/   s    ``                   @@@@@@r   _ddm_lllrH   	   s   	!Qx5ER1X->??wwqzAGGAJLMMxx2~<==	
A	
A	A	AWWaVR F	
!Q	B %a)1bAh)Fa8D(adAL$J%OO O 1X 	556qT:R__Q+:q	q 	SAq&1a&1G:"VAY.1a JOqRA11a6!9Q<(??RF1I	S VVaV4q		5 a%1q5!q"a!QU,A1q5"b) 11~q"a!Q01 FAAq1uB1Ia&Q- 77E:a!e}u, 9BqE!a%Lq	D(F1I!F1q5Mq1uXqtNAaD!AE(/1!a%y!a%/@"Q%Q-,BqE&1q5M2a!e9Va!e,1q5!_ <U1Xa5Q<"r'11a!!uQU|beAh6;1a!e<  !"1q51Q4!aAhAE1A5 a%6 U1a[9 #9:::aC1%(CQACCDDDa4KA *4 ;
 % :!"899:R % :!"899: :Cs6   'O!OO8!O1/O6 6P! P
O.6Pc                $    t        | |d      d   S )NFr   r0   r   rH   r   r   s     r   ddm_lllrM   Y   s    AUU;A>>r   c                    t        | |d      S )NTrJ   rK   rL   s     r   ddm_lll_transformrO   ]   s    AUT::r   N)
__future__r   mathr   r   sympy.polys.domainsr   r   sympy.polys.matrices.exceptionsr   r   r	   r
   rH   rM   rO   r   r   r   <module>rT      sH    "   & b b Ah M` 1X ?  "!Qx ;r   