a
    ¬<b@  ã                   @   s<  d dl mZ d dl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 d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZ d d
lmZ d dlmZm Z m!Z! d dl"m#Z# d dl$m%Z%m&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!„ Z0d"d#„ Z1d$d%„ Z2d&d'„ Z3d(S ))é    )ÚBasic)ÚIÚRationalÚpi©Úevaluate)ÚS)ÚSymbol)Úsympify)Úsqrt)ÚLineÚPointÚPoint2DÚPoint3DÚLine3DÚPlane)ÚrotateÚscaleÚ	translateÚGeometryEntity)ÚMatrix)ÚsubsetsÚpermutationsÚcartes)ÚUndecidable)ÚraisesÚwarnsc               
      s²	  t ddd} t ddd}t ddd}t ddd}t ddd}t ddd}tj}t||ƒ‰t||ƒ}td	d	ƒ‰td
d
ƒ}td	d
ƒ}	ttd
d	ƒd
d‰ ˆˆv sžJ ‚ˆ|vsªJ ‚|j|ks¸J ‚ˆ| |ksÈJ ‚|ˆ t|| || ƒksæJ ‚| t| | ƒksþJ ‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ tdt	dƒƒtt
ddƒt	dƒƒkslJ ‚t ˆ|¡t||ƒksˆJ ‚t ˆ|¡t|||  |||  ƒks´J ‚t ||¡|ksÊJ ‚| |¡|ksÞJ ‚ˆjtd	d	ƒksôJ ‚t ˆ|¡t	dƒksJ ‚t ˆˆ¡d	ks$J ‚t ˆ|¡t	|jd |jd  ƒksNJ ‚tt‡fdd„ƒ tt‡fdd„ƒ ˆ ˆ ¡ˆ  ˆ¡ksŒJ ‚| ˆ ¡ˆ  |¡ks¦J ‚t |ˆ¡dks¼J ‚t ||	¡d
ksÒJ ‚tt‡fdd„ƒ t||ƒ‰t||ƒ}
t|d
 |ƒ}t ˆ¡sJ ‚ttdd* t ˆtˆdd¡s>J ‚W d   ƒ n1 sT0    Y  ˆ ¡ slJ ‚t ˆ|¡s~J ‚t ˆ|ˆ|
¡s”J ‚t ˆ|ˆ|¡du s®J ‚t ˆˆ||	¡du sÈJ ‚tt‡ fdd„ƒ tt‡ ‡fdd„ƒ ˆ td	d	ƒ¡ˆgks
J ‚ˆ |¡g ksJ ‚ˆ ˆ ¡g ks2J ‚ttdd> t td	d	d	ƒtd	d	ƒ¡td	d	d	ƒgksnJ ‚W d   ƒ n1 s„0    Y  t ddd }t|d	ƒ}td	|ƒ}t| d	ƒ}td	| ƒ}t|d!ƒ}t |¡sàJ ‚t ||¡sòJ ‚t ||||¡sJ ‚t||||fƒD ]}tj|Ž du sJ ‚qt ||d |d ¡du sTJ ‚td	d	ƒ d"d#d$¡du srJ ‚t td	d	d	d	ƒtd
d	d	d	ƒtd
d
d	d	ƒtd
d
d
d	ƒ¡du s´J ‚ˆ ˆ¡sÄJ ‚ˆ dˆ ¡sØJ ‚ˆ |¡rèJ ‚t td
d
ƒd%¡s J ‚t td	d	ƒd&¡sJ ‚ttd'd„ ƒ td	d
ƒjtd
d	ƒksBJ ‚td
d	ƒjtd	d
ƒks^J ‚ˆjd u snJ ‚ˆjszJ ‚|jdu sŠJ ‚ˆjd u sšJ ‚ˆjdu sªJ ‚|js¶J ‚| dd¡tddƒksÒJ ‚ˆ dd¡ˆksèJ ‚| ttd(d(ƒ¡ˆksJ ‚ˆ |¡ˆ |¡ dd¡ks&J ‚ˆ   |¡ˆ |¡ dd¡ksJJ ‚|d! td!d!ƒksbJ ‚|d! td)d)ƒkszJ ‚d!| td!d!ƒks’J ‚ttd*d„ ƒ t| | d
  |ƒt| d |  |d
 ƒ td	d+ƒksØJ ‚tjt
