U
    9%e%                     @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ed\ZZed\ZZee e Zeee  Ze
eegeegd	Zeeegeegd	Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(S ))z*Tests for Dixon's and Macaulay's classes.     )Matrix)factor)symbols)IndexedBase)DixonResultantMacaulayResultantza, bx, ypolynomials	variablesc                  C   sf   t d} tjttgksttjttgks,ttj	dks:ttj
dksHttj| d | d gksbtdS )z#Test init method of DixonResultant.alpha   r      N)r   dixonr
   pqAssertionErrorr   xynmZdummy_variables)a r   m/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/tests/test_multivariate_resultants.pytest_dixon_resultant_init   s    r   c                  C   s(  t d} tt }td td  }td t }t|||gttg}t td  | d  ttd  | d   tt | d  | d   tt | d d   t| d  | d d   t| d   td | d  | d   td | d   t| d  | d d   t| d d   }|   |ks$tdS )z0Test Dixon's polynomial for a numerical example.r   r      r   r   N)r   r   r   r   get_dixon_polynomialZas_exprexpandr   )r   r   r   hr   
polynomialr   r   r   #test_get_dixon_polynomial_numerical   s2    6

r    c                  C   s\   t t } t d td  }t d t }t| ||gt tgd}| }||ddgksXtdS )zTests max degrees function.r   r   r	   r   N)r   r   r   r   Zget_max_degreesr   )r   r   r   r   Zdixon_polynomialr   r   r   test_get_max_degrees.   s    r!   c                  C   sf   t d\} }| | }| d |d  }| d | }t|||g| |g}| }|| dksbtdS )z/Test Dixon's resultant for a numerical example.r   r   r   r   N)r   r   r   get_dixon_matrixdetr   )r   r   r   r   r   r   r   r   r   r   test_get_dixon_matrix:   s    r$   c            
      C   s   t d\} }}| d |d  d |d  }| d |d  d |d  }|d |d  d }t|||g||g}| }||}dd| d   d| d   d| d	   d
| d   }	| |	  dkstdS )z2Test Dixon's matrix for example from [Palancz08]_.x, y, zr   r   r                      N)r   r   r   r"   r#   r   r   )
r   r   zfgr   Zexample_twoZpolymatrixexprr   r   r   !test_get_dixon_matrix_example_twoH   s    
4r1   c                  C   s  t d\} }}tdddgdddgdd	d
gg}td|d gd| |d  gg}tddgddgg}t| d ddg| dd|  gg}tddgd|gddgddgg}t|dkstt|dkstt|dkstt|dkstt|dkstdS )z%Tests precondition for KSY Resultant.A, B, Cr   r   r   r(         r*         r   FTN)r   r   r   ZKSY_preconditionr   )ABCm1m2m3m4m5r   r   r   test_KSY_preconditionW   s0    
r@   c            	      C   s  t d\} }}tddgddgddgg}tdddgdddgdddgg}tddddgddddgddddgddddgg}tdddgdddgdddgg}tddddgddddgddddgddddgg}tdd| g|ddgdd|gg}t|tddggkstt|tddgddgddggks0tt|tddgddggksTtt|tddgddggksxtt|tdgdgdgdggkstt|td| g|dgd|ggkstd	S )
zATests method for deleting rows and columns containing only zeros.r2   r   r   r   r   r(   r3   r*   N)r   r   r   Zdelete_zero_rows_and_columnsr   )	r8   r9   r:   r;   r<   r=   r>   r?   Zm6r   r   r   !test_delete_zero_rows_and_columnss   s^    








rA   c                  C   s   t d\} }tdddgdddgdddgg}tdddgdddgg}tdddgdddgdddgg}tdd| gdddg|ddgg}t|d	kstt|dkstt|dkstt|| | kstd
S )z(Tests product of leading entries method.zA, Br   r   r   r   r(   r3   r*   r'   N)r   r   r   Zproduct_leading_entriesr   )r8   r9   r;   r<   r=   r>   r   r   r   test_product_leading_entries   s(    



rB   c            
      C   s|   t d\} }}| | | }| d |d  }| | | }t|||g| |g}| }||}||}	|	|d  ksxtdS )z-Tests the KSY Dixon resultant for example oner%   r   r   N)r   r   r   r"   get_KSY_Dixon_resultantr   )
