U
    9%e+                     @   s  d Z ddlmZmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z( e'd@ddZ)e'dAddZ*e'ddddZ+e'edfddZ,e'dBddZ-dd Z.dd  Z/d!d" Z0d#d$ Z1d%d& Z2d'd( Z3dd)l4m5Z5 d*d+ Z6d,d- Z7d.d/ Z8d0d1 Z9d2d3 Z:d4d5 Z;d6d7 Z<d8d9 Z=d:d; Z>d<d= Z?d>d? Z@dS )CzIFunctions for generating interesting polynomials, e.g. for benchmarking.     )AddMulSymbolsympifyDummysymbols)Tuple)S)	nextprime)dmp_add_termdmp_negdmp_muldmp_sqr)dmp_zerodmp_one
dmp_grounddup_from_raw_dict	dmp_raise
dup_random)ZZ)dup_zz_cyclotomic_poly)DMP)PolyPurePoly)_analyze_gens)subsetspublic
filldedentNFc           	      C   s  | dkrt d|  |dk	r&t| ntd}| dkrddlm} ddlm} d	}|d	g}td	| d D ]}t|}|	|| qj|t
| ||d
S | dkr|d	 d	 }n\| d	kr|d d|d	   d }n:| dkr
|d d|d   d|d   d|d	   d }|rt||S |S )a  Generates n-th Swinnerton-Dyer polynomial in `x`.

    Parameters
    ----------
    n : int
        `n` decides the order of polynomial
    x : optional
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    r   z6Cannot generate Swinnerton-Dyer polynomial of order %sNx   )sqrt   )minimal_polynomial   polys   
      (      i`  i  i@  )
ValueErrorr   r   Z(sympy.functions.elementary.miscellaneousr    Znumberfieldsr"   ranger
   appendr   r   )	nr   r%   r    r"   paiex r3   W/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/specialpolys.pyswinnerton_dyer_poly   s.    


0r5   c                 C   s^   | dkrt d|  ttt| tt}|dk	r>t||}nt|td}|rV|S |	 S )a  Generates cyclotomic polynomial of order `n` in `x`.

    Parameters
    ----------
    n : int
        `n` decides the order of polynomial
    x : optional
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    r   z1Cannot generate cyclotomic polynomial of order %sNr   )
r+   r   r   intr   r   newr   r   as_expr)r.   r   r%   polyr3   r3   r4   cyclotomic_polyA   s    r:   r$   c                G   sp   t |}| dk s | t|ks |s2td| |f n(| s>tj}ntdd t|t| D  }|rlt|f| S |S )z
    Generates symmetric polynomial of order `n`.

    Parameters
    ==========

    polys: bool, optional (default: False)
        Returns a Poly object when ``polys=True``, otherwise
        (default) returns an expression.
    r   z7Cannot generate symmetric polynomial of order %s for %sc                 S   s   g | ]}t | qS r3   )r   ).0sr3   r3   r4   
<listcomp>o   s     z"symmetric_poly.<locals>.<listcomp>)	r   lenr+   r	   ZOner   r   r6   r   )r.   r%   Zgensr9   r3   r3   r4   symmetric_poly\   s    r?   c                 C   s(   t t||||| |d}|r |S | S )a\  Generates a polynomial of degree ``n`` with coefficients in
    ``[inf, sup]``.

    Parameters
    ----------
    x
        `x` is the independent term of polynomial
    n : int
        `n` decides the order of polynomial
    inf
        Lower limit of range in which coefficients lie
    sup
        Upper limit of range in which coefficients lie
    domain : optional
         Decides what ring the coefficients are supposed
         to belong. Default is set to Integers.
    polys : bool, optional
        ``polys=True`` returns an expression, otherwise
        (default) returns an expression.
    )domain)r   r   r8   )r   r.   infsupr@   r%   r9   r3   r3   r4   random_polyt   s    rC   r   yc           	         s   t dd}t tr(td | f  n|r>|t  j@ r>d}t|trZtd|| f }n|rp|t| j@ rpd}|sttdg }t fddt	| D  }t	| D ]>|    }t fddt	| D  }|
||  qtd	d t||D  S )
zConstruct Lagrange interpolating polynomial for ``n``
    data points. If a sequence of values are given for ``X`` and ``Y``
    then the first ``n`` values will be used.
    free_symbolsNz%s:%sFz~
            Expecting symbol for x that does not appear in X or Y.
            Use `interpolate(list(zip(X, Y)), x)` instead.c                    s   g | ]} |  qS r3   r3   r;   r1   )Xr   r3   r4   r=      s     z&interpolating_poly.<locals>.<listcomp>c                    s$   g | ]}|kr   |  qS r3   r3   )r;   j)rG   r1   r3   r4   r=      s      c                 S   s   g | ]\}}|| qS r3   r3   )r;   ZcoeffrD   r3   r3   r4   r=      s     )getattr
isinstancestrr   r   rE   r+   r   r   r,   r-   r   zip)	r.   r   rG   YokZcoeffsZnumertZnumerdenomr3   )rG   r1   r   r4   interpolating_poly   s$    

rP   c           	      C   s   dd t | d D }|d |d  }}|t|dd   }|d tdd |dd D   }|d |d  j| }|d d| |d  |d  d  j| }td	| }|||fS )
%Fateman's GCD benchmark: trivial GCD c                 S   s   g | ]}t d t| qS Zy_r   rK   rF   r3   r3   r4   r=      s     z$fateman_poly_F_1.<locals>.<listcomp>r!   r   Nr#   c                 S   s   g | ]}|d  qS )r#   r3   r;   rD   r3   r3   r4   r=      s     )r!   )r,   r   Zas_polyr   )	r.   rM   y_0Zy_1uvFGHr3   r3   r4   fateman_poly_F_1   s    "*r\   c                 C   s&  |d|dg}t | D ]}t|||g}q|d|d|dg}t d| D ]}t||t||g}qL| d }t|t|d|d| |}t|t|d|d| |}|d |dgg |d|d|d gg}t|t|d|d| |}	t||d|}
t||| |}t|	|
| |}t| |}|||fS )rQ   r!   r   r#   r   )r,   r   r   r   r   r   r   )r.   KrW   r1   rX   mUVfWrM   rY   rZ   r[   r3   r3   r4   dmp_fateman_poly_F_1   s     ,
rc   c                 C   s   dd t | d D }|d }t|dd  }t|| d d f| }t|| d d f| }t|| d d f| }|| || |fS )7Fateman's GCD benchmark: linearly dense quartic inputs c                 S   s   g | ]}t d t| qS rR   rS   rF   r3   r3   r4   r=      s     z$fateman_poly_F_2.<locals>.<listcomp>r!   r   Nr#   r,   r   r   r.   rM   rV   rW   r[   rY   rZ   r3   r3   r4   fateman_poly_F_2   s    rg   c           	      C   s   |d|dg}t | d D ]}t|||g}q| d }t|t|d|d d| |}tt||t|||g| |}tt|||g| |}t|t|d |d| |}tt|||g| |}t||| |t||| ||fS )rd   r!   r   r#   )r,   r   r   r   r   r   r   )	r.   r]   rW   r1   r^   rX   ra   ghr3   r3   r4   dmp_fateman_poly_F_2   s    rj   c                    s   dd t  d D }|d }t fdd|dd D  }t| d  | d d f| }t| d  | d d f| }t| d  | d d f| }|| || |fS )8Fateman's GCD benchmark: sparse inputs (deg f ~ vars f) c                 S   s   g | ]}t d t| qS rR   rS   rF   r3   r3   r4   r=     s     z$fateman_poly_F_3.<locals>.<listcomp>r!   r   c                    s   g | ]}| d   qS )r!   r3   rT   r.   r3   r4   r=     s     Nr#   re   rf   r3   rl   r4   fateman_poly_F_3  s    """rm   c                 C   s&  t | d |ji|}td| d D ]$}t|gt||| d |d |}q"t|t|d| d d| |}ttt|| d |gt| d || d | || |}tt|gt| d || d | || |}t|t| d |d| d |}tt|gt| d || d | || |}t||| |t||| ||fS )rk   r!   r   r#   )	r   oner,   r   r   r   r   r   r   )r.   r]   rW   r1   rX   ra   rh   ri   r3   r3   r4   dmp_fateman_poly_F_3  s    "*  ((ro   )ringc                  C   s   t dt\} }}}|d | |d  d|d  | |  d|d  |  d|d   d|  d|d  |d   d|d  |  d|d   ||d   d| |  | d S )Nx,y,zr#   r   r&      r*   r!   rp   r   Rr   rD   zr3   r3   r4   _f_0,  s    rw   c                  C   sr  t dt\} }}}|d | | |d |d  |d   |d |d   d|d  | |  d|d  |  |d |d   d|d  |  ||d  |  d| |d  |  d| |d   || |d   d| | |d   || |  d| |  d| |d   d| |  d	|  |d |d   d|d  |  d| |d   d
| |  d|  d|  d S )Nrq   r   r#         r'   ib     i,  i@     iX  ip  rs   rt   r3   r3   r4   _f_10  s    r|   c                  C   s  t dt\} }}}|d |d  |d |d  |  |d | |d   |d |d   |d |d   |d | |  d|d  |  d|d  |  |d |d  |  d|d  |d   |d |d   d|d  |d   ||  d|  d|  d S )Nrq   rr   r   r#   Z      i  rs   rt   r3   r3   r4   _f_24  s    r   c                  C   s  t dt\} }}}|d |d  |d |d   |d  |d |d  |  |d |  |d |d   |d |d  |d   |d | |d   |d | |  ||d  |d   ||d   || |d   || |d   || |d   |d |  ||d   S )Nrq   rr   r#   r&   r      rs   rt   r3   r3   r4   _f_38  s    r   c                  C   sT  t dt\} }}}|d  |d  | |d |d  |d   |d |d  |d   d|d  |d   |d	 |d  |d
   |d	 |d  |d   d|d	  |d  |  d|d	  |d  |d   |d	 |d
  |d   |d |d
  |d   d|d  |d
  |d   |d | |d   |d
 |d  |d
   d|d
  |d  |d   |d
 |d  |d
   d|d
  |d  |d   d|d
  |d   d|d
  |d
  |d   |d |d  |d	   d|d  |d  |d
   |d |d  |d	   d|d  |d
  |d
   d|d  |d
  |d   |d |d  |d   d|d  |d  |d   d|d  | |d
   |d |d   d|d  |d   ||d  |d	   d| |d  |d
   d| |d  |d
   d| |d  |d   |d
 |d   d|d
  |d	   d|d	   d|d
   S )Nrq   	   r(   rr   r   r      r#   r*   r&   r~      rs   rt   r3   r3   r4   _f_4<  s    r   c                  C   s   t dt\} }}}|d  d|d  |  d|d  |  d| |d   d| | |  d| |d   |d  d|d  |  d| |d   |d  S )Nrq   r   r#   r*   rs   rt   r3   r3   r4   _f_5@  s    r   c                  C   s@  t dt\} }}}}d|d  | d|d  |d  |d   d|d  |d   d| |d   d| |d   d	| | |d   d
| | | |  d|d  |d  |d   d|d  |d   |d |d  |d   |d |d   d|d  |d   d|d  |d   d|d  |d   d| |d   S )Nzx,y,z,tiC  r&   -   r   r#   i  /      ^   r   r*   rs   )ru   r   rD   rv   tr3   r3   r4   _f_6D  s    r   c                  C   s  t dt\} }}}d|d  |d  |d  d|d  |d  |d   d|d  |d  |d   d|d  | |d   |d |d  |d   d|d  |d  |  |d |d  |d   d|d  |d  |d   d|d  | |d   d|d  |d   d|d  |d   d|d  |d  |d   d|d  |d  |  d|d  |d  |d   d|d  |d  |d   d|d  |d  |d   d|d  | |d   d|d  | |d   d|d  | |d   d|d  |d  |  |d |d  |d   |d |d  |d   d|d  |d  |d   d	|d  |d  |  d|d  | |d   d|d  | |d   d|d  |d   d|d  |d   d|d  |d   d|d  |d  |d   d|d  |d  |  d|d  | |d   d|d  | |d   d|d  | |d   d| |d  |  d| |d  |d   d| | |  d| |d   d|d   d| |d   S )
Nrq   r&   r*   r#   r   rr   r   r(   r   rs   rt   r3   r3   r4   _w_1H  s    r   c                  C   sx  t dt\} }}d|d  |d  d|d  |d   d|d  |d   d	|d  |d   d
|d  |d   d|d  |d   d|d  |  d|d   |d |d   |d |d   d|d   |d |d   |d |d   d|d  |d   d|d  |d   |d |d   d|d  |d   |d |d   d|d  |d   d|d   d|d   S )Nzx,y   r(   r   0   r#   r   rr   H      r*   r&   r   i$  rs   )ru   r   rD   r3   r3   r4   _w_2L  s    r   c                   C   s    t  t t t t t t fS N)rw   r|   r   r   r   r   r   r3   r3   r3   r4   f_polysP  s    r   c                   C   s   t  t fS r   )r   r   r3   r3   r3   r4   w_polysS  s    r   )NF)NF)r   rD   )A__doc__Z
sympy.corer   r   r   r   r   r   Zsympy.core.containersr   Zsympy.core.singletonr	   Zsympy.ntheoryr
   Zsympy.polys.densearithr   r   r   r   Zsympy.polys.densebasicr   r   r   r   r   r   Zsympy.polys.domainsr   Zsympy.polys.factortoolsr   Zsympy.polys.polyclassesr   Zsympy.polys.polytoolsr   r   Zsympy.polys.polyutilsr   Zsympy.utilitiesr   r   r   r5   r:   r?   rC   rP   r\   rc   rg   rj   rm   ro   Zsympy.polys.ringsrp   rw   r|   r   r   r   r   r   r   r   r   r   r3   r3   r3   r4   <module>   sP     )!