U
    @f                     @   sX  d dl mZmZ d dlmZ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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 d dlmZ d dlm Z m!Z!m"Z" d dl#m$Z$ edZ%e%& \Z'Z(Z)ed\Z*Z+Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4d d! Z5d"d# Z6d$d% Z7d&d' Z8d(d) Z9d*S )+    )RationalS)simplifytrigsimp)
DerivativeFunctiondiff)pi)symbols)sqrt)cossin)Integral)ImmutableDenseMatrix)Vector
BaseVector	VectorAdd	VectorMul
VectorZero
CoordSys3D)CrossDotcross)raisesCza b cc                  C   sv  t jt t jt j t  } t jt t jt  t jt  }t| |tt jt j t jd t j  t jt j t jt j  t jt j  kstt| |	 t jd t j t j t j t j  t jt j t jt jd   t j  kstt
| |t jd t j t j t j t j  t jt j t jt jd   t j  ks6tt| |t||  ksRtt| |t||  tjksrtd S )N      )r   xizjykr   AssertionErrordoitr   r   zerov1v2 r*   B/tmp/pip-unpacked-wheel-6uje5nh9/sympy/vector/tests/test_vector.py
test_cross   s    PXVr,   c                  C   s   t jt t jt j t  } t jt t jt  t jt  }t| |tt jt j t jd t j  t jt j t jt j  t jt j  kstt| |	 t jd t jt jd   kstt| |	 t jd t jt jd   kstt| |t|| kstd S )Nr   )
r   r   r   r    r!   r"   r#   r   r$   r%   r'   r*   r*   r+   test_dot    s    P,,r-   c                  C   s   dt  } | t d kst| jt diks*tdt dt   dt  }dt dt   t dt  t }||ksnt| | kstdS )zq
    Test whether the Vector framework confirms to the hashing
    and equality testing properties of SymPy.
    r         r   N)r!   r$   
componentsr   r#   __hash__r(   r)   v3r*   r*   r+   test_vector_sympy)   s     r4   c                     s  t ttstttkstttks&tttks2ttt tjksDtttj tksVtttj tkshttjdksvttj tjksttt t	t  t
t   td t t	d t  t
d t  }  |  }d  }tt }t  tst   tjkst tj  kst ttks$t tt	ks8t tt
ksLtt| td ksdtt| t	d ks|tt| t
d kst|ttd t kst|tt	d t	 kst|tt
d t
 kst |  |   kst |  d|    kstt   t ks.tt |ts>t|jtksNt|jtks^tt |tsntt |ts~tt |tstt tjtstt tjtstt  d tst tttgt	gt
ggksttjtdikst|jttikst jtttt	tt
iks.tt tj ksDttt  t ks\ttdttksptt tj ksttdtjtjksttt fdd tt fdd d S )Nr   r      c                      s
     dS Nr6   )outerr*   r(   r*   r+   <lambda>n       ztest_vector.<locals>.<lambda>c                      s
     dS r7   )dotr*   r9   r*   r+   r:   o   r;   )
isinstancer   r   r$   r!   r#   r   r&   abcr   r<   r   Zbase_vectorZmeasure_numberr   Z	to_matrixr   Matrixr0   r   	TypeError)r)   r3   Zv4Zv5r*   r9   r+   test_vector7   sb    $$rC   c                  C   s`  t j dkstt j t jks&tt dks6tt dksFtt dksVtt tksftt tksvtt tksttt } |  tt	td  t kst|  t	td ksttt t
t  tt  }| t	td t
d  td  kst| ||  ks"ttt }| t	dd tj t	dd tj  ks\td S )Nr   r6   r   )r   r&   Z	magnituder$   	normalizer   r!   r#   r>   r   r?   r@   r   r2   r*   r*   r+   test_vector_magnitude_normalizer   s      *rE   c            	      C   s  t d\} }}}dt dt  t }|t@ tt tt  ks@tt|}|t@ tt tt  ksdt| t|ksxt| d |d  dt | |d   t }t|}|t@ | d |d  dt | |d   kstddt  dddt    ddt   t }t|}|t@ dkstdt td  dtd   dtd  t  tt d  t }t|}|t@ dt ksxttttt d t t	 }t
|dtttd  d  t d	t	  kstt
||
 kstttjtjkstd S )