r   r   r,   r   r   r   r   
dixon_polydixon_matrixDr   r   r   (test_get_KSY_Dixon_resultant_example_one   s    

rG   c            
      C   s   t d\} }}| | | |  |  |d  | |d  | }| d | |  |  | |  ||  | }| d | |  d|   | |  ||  d|  }t|||g| |g}| }||}t||}	|	d| |d  |d  d| d d  kstdS )z-Tests the KSY Dixon resultant for example twozx, y, Ar   ir   N)r   r   r   r"   r   rC   r   )
r   r   r8   r   r   r   r   rD   rE   rF   r   r   r   (test_get_KSY_Dixon_resultant_example_two   s    ,(0
rH   c                   C   sd   t jttgkstt jttgks$tt jdks2tt j	ddgksDtt j
dksRtt jdks`tdS )z&Test init method of MacaulayResultant.r   r   N)macaulayr
   r   r   r   r   r   r   r   degreesdegree_mmonomials_sizer   r   r   r   test_macaulay_resultant_init   s    rM   c                   C   s   t  dkstd S )Nr   )rI   Z_get_degree_mr   r   r   r   r   test_get_degree_m   s    rN   c                   C   s   t  dkstd S )Nr   )rI   get_sizer   r   r   r   r   test_get_size   s    rP   c                  C   s4  t d\} }}t d\}}}t d\}}}t d\}	}
}t d\}}}t d\}}}|| d  ||  |  ||  |  ||d   || |  ||d   }|	| d  |
|  |  ||  |  ||d   || |  ||d   }||  ||  ||  }t|||g| ||g}|jdddgks(t|jd	ks8t|j| d	 | d | | d | | |d  | | | | |d  |d	 |d | ||d  |d	 g
kst|jd
kst| | ||g| ||g| | | | || |d ggkst| }|j	|j|jfkst|
|t||g|	|ggks0tdS )z.Tests the Macaulay for example from [Bruce97]_r%   za_1_1, a_1_2, a_1_3za_2_2, a_2_3, a_3_3zb_1_1, b_1_2, b_1_3zb_2_2, b_2_3, b_3_3zc_1, c_2, c_3r   r   r   
   N)r   r   rJ   r   rK   Zmonomial_setrL   get_row_coefficients
get_matrixshapeget_submatrixr   )r   r   r,   Za_1_1Za_1_2Za_1_3Za_2_2Za_2_3Za_3_3Zb_1_1Zb_1_2Zb_1_3Zb_2_2Zb_2_3Zb_3_3c_1c_2c_3Zf_1Zf_2Zf_3macr/   r   r   r   test_macaulay_example_one   sT    "


"




 
 
 
 rZ   c               	   C   s  t d\} }}t d\}}}t d\}}}t d\}	}
}}}|| ||   ||  }|| d  ||d   ||d   }|	| |
| d   || d  |  ||  |d   ||d   }t|||g| ||g}|jdddgkst|jdkst|jd	kstt| |jkst|	 }|j
|j|jfks6t||t| ||d
gd
| d
d
gd
d
| d
gd
d
d
| ggks~tdS )z=Tests the Macaulay formulation for example from [Stiller96]_.r%   za_0, a_1, a_2zb_0, b_1, b_2zc_0, c_1, c_2, c_3, c_4r   r   r   r(      r   N)r   r   rJ   r   rK   rL   lenrR   r   rS   rT   rU   r   )r   r   r,   Za_0Za_1Za_2Zb_0Zb_1Zb_2Zc_0rV   rW   rX   Zc_4r-   r.   r   rY   r/   r   r   r   test_macaulay_example_two  s*    $2
r]   N)#__doc__Zsympy.matrices.denser   Zsympy.polys.polytoolsr   Z
sympy.corer   Zsympy.tensor.indexedr   Z#sympy.polys.multivariate_resultantsr   r   cdr   r   r   r   r   rI   r   r    r!   r$   r1   r@   rA   rB   rG   rH   rM   rN   rP   rZ   r]   r   r   r   r   <module>   s4   
3
"