a
    <bR#                     @   s   d dl mZ d dlmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZ dd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )    )ring)ZZQQAlgebraicField)modgcd_univariatemodgcd_bivariate._chinese_remainder_reconstruction_multivariatemodgcd_multivariate_to_ZZ_poly_to_ANP_polyfunc_field_modgcd_func_field_modgcd_m)sqrtc                  C   s  t dt\} }| j| j }}t||dks.J | j| }}t|||ddfksRJ t|||ddfksjJ | j|  }}t|||ddfksJ t|||ddfksJ d| | d }}t||d|dfksJ d| d d|d  d  }}t||d| d dd| d fksJ |d	 d
|d   d|d   d|  d
 }|d d|d   d|  d }|d d|  d }|d d|  d	 }|d }t|||||fksJ |d	 d	 }|d	 d	|d   d	 }|d d }|d d }|d d }t|||||fksJ |d
 |d  d|d	   d|d   d
|d   d|  d }d|d  d|d	   d	|d   d|  d }d}|}|}t|||||fksJ d|d  d|d   d|d   d|d   d|d   d|d   d|d   d }d|d  d|d   d |d   d }t|||d |ksFJ d!| d" }d#| d$ }d#| d$ }d%}d}t|||||fksJ d S )&Nxr   r   r   r                                 	   l     p>Z6-(3{ CzVgsR&1   l       	` %'('@$@9$` V *   l      `%Nwgej^r0cu`ZhD #   l      ]%5u[ov&+/
c>_o],   l    @)-P/'X=vw+U9+; l    _I	,4~XsR`Y?t
U    l   y[p?u;ZW`(    l   EAy\^
l     mc@Atsl\o#MkE6w# l    @r/sLxFJGjAl   3sd%u%g%9 i[T l         qRvl        @	l        P\l        `i*  )r   r   zeror   diff)Rr   fghcffcfg r+   q/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/polys/tests/test_modulargcd.pytest_modgcd_univariate_integers   sx    *, @0






	


r-   c                  C   s  t dt\} }}| j| j }}t||dks0J d| | d }}t||d|dfksZJ |d|  ||  }}t||d||fksJ |d d| |  |d  |d |d   }}t|||| || |d ||  |d  fksJ ||d  d| |  | ||d  |  }}t|||| | |d |d | d fksJJ |d |d  |d |  d ||d  ||  d  }}t||d||fksJ d| |d  d| |  d|  |d  d|  d }d| |d  d|  |d  d }t||d| | d|  | d |d |d | d fks<J d|d  d|  d |d  }}t|||d d| d dfksJ |d d|d  d|  d  }}t|||d dd| d fksJ d|d  d| |  d|  d|  }|d | d }t|||d d| d|  |d fks2J d|d  d| |  d|  d|  }d| | d|  d|d   d|  }t|||| d| d d| d fksJ d S )Nx,yr   r   r   r   r   )r   r   r#   r   )r%   r   yr&   r'   r+   r+   r,   test_modgcd_bivariate_integers[   s4    .4.2:8$B"&"&(.((r0   c            
      C   s   t dt\} }}d\}}|d | |d  d }|d  | d| |d   d }t||||}|||ksrJ |||ksJ t d| \}}	d\}}|| d |	d  | }|d d|  |	 d }t||||}|||ksJ |||ksJ d S )Nx, y)r   r   r   r   r   z)r   r"   )r   r   r   Ztrunc_ground)
r%   r   r/   pqhpZhqZhpqTr2   r+   r+   r,   test_chinese_remainder   s    "r7   c               
   C   s~  t dt\} }}| j| j }}t||dks0J d|d  d|  d |d  }}t|||d d| d dfksvJ |d d|d  d|  d  }}t|||d dd| d fksJ d|d  d| |  d|  d|  }d| | d|  d|d   d|  }t|||| d| d d| d fks:J ||d  d| |  | ||d  |  }}t|||| | |d |d | d fksJ |d |d  |d |  d ||d  ||  d  }}t||d||fksJ |d d|d   d|d   d	|  d }|d d