d
dƒ }}t||ƒ !d¡t| "d¡| "d¡dd,ksJ ‚ttd-d„ ƒ t #d.d/¡td	d	ƒksDJ ‚t #d"d/¡td
d	ƒks`J ‚tt‡fd0d„ƒ td
d	ƒ‰ˆ td ¡td	d
ƒksšJ ‚ˆ td ˆ¡ˆks´J ‚td
d
ƒ‰ˆ dd¡tddƒksÚJ ‚ˆ $d
d¡tddƒksöJ ‚ˆ $d
¡tdd
ƒk	sJ ‚ˆj$d
d1td
dƒk	s,J ‚ˆj$ˆj%Ž tddƒk	sHJ ‚tt‡fd2d„ƒ tt‡fd3d„ƒ d	td	d	d	d	ƒv 	s„J ‚d
td	d	d	d	ƒv	sœJ ‚t &¡ d+k	s®J ‚d S )4NÚxT©ÚrealÚyÚx1Úx2Úy1Úy2r   é   )Zslopec                   S   s   t dƒS ©Nr%   ©r   © r(   r(   úo/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/geometry/tests/test_point.pyÚ<lambda>%   ó    ztest_point.<locals>.<lambda>c                   S   s
   t dgƒS r&   r'   r(   r(   r(   r)   r*   &   r+   c                   S   s
   t dtƒS ©Né   ©r   r   r(   r(   r(   r)   r*   '   r+   c                   S   s   t dt tƒS )Né   r.   r(   r(   r(   r)   r*   (   r+   c                   S   s   t dt tƒS r,   r.   r(   r(   r(   r)   r*   )   r+   çfffffA@r-   é©  é   r/   c                      s   t  ˆ d¡S ©Nr   )r   Údistancer(   ©Úp1r(   r)   r*   5   r+   c                      s   t  ˆ tƒ ¡S ©N)r   r4   r   r(   r5   r(   r)   r*   6   r+   c                      s   t  ˆ ˆ ¡S r7   )r   Úcanberra_distancer(   ©Úp3r(   r)   r*   ?   r+   F©Ztest_stacklevelé   )Údimc                      s
   t  ˆ ¡S r7   )r   Úis_collinearr(   )Úliner(   r)   r*   N   r+   c                      s
   ˆ  ˆ ¡S r7   )r>   r(   )r?   Úp1_1r(   r)   r*   O   r+   )Zpositiveé   ©r%   r%   )r/   r/   )r/   r%   )éÿÿÿÿrC   )r   rC   c                   S   s    t  t tdƒtdƒƒt ddƒ¡S )Nzx1%y1zx2%y2r   r%   )r   Úis_scalar_multipler
   r(   r(   r(   r)   r*   l   r+   g      à?çš™™™™™É?c                   S   s   t ddƒd S ©Nr   é
   r'   r(   r(   r(   r)   r*   ƒ   r+   rC   r   c                   S   s   t ddƒd S ©Nr%   r/   r'   r(   r(   r(   r)   r*   ‹   r+   )r   r%   )r%   r   c                      s   t  ˆ t ddƒ¡S r3   )r   Úprojectr(   r5   r(   r)   r*      r+   )r    c                      s
   ˆ   ˆ ¡S r7   ©Ú	transformr(   r9   r(   r)   r*   ž   r+   c                      s   ˆ   tddgddggƒ¡S ©Nr%   r   ©rK   r   r(   ©Úpr(   r)   r*   Ÿ   r+   )'r	   r   ÚHalfr   r   r    r   Ú	TypeErrorÚ
ValueErrorr   r   ÚmidpointÚoriginr4   r   Útaxicab_distancer8   r>   r   ÚUserWarningÚintersectionÚis_concyclicr   rD   r   Zorthogonal_directionÚis_zeroZ
is_nonzeror   r   r   Ú__radd__Ú__rsub__ÚevalfÚnrI   r   ÚargsZaffine_rank)r   r    r!   r"   r#   r$   ÚhalfÚp2Úp4Úp5Úp1_2Úp1_3Zx_posZp2_1Zp2_2Zp2_3Zp2_4Zp2_5ZptsÚaÚbr(   )r?   rO   r6   r@   r:   r)   Ú
test_point   sì    




(,*

:N


 B"$8ÿ


rg   c                     sÊ  t ddd‰t ddd} t ddd}t ddd}t ddd}t ddd}t d	dd}t d
dd}tj}t|||ƒ}t|||ƒ}	tdddƒ}
tdddƒ}tdddƒ}||v s®J ‚||	vsºJ ‚|	j|ksÈJ ‚|
| |ksØJ ‚|	| t|| || || ƒksüJ ‚|	 t| | | ƒksJ ‚tdtdƒƒttddƒtdƒƒksBJ ‚t |
|¡t|||ƒks`J ‚t ||¡t|||  |||  |||  ƒks–J ‚t |	|	¡|	ks¬J ‚|	 |	¡|	ksÀJ ‚t 	|
|¡tdƒksÚJ ‚t 	||¡dksðJ ‚t 	|
|	¡t|	j
d |	jd  |	jd  ƒks$J ‚t|||ƒ}t|||ƒ}t|d ||ƒ}t |
¡ t |
|¡shJ ‚t |
|||¡s~J ‚t |
|||¡du s˜J ‚t |
|
||¡du s²J ‚|
 tdddƒ¡|
