o
    8Va$                     @   s  d Z ddlmZ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J tjttgksJ tjdksJ tj	dks$J tj
| d | d gks1J dS )z#Test init method of DixonResultant.alpha   r      N)r   dixonr
   pqr   xynmZdummy_variables)a r   P/usr/lib/python3/dist-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sJ dS )z0Test Dixon's polynomial for a numerical example.r   r      r   r   N)r   r   r   r   get_dixon_polynomialZas_exprexpand)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s,J dS )zTests max degrees function.r   r   r	   r   N)r   r   r   r   Zget_max_degrees)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s1J dS )z/Test Dixon's resultant for a numerical example.r   r   r   r   N)r   r   r   get_dixon_matrixdet)r   r   r   r   r   r   r   r   r   r   test_get_dixon_matrix9   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sfJ dS )z2Test Dixon's matrix for example from [Palancz08]_.x, y, zr   r   r                      N)r   r   r   r!   r"   r   )
r   r   zfgr   Zexample_twoZpolymatrixexprr   r   r   !test_get_dixon_matrix_example_twoG   s   
4r0   c                  C   s   t d\} }}tg dg dg d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sXJ t|dksaJ t|dksjJ t|d
kssJ t|dks|J dS )z%Tests precondition for KSY Resultant.A, B, Cr   r   r   )r'         )r)         r   r   r   r3   FTN)r   r   r   ZKSY_precondition)ABCm1m2m3m4m5r   r   r   test_KSY_preconditionV   s0   r@   c            	      C   s  t d\} }}tddgddgddgg}tg dg dg dg}tg dg d	g d
g dg}tg dg dg dg}tg dg dg dg dg}tdd| g|ddgdd|gg}t|tddggkslJ t|tddgddgddggksJ t|tddgddggksJ t|tddgddggksJ t|tdgdgdgdggksJ t|td| g|dgd|ggksJ dS )zATests method for deleting rows and columns containing only zeros.r1   r   r   r   )r   r   r   )r   r   r'   )r   r3   r)   )r   r   r   r   )r   r   r   r   )r   r   r'   r   )r   r   r   r   r   r   )r   r   r'   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r'   r   r'   r3   r)   N)r   r   r   Zdelete_zero_rows_and_columns)	r8   r9   r:   r;   r<   r=   r>   r?   Zm6r   r   r   !test_delete_zero_rows_and_columnsr   s^   
rB   c                  C   s   t d\} }tg dg dg dg}tg dg dg}tg dg dg dg}tdd| gg d|ddgg}t|d	ksBJ t|d
ksKJ t|dksTJ t|| | ks_J dS )z(Tests product of leading entries method.zA, Br2   )r   r'   r3   )r   r   r)   )r   r   r   )r   r   r   rA   r   r&   r   r   N)r   r   r   Zproduct_leading_entries)r8   r9   r;   r<   r=   r>   r   r   r   test_product_leading_entries   s(   
rC   c            
      C   s|   t d\} }}| | | }| d |d  }| | | }t|||g| |g}| }||}||}	|	|d  ks<J dS )z-Tests the KSY Dixon resultant for example oner$   r   r   N)r   r   r   r!   get_KSY_Dixon_resultant)
r   r   r+   r   r   r   r   
dixon_polydixon_matrixDr   r   r   (test_get_KSY_Dixon_resultant_example_one   s   

rH   c            
      C   s   t d\} }}| | | |  |  |d  | |d  | }| d | |  |  | |  ||  | }| d | |  d|   | |  ||  d|  }t|||g| |g}| }||}t||}	|	d| |d  |d  d| d d  ks{J dS )z-Tests the KSY Dixon resultant for example twozx, y, Ar   ir   N)r   r   r   r!   r   rD   )
r   r   r8   r   r   r   r   rE   rF   rG   r   r   r   (test_get_KSY_Dixon_resultant_example_two   s   ,(0
4rI   c                   C   sd   t jttgks	J t jttgksJ t jdksJ t jddgks"J t j	dks)J t j
dks0J dS )z&Test init method of MacaulayResultant.r   r   N)macaulayr
   r   r   r   r   r   r   degreesdegree_mmonomials_sizer   r   r   r   test_macaulay_resultant_init   s   rN   c                   C      t  dksJ d S )Nr   )rJ   Z_get_degree_mr   r   r   r   test_get_degree_m      rP   c                   C   rO   )Nr   )rJ   Zget_sizer   r   r   r   test_get_size   rQ   rR   c                  C   s&  t d\} }}t d\}}}t d\}}}t d\}	}
}t d\}}}t d\}}}|| d  ||  |  ||  |  ||d   || |  ||d   }|	| d  |
|  |  ||  |  ||d   || |  ||d   }||  ||  ||  }t|||g| ||g}|jg dksJ |jd	ksJ |j| d	 | d | | d | | |d  | | | | |d  |d	 |d | ||d  |d	 g
ksJ |jd
ksJ | | ||g| ||g| | | | || |d ggksJ | }|j|j|jfksJ |	|t
||g|	|ggksJ 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   r   r   
   N)r   r   rK   rL   Zmonomial_setrM   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   sL   "


"





r\   c               	   C   sz  t d\} }}t d\}}}t d\}}}t d\}	}
}}}|| ||   ||  }|| d  ||d   ||d   }|	| |
| d   || d  |  ||  |d   ||d   }t|||g| ||g}|jg dkspJ |jdkswJ |jd	ks~J t| |jksJ | }|j	|j|jfksJ |
|t| ||d
gd
| d
d
gd
d
| d
gd
d
d
| ggksJ 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   r2   r'      r   N)r   r   rK   rL   rM   lenrT   r   rU   rV   rW   r   )r   r   r+   Za_0Za_1Za_2Zb_0Zb_1Zb_2Zc_0rX   rY   rZ   Zc_4r,   r-   r   r[   r.   r   r   r   test_macaulay_example_two  s*   $2
r_   N)"__doc__Zsympyr   r   Z
sympy.corer   Zsympy.tensor.indexedr   Z#sympy.polys.multivariate_resultantsr   r   cdr   r   r   r   r   rJ   r   r   r    r#   r0   r@   rB   rC   rH   rI   rN   rP   rR   r\   r_   r   r   r   r   <module>   s4    
3
"