U
    ZÊ¹j%  ã                   @   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/bwave/python/venv/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sÌt‚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s¶t‚t |¡dksÈt‚t |¡dksÚt‚t |¡dksìt‚t |¡dksþt‚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�s t‚t |¡td| g|dgd|ggƒk�sÊt‚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s–t‚t |¡dks¨t‚t |¡dksºt‚t |¡| | ksÐt‚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söt‚dS )z-Tests the KSY Dixon resultant for example twozx, y, Ar   iøÿÿÿr   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�s t‚|jd
k�s°t‚| ¡ | ||g| ||g| | | | || |d ggk�sìt‚| ¡ }|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sât‚|jdksðt‚|jd	ksþt‚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
"