Nz
A, s, k, mr6   r   r.   r   r   r5   )r
   r>   r?   r   r$   r   r	   r   r   r!   r   r   r&   )	Asr#   mZtest1Ztest2Ztest3Ztest4vr*   r*   r+   test_vector_simplify   s&    (0,<2rL   c                   C   s  t tjdksttjt dks(tt tj@ dks:tt t dksLtt tdks^tt tdksptt t @ dkstt t@ dkstt t@ dksttt dkstttdkstttdksttt @ dksttt@ dksttt@ dksttt dkstttdks0tttdksDttt @ dksVttt@ dkshttt@ dksztttdd  d S )Nr   r6   c                   S   s
   t dS r7   )r#   r<   r*   r*   r*   r+   r:      r;   z!test_vector_dot.<locals>.<lambda>)	r   r<   r   r&   r$   r!   r#   r   rB   r*   r*   r*   r+   test_vector_dot   s,    rM   c                   C   s  t tjtjksttjt tjks,tt t tjks@tt ttksRtt tt ksftt t A tjksxtt tA tkstt tA t ksttt t ksttttjkstttt ksttt A t kstttA tjkstttA t ks
ttt tkstttt  ks4ttttjksJttt A tks\tttA t  ksptttA tjksttdttdkstd S r7   )r   r   r   r&   r$   r!   r#   r   r*   r*   r*   r+   test_vector_cross   s*    rN   c                  C   s   t t t } dt  dt  }dt  dt  }| | t t t ksFt| |tddtj  tddtj  tddtj  kst| j| ddtjkst| j|ddtddkst|| t	j
kst|j| ddtjkstd S )Nr   r.   r      T)Zscalar)r   r!   r#   Z
projectionr$   r   r   r   ZOner   r&   ZZeror2   r*   r*   r+   test_projection   s    >rP   c                  C   s  t d} | ttj td tj  tj }t|tt| ttj td tj  dtj  tksdtt|t|t  krt|t	   krt| tttj dt tj  ksn tt
|tt
| tttj t
td ttj  t
dttj  kstd S )Nfr   r5   )r   r>   r   r   r!   r#   r   r$   r   r%   r   )rQ   rK   r*   r*   r+   test_vector_diff_integrate   s"    "
, rR   c                   C   s    t tdd  t tdd  d S )Nc                   S   s
   t dtS )Nr   )r   r   r*   r*   r*   r+   r:      r;   z"test_vector_args.<locals>.<lambda>c                   S   s   t dtjS )Nr   )r   r   r&   r*   r*   r*   r+   r:      r;   )r   
ValueErrorrB   r*   r*   r*   r+   test_vector_args   s    rT   c                  C   s&   ddl m}  d}| tj|ks"td S )Nr   )sreprzCoordSys3D(Str('C'), Tuple(ImmutableDenseMatrix([[Integer(1), Integer(0), Integer(0)], [Integer(0), Integer(1), Integer(0)], [Integer(0), Integer(0), Integer(1)]]), VectorZero())).i)Zsympy.printing.reprrU   r   r   r$   )rU   resr*   r*   r+   
test_srepr   s    rW   c                  C   s   ddl m}  | d}d|j d|j  d|j  }d|j d|j  d|j  }|jdks^t|jdkslt||jdkst|	|jdkstd S )	Nr   r   r   r   r.   r/   TF)
Zsympy.vectorr   r   r!   r#   Z	is_Vectorr$   Z	is_scalarr<   r   )r   r   r(   r)   r*   r*   r+   test_scalar  s    rX   N):Z
sympy.corer   r   Zsympy.simplifyr   r   Zsympy.core.functionr   r   r   Zsympy.core.numbersr	   Zsympy.core.symbolr
   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.integrals.integralsr   Zsympy.matrices.immutabler   rA   Zsympy.vector.vectorr   r   r   r   r   Zsympy.vector.coordsysrectr   r   r   r   Zsympy.testing.pytestr   r   Zbase_vectorsr   r!   r#   r>   r?   r@   r,   r-   r4   rC   rE   rL   rM   rN   rP   rR   rT   rW   rX   r*   r*   r*   r+   <module>   s8   
	;