|d   d|  d
 }|d d|  d }|d d|  d }|d }t|||||fksJ t dt\} }}}}	|| | | | | |	  }}t||d||fksJ |	d d|	  d d|	 d  }}t|||	d |	d dfksJ |d |	d  d|d  |	  |d  ||	  | |	d d|	  d  }}|	d |d |	 |d  | |	d   }}}t|||||fksJ t|||||fksJ t dt\} }}}|||  |||   }}t|||||  ddfksJ |  \}}}t||\}
}}|
|krR|
| |krR|
| |ksVJ t dt\} }}}}	}|  \}}}t||\}
}}|
|kr|
| |kr|
| |ksJ t dt\} }}}}	}}}|  \}}}t||\}
}}|
|kr|
| |kr|
| |ksJ t dt\
} }}}}	}}}}}|  \}}}t||\}
}}|
|krx|
| |krx|
| |ks|J t dt\} }}}|  \}}}t||\}
}}|
|kr|
| |kr|
| |ksJ |  \}}}t||\}
}}|
|kr|
| |kr|
| |ksJ t dt\} }}}}|  \}}}t||\}
}}|
|krv|
| |krv|
| |kszJ d S )Nr.   r   r   r   r   r   r   r   r   r   r   r   zx,y,z,uzx,y,zz	x,y,z,u,vzx,y,z,u,v,a,bzx,y,z,u,v,a,b,c,dzx,y,z,t)r   r   r#   r	   Zfateman_poly_F_1Zfateman_poly_F_2Zfateman_poly_F_3)r%   r   r/   r&   r'   r(   r)   r*   r2   uHvabcdtr+   r+   r,   !test_modgcd_multivariate_integers   st    "$"$((..2:,  ""J,"******r@   c                  C   s   t ttd} td| \}}|tdd  }tdt\}}}|| | }t|||ksZJ t|||kslJ td| \}}}}	||d  ||	  td }tdt\}
}}td|
\}}}|d | | | }t|||ksJ t|||ksJ d S )Nr   r   r   zx_, z_zx, t, szt_, s_)r   r   r   r   r   r
   r   )Ar%   r   r&   r6   Zx_Zz_Zf_r?   sDZt_Zs_r+   r+   r,   test_to_ZZ_ANP_poly   s    rD   c            	      C   s  t ttd} td| \}}| j}d| |d }}t|||||fksLJ d| |td }}t|||||fkszJ d| d d|d  d  }}t|||d |dd| d fksJ td| \}}}|td|  ||  }}t|||||fksJ || td|d   |td|  }}t||||td|  |tdfks\J |d dtd | |  d|d   |td|   }}t|||||fksJ t ttdtd} td| \}}}}|d |d  tdd	 |  }|d
|d  d  |||   }}t|||d
|d  d || fksBJ |d |d  d|d   dtd  }||d  |td td  }}t||||d |tdtd fksJ t ttdd td } td| \}}|d |d  }}t||| j||fksJ d S )Nr   r   r   r   r1   r   zx, y, zr"   r         g      ?
   r   )r   r   r   r   oner   )	rA   r%   r   rH   r&   r'   r/   r2   r(   r+   r+   r,   test_modgcd_algebraic_field  s8    (*.: "*(".rI   c                  C   sp   t dt\} }t d| \}}}|d |d  |d |  d d}|d |d  }}t||||jkslJ d S )Nr?   zx, zr   r   r   )r   r   Zdropr   rH   )rC   r?   r%   r   r2   Zminpolyr&   r'   r+   r+   r,   test_modgcd_func_field>  s
    &rJ   N)Zsympy.polys.ringsr   Zsympy.polys.domainsr   r   r   Zsympy.polys.modulargcdr   r   r   r	   r
   r   r   r   Z(sympy.functions.elementary.miscellaneousr   r-   r0   r7   r@   rD   rI   rJ   r+   r+   r+   r,   <module>   s   (	L(a,