gksÐJ ‚|
 |¡g ksäJ ‚|d tdddƒksþJ ‚|d tdddƒksJ ‚d| tdddƒks2J ‚ttdd„ ƒ |j|||fksVJ ‚|	j|||fkslJ ‚|
jdks|J ‚|jdksŒJ ‚|jdksœJ ‚|j
dks¬J ‚|jdks¼J ‚|jdksÌJ ‚tˆˆd  | dƒtˆd ˆ | d dƒ tdddƒks
J ‚tjtddƒtddƒ  }}}t|||ƒ d¡t| d¡| d¡| d¡ddksbJ ‚ttdd„ ƒ tdddƒ‰ ˆ  dd¡tdddƒksšJ ‚ˆ  dd¡tdddƒks¸J ‚ˆ  d¡tdddƒksÔJ ‚ˆ jddtdddƒksòJ ‚ˆ jˆ jŽ tdddƒksJ ‚tdddd d!jd js.J ‚ˆ jdks>J ‚|jdksNJ ‚|jdks^J ‚tt‡ ‡fd"d„ƒ t ¡ s€J ‚t d#d#d$¡s”J ‚t d#d%¡s¦J ‚ttdd& ttd'd„ ƒ W d   ƒ n1 sØ0    Y  t d#d%¡sôJ ‚t dd(dd)¡du sJ ‚tdddƒ}tdddƒ}t ˆ ||¡dks>J ‚t ˆ |||
¡dksXJ ‚t ˆ |¡sjJ ‚tdddƒ}tdddƒ}t ˆ ||¡s–J ‚td)d*d+ƒ‰tj‡fd,d-„tdƒD ƒŽ sÄJ ‚t tˆ| ƒtˆˆ|  ƒt| ˆd ƒ¡du söJ ‚| tˆ |ƒ¡tdddƒgksJ ‚| ddd¡|ks2J ‚| ddd|¡tdddƒksTJ ‚| ddd|
¡|ksnJ ‚tg d.¢g d/¢g d0¢g d1¢gƒ}ˆ   |¡ˆ ks¢J ‚tg d2¢g d3¢g d4¢g d1¢gƒ}ˆ   |¡tdddƒksÞJ ‚tt‡ fd5d„ƒ tt‡ fd6d„ƒ ˆ  !|¡dksJ ‚tddddƒ}ttdd&, ˆ | tddddƒksNJ ‚W d   ƒ n1 sd0    Y  tddddƒ}ttdd&, ˆ | tddddƒks¦J ‚W d   ƒ n1 s¼0    Y  d S )7Nr   Tr   r    r!   r"   Úx3r#   r$   Úy3r   r%   r/   r0   r-   r1   r2   FrA   rE   c                   S   s   t dddƒd S rF   ©r   r(   r(   r(   r)   r*   Ü   r+   ztest_point3D.<locals>.<lambda>)r   r   r   )r%   r%   r%   )r   r%   r/   rC   r<   r   c                   S   s   t dddƒd S )Nr%   r/   r-   rj   r(   r(   r(   r)   r*   ï   r+   )Úzçš™™™™™¹?Úignore)r   Úon_morphc                      s   t  ˆ ˆ¡S r7   ©r   Úare_collinearr(   )rO   r   r(   r)   r*     r+   )r%   r/   r   )r%   r-   r   ©r%   r/   r-   r;   c                   S   s   t  dd¡S )N©r%   r/   rq   )r   Úare_coplanarr(   r(   r(   r)   r*   	  r+   )r%   r%   r   )r%   r/   r%   )r/   r%   r   )r-   r%   r/   c                    s   g | ]}ˆ   d | |f¡‘qS )rC   )Z
projection©Ú.0Úi)Úplaner(   r)   Ú
<listcomp>  r+   z test_point3D.<locals>.<listcomp>)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%   c                      s
   ˆ   ˆ ¡S r7   rJ   r(   rN   r(   r)   r*   '  r+   c                      s   ˆ   tddgddggƒ¡S rL   rM   r(   rN   r(   r)   r*   (  r+   )"r	   r   rP   r   r    r   r   r   rS   r4   r   rk   rp   rW   r   rR   Úcoordinatesr\   r]   r   r   r^   Úis_FloatÚlengthrQ   rs   r   rV   r   Úranger   r   rK   Úequals)r    r!   r"   rh   r#   r$   ri   r_   r6   r`   r:   ra   rb   r@   rc   rd   re   rf   ÚcZplanar2Zplanar3ÚidentityZtransZp_4dZp_4d3dr(   )rO   rw   r   r)   Útest_point3D©   sÔ    $( 
ÿ4
*
ÿ
 ÿ
."2$"  <r€   c                  C   s²   t ddƒ} t ddƒ}d}|  |¡tdƒd ks2J ‚| |¡tdƒd ksLJ ‚| jdksZJ ‚| jdkshJ ‚|jdksvJ ‚|jdks„J ‚| jd	ks’J ‚|jd
ks J ‚| jdks®J ‚d S )Nr%   rA   r<   ç      @)é   r-   é=   r/   é   )r%   rA   )r<   r   )r%   rA   r%   rA   )r   r4   r   r   r    ry   Zbounds©r6   r`   r:   r(   r(   r)   Útest_Point2D6  s    

r†   c                  C   s>   t dddƒ} t dddƒ}t dddƒ}t  | ||¡du s:J ‚d S )	Nr<   éþÿÿÿr‚   r%   r/   r-   é   Fro   r…   r(   r(   r)   Útest_issue_9214J  s    r‰   c                  C   s\   t dddƒ} tddƒ}ttdd& |  |¡tdƒks:J ‚W d   ƒ n1 sN0    Y  d S )Nr%   r   r/   Fr;   rA   )r   r   r   rV   r4   r   ©r6   r`   r(   r(   r)   Útest_issue_11617R  s    
r‹   c                  C   s¬   t ddƒ} |  ttd ƒ¡t ddƒks*J ‚|  tddƒ¡t ddƒksHJ ‚|  tddƒ¡t ddƒksfJ ‚t ddƒ ddd¡t ddƒksˆJ ‚t ddƒ dd	¡t d	d
ƒks¨J ‚d S )Nr%   r/   rC   r-   )r<   rA   r‡   iùÿÿÿr<   rA   r‚   )r   rK   r   r   r   r   rN   r(   r(   r)   Útest_transformZ  s    
 ÿÿrŒ   c                  C   sV   t ddƒt ddƒ } }t ddƒt ddƒ }}t  | ||¡s>J ‚t  | |||¡rRJ ‚d S )NrC   r   r%   r/   )r   rX   )r6   r`   r:   ra   r(   r(   r)   Útest_concyclic_doctest_buge  s    r   c                  C   sø  dddgt ddƒf} dddgt ddƒf}t| |ƒ}tddƒ}dg d¢t dddƒf}t|dƒ}tdddƒ}dg d¢t ddddƒf}t|dƒ}t ddddƒ}	g d	¢}
d
dg}| D ]}t|ƒ q¬|
D ]}| D ]}t||ƒ|ƒ qÆq¾|D ]}|D ]}t||ƒ|Ž  qèqàdg}|D ]}t|ƒ q|
D ] }|D ]}t||ƒ|ƒ q$q|D ] }|D ]}t||ƒ|Ž  qJqBdg}|D ]}t |ƒ qn|
D ] }|D ]}t|	|ƒ|ƒ qŠq‚|D ] }|D ]}t|	|ƒ|Ž  q°q¨tdƒ}t ddƒ}|d|f t dd| ddks J ‚t ddƒ}|d t ddddks&J ‚t ddƒ}|d t ddddksLJ ‚t dddd}t |ddd}|jdksxJ ‚tdd„ |jdd… D ƒƒsšJ ‚tdd„ t |ƒjD ƒƒs¸J ‚t dddsÊJ ‚t	t
dd„ ƒ t	t
dd„ ƒ t	tdd„ ƒ dS ) z‡Functions accepting `Point` objects in `geometry`
    should also accept tuples and lists and
    automatically convert them to points.rr   r%   r/   )r%   r-   r-   rq   )r%   r/   r-   r<   r<   )	r4   rD   rU   rS   rW   Údotr}   Ú__add__Ú__sub__rX   r>   r   r   rl   Fr   g      $@g        rE   rm   ©r=   rn   )rl   rE   r   r   c                 s   s   | ]}|j V  qd S r7   ©rz   rt   r(   r(   r)   Ú	<genexpr>«  r+   z!test_arguments.<locals>.<genexpr>Nc                 s   s   | ]}|j V  qd S r7   r’   rt   r(   r(   r)   r“   ­  r+   Úerrorc                   S   s   t dddddS )Nr%   r-   r”   r‘   r'   r(   r(   r(   r)   r*   ³  r+   z test_arguments.<locals>.<lambda>c                   S   s   t dddddS )Nr%   r-   Úunknownr‘   r'   r(   r(   r(   r)   r*   µ  r+   c                   S   s   t tƒ tƒ ƒS r7   )r   r   r(   r(   r(   r)   r*   ·  r+   )r   r   r   r   r   Úgetattrr	   r^   Úallr   rR   rQ   )Z	singles2dZ
singles2d2Z	doubles2dZp2dZ	singles3dZ	doubles3dZp3dZ	singles4dZ	doubles4dZp4dZtest_singleZtest_doublerO   Úfuncr   re   ÚuZu4r(   r(   r)   Útest_argumentsl  sl    





$

"rš   c                   C   s.   t ddƒjt tdƒd tdƒd ƒks*J ‚d S rH   )r   Úunitr   r(   r(   r(   r)   Ú	test_unit¹  s    rœ   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t ddƒ tddƒ¡S )Nr%   r/   )r   r   rB   )r   rŽ   r   r(   r(   r(   r)   r*   ¾  r+   ztest_dot.<locals>.<lambda>)r   rQ   r(   r(   r(   r)   Útest_dot½  s    r   c                   C   sn   t  t ddƒt ddƒ¡t ddƒt ddƒgks0J ‚t jt ddƒt dddƒddt dddƒt dddƒgksjJ ‚d S )Nr%   r/   r-   r<   r   rm   )rn   )r   Z_normalize_dimensionr(   r(   r(   r)   Útest__normalize_dimensionÁ  s    ÿ
ÿÿÿrž   c                   C   s6   t dƒ tddƒ W d   ƒ n1 s(0    Y  d S )NFr%   r/   )r   r   r(   r(   r(   r)   Útest_issue_22684É  s    
rŸ   c                  C   s
  t dddƒ} t dddƒ}|  t dddƒ¡g d¢ks6J ‚|  t dddƒ¡g d¢ksTJ ‚|  t ddtƒ¡g d¢ksrJ ‚|  t dddƒ¡g d¢ksJ ‚|  t dtdƒdƒ¡g d¢ks²J ‚|  t dddƒ¡g d¢ksÐJ ‚|  t dddƒ¡td	ƒd	 td	ƒd	 dgksJ ‚|  t dddƒ¡tdƒd tdƒd tdƒd gks<J ‚|  t d
dƒ¡dtdƒ d dtdƒ d dgkstJ ‚| t dddƒ¡tdƒ d tdƒ d tdƒ d gks´J ‚| t dddƒ¡g d¢ksÔJ ‚| t dddƒ¡td	ƒd	 dtd	ƒd	 gksJ ‚d S )Nr   r%   )r%   r   r   )r   r%   r   )r   r   r%   rA   r-   g333333@r/   iôÿÿÿiñÿÿÿéüÿÿÿé)   éûÿÿÿé   )r   Zdirection_cosiner   r   rŠ   r(   r(   r)   Útest_direction_cosineÏ  s    "2:8@ r¤   N)4Zsympy.core.basicr   Zsympy.core.numbersr   r   r   Zsympy.core.parametersr   Zsympy.core.singletonr   Zsympy.core.symbolr	   Zsympy.core.sympifyr
   Z(sympy.functions.elementary.miscellaneousr   Zsympy.geometryr   r   r   r   r   r   Zsympy.geometry.entityr   r   r   r   Zsympy.matricesr   Zsympy.utilities.iterablesr   r   r   Zsympy.utilities.miscr   Zsympy.testing.pytestr   r   rg   r€   r†   r‰   r‹   rŒ   r   rš   rœ   r   rž   rŸ   r¤   r(   r(   r(   r)   Ú<module>   s6      M