§
    _²Åj÷E  ã                  ó  — 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
 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 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"  G d„ de¦  «        Z# G d„ de#e	¦  «        Z$ G d„ dee#¦  «        Z% G d„ dee#¦  «        Z& G d„ dee#¦  «        Z' G d„ de#¦  «        Z( G d„ de
¦  «        Z)d„ Z*d„ Z+e#e#_,        e&e#_-        e%e#_.        e'e#_/        e$e#_0         e'¦   «         e#_1        dS ) é    )Úannotations)Úproduct)ÚAdd)Ú	StdFactKB)Ú
AtomicExprÚExpr)ÚPow)ÚS)Údefault_sort_key)Úsympify©Úsqrt)ÚImmutableDenseMatrix)ÚBasisDependentZeroÚBasisDependentÚBasisDependentMulÚBasisDependentAdd)Ú
CoordSys3D)ÚDyadicÚ
BaseDyadicÚ	DyadicAddc                  ó  — e Zd ZU dZdZdZdZded<   ded<   ded<   ded	<   ded
<   ded<   ed„ ¦   «         Z	d„ Z
d„ Zd„ Zd„ Zej        e_        d„ Zd„ Zej        e_        d„ Zdd„Zed„ ¦   «         Zd„ Zej        e_        d„ Zd„ Zd„ ZdS )ÚVectorz�
    Super class for all Vector classes.
    Ideally, neither this class nor any of its subclasses should be
    instantiated by the user.
    FTg      (@ztype[Vector]Ú
_expr_typeÚ	_mul_funcÚ	_add_funcÚ
_zero_funcÚ
_base_funcÚ
VectorZeroÚzeroc                ó   — | j         S )a‚  
        Returns the components of this vector in the form of a
        Python dictionary mapping BaseVector instances to the
        corresponding measure numbers.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> C = CoordSys3D('C')
        >>> v = 3*C.i + 4*C.j + 5*C.k
        >>> v.components
        {C.i: 3, C.j: 4, C.k: 5}

        )Ú_components©Úselfs    úDC:\Projects\Historical\venv\Lib\site-packages\sympy/vector/vector.pyÚ
componentszVector.components%   s   € ð& ÔÐó    c                ó&   — t          | | z  ¦  «        S )z7
        Returns the magnitude of this vector.
        r   r#   s    r%   Ú	magnitudezVector.magnitude:   s   € õ �D˜4‘KÑ Ô Ð r'   c                ó0   — | |                       ¦   «         z  S )z@
        Returns the normalized version of this vector.
        )r)   r#   s    r%   Ú	normalizezVector.normalize@   s   € ð �d—n’nÑ&Ô&Ñ&Ð&r'   c                ó  ‡ — t          |t          ¦  «        r„t          ‰ t          ¦  «        rt          j        S t          j        }|j                             ¦   «         D ];\  }}|j        d                              ‰ ¦  «        }|||z  |j        d         z  z  }Œ<|S ddl	m
} t          ||t          f¦  «        s"t          t          |¦  «        dz   dz   ¦  «        ‚t          ||¦  «        rˆ fd„}|S t          ‰ |¦  «        S )aN  
        Returns the dot product of this Vector, either with another
        Vector, or a Dyadic, or a Del operator.
        If 'other' is a Vector, returns the dot product scalar (SymPy
        expression).
        If 'other' is a Dyadic, the dot product is returned as a Vector.
        If 'other' is an instance of Del, returns the directional
        derivative operator as a Python function. If this function is
        applied to a scalar expression, it returns the directional
        derivative of the scalar field wrt this Vector.

        Parameters
        ==========

        other: Vector/Dyadic/Del
            The Vector or Dyadic we are dotting with, or a Del operator .

        Examples
        ========

        >>> from sympy.vector import CoordSys3D, Del
        >>> C = CoordSys3D('C')
        >>> delop = Del()
        >>> C.i.dot(C.j)
        0
        >>> C.i & C.i
        1
        >>> v = 3*C.i + 4*C.j + 5*C.k
        >>> v.dot(C.k)
        5
        >>> (C.i & delop)(C.x*C.y*C.z)
        C.y*C.z
        >>> d = C.i.outer(C.i)
        >>> C.i.dot(d)
        C.i

        r   é   )ÚDelz is not a vector, dyadic or zdel operatorc                ó(   •— ddl m}  || ‰¦  «        S )Nr   )Údirectional_derivative)Úsympy.vector.functionsr0   )Úfieldr0   r$   s     €r%   r0   z*Vector.dot.<locals>.directional_derivative}   s(   ø€ ØIÐIÐIÐIÐIÐIØ-Ð-¨e°TÑ:Ô:Ð:r'   )Ú
isinstancer   r   r   r    r&   ÚitemsÚargsÚdotÚsympy.vector.deloperatorr.   Ú	TypeErrorÚstr)r$   ÚotherÚoutvecÚkÚvÚvect_dotr.   r0   s   `       r%   r6   z
Vector.dotF   s'  ø€ õP �e�VÑ$Ô$ð 	Ý˜$¥
Ñ+Ô+ð #Ý”{Ð"Ý”[ˆFØÔ(×.Ò.Ñ0Ô0ð 3ð 3‘��1Øœ6 !œ9Ÿ=š=¨Ñ.Ô.�Ø˜( Q™,¨¬°¬Ñ2Ñ2��ØˆMØ0Ð0Ð0Ð0Ð0Ð0Ý˜% #¥v Ñ/Ô/ð 	,Ý�C ™JœJÐ)GÑGØ*ñ+ñ ,ô ,ð ,õ �e˜SÑ!Ô!ð 	*ð;ð ;ð ;ð ;ð ;ð *Ð)å�4˜ÑÔÐr'   c                ó,   — |                       |¦  «        S ©N©r6   ©r$   r:   s     r%   Ú__and__zVector.__and__„   s   € Ø�xŠx˜‰ŒÐr'   c                óx  — t          |t          ¦  «        r–t          | t          ¦  «        rt          j        S t          j        }|j                             ¦   «         D ]M\  }}|                      |j        d         ¦  «        }|                     |j        d         ¦  «        }|||z  z  }ŒN|S t          | |¦  «        S )aÃ  
        Returns the cross product of this Vector with another Vector or
        Dyadic instance.
        The cross product is a Vector, if 'other' is a Vector. If 'other'
        is a Dyadic, this returns a Dyadic instance.

        Parameters
        ==========

        other: Vector/Dyadic
            The Vector or Dyadic we are crossing with.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> C = CoordSys3D('C')
        >>> C.i.cross(C.j)
        C.k
        >>> C.i ^ C.i
        0
        >>> v = 3*C.i + 4*C.j + 5*C.k
        >>> v ^ C.i
        5*C.j + (-4)*C.k
        >>> d = C.i.outer(C.i)
        >>> C.j.cross(d)
        (-1)*(C.k|C.i)

        r   r-   )	r3   r   r   r    r&   r4   Úcrossr5   Úouter)r$   r:   Úoutdyadr<   r=   Úcross_productrF   s          r%   rE   zVector.cross‰   s¯   € õ@ �e�VÑ$Ô$ð 	Ý˜$¥
Ñ+Ô+ð #Ý”{Ð"Ý”kˆGØÔ(×.Ò.Ñ0Ô0ð %ð %‘��1Ø $§
¢
¨1¬6°!¬9Ñ 5Ô 5�Ø%×+Ò+¨A¬F°1¬IÑ6Ô6�Ø˜1˜u™9Ñ$��ØˆNå�T˜5Ñ!Ô!Ð!r'   c                ó,   — |                       |¦  «        S r@   ©rE   rB   s     r%   Ú__xor__zVector.__xor__µ   ó   € Ø�zŠz˜%Ñ Ô Ð r'   c                óX  — t          |t          ¦  «        st          d¦  «        ‚t          | t          ¦  «        st          |t          ¦  «        rt          j        S d„ t          | j                             ¦   «         |j                             ¦   «         ¦  «        D ¦   «         }t          |Ž S )a±  
        Returns the outer product of this vector with another, in the
        form of a Dyadic instance.

        Parameters
        ==========

        other : Vector
            The Vector with respect to which the outer product is to
            be computed.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> N = CoordSys3D('N')
        >>> N.i.outer(N.j)
        (N.i|N.j)

        z!Invalid operand for outer productc                óL   — g | ]!\  \  }}\  }}||z  t          ||¦  «        z  ‘Œ"S © )r   )Ú.0Úk1Úv1Úk2Úv2s        r%   ú
<listcomp>z Vector.outer.<locals>.<listcomp>Ù   sJ   € ð Oð Oð OÑ3E±8°B¸¹X¸bÀ"��b‘�J r¨2Ñ.Ô.Ñ.ð Oð Oð Or'   )
r3   r   r8   r   r   r    r   r&   r4   r   )r$   r:   r5   s      r%   rF   zVector.outerº   s¨   € õ. ˜%¥Ñ(Ô(ð 	ÝÐ?Ñ@Ô@Ð@Ý˜�zÑ*Ô*ð 	Ý˜5¥*Ñ-Ô-ð	å”;ÐðOð OÝ˜4œ?×0Ò0Ñ2Ô2°EÔ4D×4JÒ4JÑ4LÔ4LÑMÔMðOñ Oô Oˆõ ˜$ÐÐr'   c                ó*  — |                       t          j        ¦  «        r|rt          j        nt          j        S |r+|                      |¦  «        |                      | ¦  «        z  S |                      |¦  «        |                      | ¦  «        z  | z  S )a«  
        Returns the vector or scalar projection of the 'other' on 'self'.

        Examples
        ========

        >>> from sympy.vector.coordsysrect import CoordSys3D
        >>> C = CoordSys3D('C')
        >>> i, j, k = C.base_vectors()
        >>> v1 = i + j + k
        >>> v2 = 3*i + 4*j
        >>> v1.projection(v2)
        7/3*C.i + 7/3*C.j + 7/3*C.k
        >>> v1.projection(v2, scalar=True)
        7/3

        )Úequalsr   r    r
   ÚZeror6   )r$   r:   Úscalars      r%   Ú
projectionzVector.projectionÞ   sx   € ð$ �;Š;•v”{Ñ#Ô#ð 	5Ø#Ð4•1”6�6­¬Ð4àð 	;Ø—8’8˜E‘?”? T§X¢X¨d¡^¤^Ñ3Ð3à—8’8˜E‘?”? T§X¢X¨d¡^¤^Ñ3°dÑ:Ð:r'   c                ó$  ‡ — ddl m} t          ‰ t          ¦  «        r#t          j        t          j        t          j        fS t          t           |‰ ¦  «        ¦  «        ¦  «                             ¦   «         }t          ˆ fd„|D ¦   «         ¦  «        S )aé  
        Returns the components of this vector but the output includes
        also zero values components.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D, Vector
        >>> C = CoordSys3D('C')
        >>> v1 = 3*C.i + 4*C.j + 5*C.k
        >>> v1._projections
        (3, 4, 5)
        >>> v2 = C.x*C.y*C.z*C.i
        >>> v2._projections
        (C.x*C.y*C.z, 0, 0)
        >>> v3 = Vector.zero
        >>> v3._projections
        (0, 0, 0)
        r   )Ú_get_coord_systemsc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rO   rA   )rP   Úir$   s     €r%   rU   z'Vector._projections.<locals>.<listcomp>  s#   ø€ Ð4Ð4Ð4 a�d—h’h˜q‘k”kÐ4Ð4Ð4r'   )
Úsympy.vector.operatorsr\   r3   r   r
   rX   ÚnextÚiterÚbase_vectorsÚtuple)r$   r\   Úbase_vecs   `  r%   Ú_projectionszVector._projectionsø   sŒ   ø€ ð, 	>Ð=Ð=Ð=Ð=Ð=Ý�d�JÑ'Ô'ð 	,Ý”F�AœF¥A¤FÐ+Ð+Ý�Ð/Ð/°Ñ5Ô5Ñ6Ô6Ñ7Ô7×DÒDÑFÔFˆÝÐ4Ð4Ð4Ð4¨8Ð4Ñ4Ô4Ñ5Ô5Ð5r'   c                ó,   — |                       |¦  «        S r@   )rF   rB   s     r%   Ú__or__zVector.__or__  rL   r'   c                ó^   ‡ — t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        S )a  
        Returns the matrix form of this vector with respect to the
        specified coordinate system.

        Parameters
        ==========

        system : CoordSys3D
            The system wrt which the matrix form is to be computed

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> C = CoordSys3D('C')
        >>> from sympy.abc import a, b, c
        >>> v = a*C.i + b*C.j + c*C.k
        >>> v.to_matrix(C)
        Matrix([
        [a],
        [b],
        [c]])

        c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rO   rA   )rP   Úunit_vecr$   s     €r%   rU   z$Vector.to_matrix.<locals>.<listcomp>3  s1   ø€ ð .ð .ð .¨h�t—x’x Ñ)Ô)ð .ð .ð .r'   )ÚMatrixrb   )r$   Úsystems   ` r%   Ú	to_matrixzVector.to_matrix  sI   ø€ õ4 ð .ð .ð .ð .Ø×*Ò*Ñ,Ô,ð.ñ .ô .ñ /ô /ð 	/r'   c                ó®   — i }| j                              ¦   «         D ]8\  }}|                     |j        t          j        ¦  «        ||z  z   ||j        <   Œ9|S )aÅ  
        The constituents of this vector in different coordinate systems,
        as per its definition.

        Returns a dict mapping each CoordSys3D to the corresponding
        constituent Vector.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> R1 = CoordSys3D('R1')
        >>> R2 = CoordSys3D('R2')
        >>> v = R1.i + R2.i
        >>> v.separate() == {R1: R1.i, R2: R2.i}
        True

        )r&   r4   Úgetrl   r   r    )r$   ÚpartsÚvectÚmeasures       r%   ÚseparatezVector.separate6  s\   € ð( ˆØ!œ_×2Ò2Ñ4Ô4ð 	2ð 	2‰MˆD�'Ø"'§)¢)¨D¬K½¼Ñ"EÔ"EØ"&¨¡.ñ#1ˆE�$”+ÑÐàˆr'   c                óJ  — t          | t          ¦  «        r$t          |t          ¦  «        rt          d¦  «        ‚t          | t          ¦  «        rG|t          j        k    rt          d¦  «        ‚t          | t          |t          j        ¦  «        ¦  «        S t          d¦  «        ‚)z( Helper for division involving vectors. zCannot divide two vectorszCannot divide a vector by zeroz#Invalid division involving a vector)	r3   r   r8   r
   rX   Ú
ValueErrorÚ	VectorMulr	   ÚNegativeOne)Úoner:   s     r%   Ú_div_helperzVector._div_helperP  sŽ   € å�c�6Ñ"Ô"ð 	C¥z°%½Ñ'@Ô'@ð 	CÝÐ7Ñ8Ô8Ð8Ý˜�VÑ$Ô$ð 	CØ�œŠˆÝ Ð!AÑBÔBÐBÝ˜S¥# e­Q¬]Ñ";Ô";Ñ<Ô<Ð<åÐAÑBÔBÐBr'   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	is_scalarÚ	is_VectorÚ_op_priorityÚ__annotations__Úpropertyr&   r)   r+   r6   rC   rE   rK   rF   rZ   re   rg   rm   rs   ry   rO   r'   r%   r   r      s�  € € € € € € ðð ð €IØ€IØ€LàÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑàð ð  ñ „Xð ð(!ð !ð !ð'ð 'ð 'ð< ð < ð < ð|ð ð ð ”k€G„Oð*"ð *"ð *"ðX!ð !ð !ð ”m€G„Oð" ð " ð " ðH;ð ;ð ;ð ;ð4 ð6ð 6ñ „Xð6ð6!ð !ð !ð ”]€F„Nð/ð /ð /ð:ð ð ð4	Cð 	Cð 	Cð 	Cð 	Cr'   r   c                  ó\   ‡ — e Zd ZdZdˆ fd„	Zed„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Z	ˆ xZ
S )	Ú
BaseVectorz)
    Class to denote a base vector.

    Nc                óž  •— |€d                      |¦  «        }|€d                      |¦  «        }t          |¦  «        }t          |¦  «        }|t          dd¦  «        vrt          d¦  «        ‚t	          |t
          ¦  «        st          d¦  «        ‚|j        |         }t          ¦   «          	                    | t          |¦  «        |¦  «        }||_        |t          j        i|_        t          j        |_        |j        dz   |z   |_        d|z   |_        ||_        ||_        ||f|_        d	d
i}t)          |¦  «        |_        ||_        |S )Nzx{}zx_{}r   é   zindex must be 0, 1 or 2zsystem should be a CoordSys3Dú.Ú ÚcommutativeT)Úformatr9   Úrangeru   r3   r   r8   Ú_vector_namesÚsuperÚ__new__r
   Ú_base_instanceÚOner"   Ú_measure_numberÚ_nameÚ_pretty_formÚ_latex_formÚ_systemÚ_idr   Ú_assumptionsÚ_sys)	ÚclsÚindexrl   Ú
pretty_strÚ	latex_strÚnameÚobjÚassumptionsÚ	__class__s	           €r%   rŽ   zBaseVector.__new__b  s5  ø€ ØÐØŸš eÑ,Ô,ˆJØÐØŸš eÑ,Ô,ˆIÝ˜‘_”_ˆ
Ý˜	‘N”Nˆ	à�˜a ™œÐ#Ð#ÝÐ6Ñ7Ô7Ð7Ý˜&¥*Ñ-Ô-ð 	=ÝÐ;Ñ<Ô<Ð<ØÔ# EÔ*ˆå‰gŒg�oŠo˜c¥1 U¡8¤8¨VÑ4Ô4ˆà ˆÔØ¥¤˜,ˆŒÝœeˆÔØ”L 3Ñ&¨Ñ-ˆŒ	Ø 
™?ˆÔØ#ˆŒØˆŒà˜&�/ˆŒØ$ dÐ+ˆÝ$ [Ñ1Ô1ˆÔð
 ˆŒàˆ
r'   c                ó   — | j         S r@   )r•   r#   s    r%   rl   zBaseVector.system…  s
   € àŒ|Ðr'   c                ó   — | j         S r@   )r’   )r$   Úprinters     r%   Ú	_sympystrzBaseVector._sympystr‰  s
   € ØŒzÐr'   c                ób   — | j         \  }}|                     |¦  «        dz   |j        |         z   S )Nr‡   )r–   Ú_printrŒ   )r$   r£   rš   rl   s       r%   Ú
_sympyreprzBaseVector._sympyreprŒ  s1   € Øœ‰ˆˆvØ�~Š~˜fÑ%Ô%¨Ñ+¨fÔ.BÀ5Ô.IÑIÐIr'   c                ó   — | hS r@   rO   r#   s    r%   Úfree_symbolszBaseVector.free_symbols�  s	   € àˆvˆr'   )NN)rz   r{   r|   r}   rŽ   r‚   rl   r¤   r§   r©   Ú__classcell__)r    s   @r%   r„   r„   \  sŸ   ø€ € € € € ðð ð
!ð !ð !ð !ð !ð !ðF ðð ñ „Xððð ð ðJð Jð Jð ðð ñ „Xðð ð ð ð r'   r„   c                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú	VectorAddz2
    Class to denote sum of Vector instances.
    c                ó0   — t          j        | g|¢R i |¤Ž}|S r@   )r   rŽ   ©r™   r5   Úoptionsrž   s       r%   rŽ   zVectorAdd.__new__š  ó'   € ÝÔ'¨Ð>¨dÐ>Ð>Ð>°gÐ>Ð>ˆØˆ
r'   c                óX  — d}t          |                      ¦   «                              ¦   «         ¦  «        }|                     d„ ¬¦  «         |D ]R\  }}|                     ¦   «         }|D ]6}||j        v r+| j        |         |z  }||                     |¦  «        dz   z  }Œ7ŒS|d d…         S )Nrˆ   c                ó6   — | d                               ¦   «         S )Nr   )Ú__str__)Úxs    r%   ú<lambda>z%VectorAdd._sympystr.<locals>.<lambda>¡  s   €   1¤§¢¡¤€ r'   ©Úkeyz + éýÿÿÿ)Úlistrs   r4   Úsortrb   r&   r¦   )	r$   r£   Úret_strr4   rl   rq   Ú
base_vectsr´   Ú	temp_vects	            r%   r¤   zVectorAdd._sympystrž  sÇ   € ØˆÝ�T—]’]‘_”_×*Ò*Ñ,Ô,Ñ-Ô-ˆØ�
Š
Ð/Ð/ˆ
Ñ0Ô0Ð0Ø!ð 	Að 	A‰LˆF�DØ×,Ò,Ñ.Ô.ˆJØð Að A�Ø˜œÐ'Ð'Ø $¤°Ô 2°QÑ 6�IØ˜wŸ~š~¨iÑ8Ô8¸5Ñ@Ñ@�GøðAð �s˜�sŒ|Ðr'   N)rz   r{   r|   r}   rŽ   r¤   rO   r'   r%   r¬   r¬   •  s<   € € € € € ðð ðð ð ð
ð 
ð 
ð 
ð 
r'   r¬   c                  óD   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         ZdS )rv   z>
    Class to denote products of scalars and BaseVectors.
    c                ó0   — t          j        | g|¢R i |¤Ž}|S r@   )r   rŽ   r®   s       r%   rŽ   zVectorMul.__new__°  r°   r'   c                ó   — | j         S )z) The BaseVector involved in the product. )r�   r#   s    r%   Úbase_vectorzVectorMul.base_vector´  s   € ð Ô"Ð"r'   c                ó   — | j         S )zU The scalar expression involved in the definition of
        this VectorMul.
        )r‘   r#   s    r%   Úmeasure_numberzVectorMul.measure_number¹  s   € ð
 Ô#Ð#r'   N)rz   r{   r|   r}   rŽ   r‚   rÁ   rÃ   rO   r'   r%   rv   rv   «  sc   € € € € € ðð ðð ð ð ð#ð #ñ „Xð#ð ð$ð $ñ „Xð$ð $ð $r'   rv   c                  ó$   — e Zd ZdZdZdZdZd„ ZdS )r   z'
    Class to denote a zero vector
    g333333(@Ú0z\mathbf{\hat{0}}c                ó.   — t          j        | ¦  «        }|S r@   )r   rŽ   )r™   rž   s     r%   rŽ   zVectorZero.__new__Ê  s   € Ý Ô(¨Ñ-Ô-ˆØˆ
r'   N)rz   r{   r|   r}   r€   r“   r”   rŽ   rO   r'   r%   r   r   Á  s>   € € € € € ðð ð €LØ€LØ%€Kðð ð ð ð r'   r   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚCrossaŒ  
    Represents unevaluated Cross product.

    Examples
    ========

    >>> from sympy.vector import CoordSys3D, Cross
    >>> R = CoordSys3D('R')
    >>> v1 = R.i + R.j + R.k
    >>> v2 = R.x * R.i + R.y * R.j + R.z * R.k
    >>> Cross(v1, v2)
    Cross(R.i + R.j + R.k, R.x*R.i + R.y*R.j + R.z*R.k)
    >>> Cross(v1, v2).doit()
    (-R.y + R.z)*R.i + (R.x - R.z)*R.j + (-R.x + R.y)*R.k

    c                óì   — t          |¦  «        }t          |¦  «        }t          |¦  «        t          |¦  «        k    rt          ||¦  «         S t          j        | ||¦  «        }||_        ||_        |S r@   )r   r   rÈ   r   rŽ   Ú_expr1Ú_expr2©r™   Úexpr1Úexpr2rž   s       r%   rŽ   zCross.__new__á  sm   € Ý˜‘”ˆÝ˜‘”ˆÝ˜EÑ"Ô"Õ%5°eÑ%<Ô%<Ò<Ð<Ý˜% Ñ'Ô'Ð'Ð'ÝŒl˜3  uÑ-Ô-ˆØˆŒ
ØˆŒ
Øˆ
r'   c                ó6   — t          | j        | j        ¦  «        S r@   )rE   rÊ   rË   ©r$   Úhintss     r%   Údoitz
Cross.doitë  s   € Ý�T”[ $¤+Ñ.Ô.Ð.r'   N©rz   r{   r|   r}   rŽ   rÒ   rO   r'   r%   rÈ   rÈ   Ï  s<   € € € € € ðð ð"ð ð ð/ð /ð /ð /ð /r'   rÈ   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚDota�  
    Represents unevaluated Dot product.

    Examples
    ========

    >>> from sympy.vector import CoordSys3D, Dot
    >>> from sympy import symbols
    >>> R = CoordSys3D('R')
    >>> a, b, c = symbols('a b c')
    >>> v1 = R.i + R.j + R.k
    >>> v2 = a * R.i + b * R.j + c * R.k
    >>> Dot(v1, v2)
    Dot(R.i + R.j + R.k, a*R.i + b*R.j + c*R.k)
    >>> Dot(v1, v2).doit()
    a + b + c

    c                óÀ   — t          |¦  «        }t          |¦  «        }t          ||gt          ¬¦  «        \  }}t          j        | ||¦  «        }||_        ||_        |S )Nr¶   )r   Úsortedr   r   rŽ   rÊ   rË   rÌ   s       r%   rŽ   zDot.__new__  sY   € Ý˜‘”ˆÝ˜‘”ˆÝ˜u e˜nÕ2BÐCÑCÔC‰ˆˆuÝŒl˜3  uÑ-Ô-ˆØˆŒ
ØˆŒ
Øˆ
r'   c                ó6   — t          | j        | j        ¦  «        S r@   )r6   rÊ   rË   rÐ   s     r%   rÒ   zDot.doit  s   € Ý�4”; ¤Ñ,Ô,Ð,r'   NrÓ   rO   r'   r%   rÕ   rÕ   ï  s<   € € € € € ðð ð&ð ð ð-ð -ð -ð -ð -r'   rÕ   c                ó   ‡ ‡— t          ‰ t          ¦  «        r+t                               ˆfd„‰ j        D ¦   «         ¦  «        S t          ‰t          ¦  «        r+t                               ˆ fd„‰j        D ¦   «         ¦  «        S t          ‰ t
          ¦  «        röt          ‰t
          ¦  «        rá‰ j        ‰j        k    r‰‰ j        d         }‰j        d         }||k    rt          j        S h d£ 	                    ||h¦  «         
                    ¦   «         }|dz   dz  |k    rdnd}|‰ j                             ¦   «         |         z  S ddlm} 	  |‰ ‰j        ¦  «        }t          |‰¦  «        S # t          $ r t!          ‰ ‰¦  «        cY S w xY wt          ‰ t"          ¦  «        st          ‰t"          ¦  «        rt          j        S t          ‰ t$          ¦  «        rIt'          t)          ‰ j                             ¦   «         ¦  «        ¦  «        \  }}	|	t          |‰¦  «        z  S t          ‰t$          ¦  «        rIt'          t)          ‰j                             ¦   «         ¦  «        ¦  «        \  }
}|t          ‰ |
¦  «        z  S t!          ‰ ‰¦  «        S )	a^  
    Returns cross product of two vectors.

    Examples
    ========

    >>> from sympy.vector import CoordSys3D
    >>> from sympy.vector.vector import cross
    >>> R = CoordSys3D('R')
    >>> v1 = R.i + R.j + R.k
    >>> v2 = R.x * R.i + R.y * R.j + R.z * R.k
    >>> cross(v1, v2)
    (-R.y + R.z)*R.i + (R.x - R.z)*R.j + (-R.x + R.y)*R.k

    c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r@   rJ   ©rP   r^   Úvect2s     €r%   ú	<genexpr>zcross.<locals>.<genexpr>!  s+   øè è € Ð!FÐ!F°a¥%¨¨5¡/¤/Ð!FÐ!FÐ!FÐ!FÐ!FÐ!Fr'   c              3  ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r@   rJ   ©rP   r^   Úvect1s     €r%   rÝ   zcross.<locals>.<genexpr>#  s+   øè è € Ð!FÐ!F°a¥%¨¨q¡/¤/Ð!FÐ!FÐ!FÐ!FÐ!FÐ!Fr'   r   >   r   r-   é   r-   r†   éÿÿÿÿ©Úexpress)r3   r   r¬   Úfromiterr5   r„   r˜   r   r    Ú
differenceÚpoprb   Ú	functionsrä   rE   ru   rÈ   r   rv   r`   ra   r&   r4   )rà   rÜ   Ún1Ún2Ún3Úsignrä   r=   rR   Úm1rT   Úm2s   ``          r%   rE   rE     sƒ  øø€ õ  �%�ÑÔð GÝ×!Ò!Ð!FÐ!FÐ!FÐ!F¸5¼:Ð!FÑ!FÔ!FÑFÔFÐFÝ�%�ÑÔð GÝ×!Ò!Ð!FÐ!FÐ!FÐ!F¸5¼:Ð!FÑ!FÔ!FÑFÔFÐFÝ�%�Ñ$Ô$ð #­°E½:Ñ)FÔ)Fð #ØŒ:˜œÒ#Ð#Ø”˜A”ˆBØ”˜A”ˆBØ�RŠxˆxÝ”{Ð"Ø�'�'×$Ò$ b¨" XÑ.Ô.×3Ò3Ñ5Ô5ˆBØ˜q™& A™¨Ò+Ð+�1�1°"ˆDØ˜œ
×/Ò/Ñ1Ô1°"Ô5Ñ5Ð5Ø&Ð&Ð&Ð&Ð&Ð&ð	#Ø�˜˜uœzÑ*Ô*ˆAõ ˜˜E‘?”?Ð"øõ ð 	'ð 	'ð 	'Ý˜ Ñ&Ô&Ð&Ð&Ð&ð	'øøøõ �%�Ñ$Ô$ð ­
°5½*Ñ(EÔ(Eð ÝŒ{ÐÝ�%�Ñ#Ô#ð #Ý•d˜5Ô+×1Ò1Ñ3Ô3Ñ4Ô4Ñ5Ô5‰ˆˆBØ•%˜˜EÑ"Ô"Ñ"Ð"Ý�%�Ñ#Ô#ð #Ý•d˜5Ô+×1Ò1Ñ3Ô3Ñ4Ô4Ñ5Ô5‰ˆˆBØ•%˜˜rÑ"Ô"Ñ"Ð"å�˜ÑÔÐs   ÅE. Å.FÆ
Fc                ó2  ‡ ‡— t          ‰ t          ¦  «        r%t          j        ˆfd„‰ j        D ¦   «         ¦  «        S t          ‰t          ¦  «        r%t          j        ˆ fd„‰j        D ¦   «         ¦  «        S t          ‰ t          ¦  «        r‹t          ‰t          ¦  «        rv‰ j        ‰j        k    r‰ ‰k    rt          j        nt          j        S ddl	m
} 	  |‰‰ j        ¦  «        }t          ‰ |¦  «        S # t          $ r t          ‰ ‰¦  «        cY S w xY wt          ‰ t          ¦  «        st          ‰t          ¦  «        rt          j        S t          ‰ t          ¦  «        rIt!          t#          ‰ j                             ¦   «         ¦  «        ¦  «        \  }}|t          |‰¦  «        z  S t          ‰t          ¦  «        rIt!          t#          ‰j                             ¦   «         ¦  «        ¦  «        \  }}|t          ‰ |¦  «        z  S t          ‰ ‰¦  «        S )a2  
    Returns dot product of two vectors.

    Examples
    ========

    >>> from sympy.vector import CoordSys3D
    >>> from sympy.vector.vector import dot
    >>> R = CoordSys3D('R')
    >>> v1 = R.i + R.j + R.k
    >>> v2 = R.x * R.i + R.y * R.j + R.z * R.k
    >>> dot(v1, v2)
    R.x + R.y + R.z

    c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r@   rA   rÛ   s     €r%   rÝ   zdot.<locals>.<genexpr>Q  s+   øè è € Ð>Ð>¨a�C  5™MœMÐ>Ð>Ð>Ð>Ð>Ð>r'   c              3  ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r@   rA   rß   s     €r%   rÝ   zdot.<locals>.<genexpr>S  s+   øè è € Ð>Ð>¨a�C  q™MœMÐ>Ð>Ð>Ð>Ð>Ð>r'   r-   rã   )r3   r   rå   r5   r„   r˜   r
   r�   rX   rè   rä   r6   ru   rÕ   r   rv   r`   ra   r&   r4   )rà   rÜ   rä   r=   rR   rí   rT   rî   s   ``      r%   r6   r6   @  s  øø€ õ  �%�ÑÔð ?ÝŒ|Ð>Ð>Ð>Ð>°5´:Ð>Ñ>Ô>Ñ>Ô>Ð>Ý�%�ÑÔð ?ÝŒ|Ð>Ð>Ð>Ð>°5´:Ð>Ñ>Ô>Ñ>Ô>Ð>Ý�%�Ñ$Ô$ð 	!­°E½:Ñ)FÔ)Fð 	!ØŒ:˜œÒ#Ð#Ø! UšN˜N•1”5�5µ´Ð6Ø&Ð&Ð&Ð&Ð&Ð&ð	!Ø�˜˜uœzÑ*Ô*ˆAõ �u˜a‘=”=Ð øõ ð 	%ð 	%ð 	%Ý�u˜eÑ$Ô$Ð$Ð$Ð$ð	%øøøõ �%�Ñ$Ô$ð ­
°5½*Ñ(EÔ(Eð ÝŒvˆÝ�%�Ñ#Ô#ð !Ý•d˜5Ô+×1Ò1Ñ3Ô3Ñ4Ô4Ñ5Ô5‰ˆˆBØ•#�b˜%‘.”.Ñ Ð Ý�%�Ñ#Ô#ð !Ý•d˜5Ô+×1Ò1Ñ3Ô3Ñ4Ô4Ñ5Ô5‰ˆˆBØ•#�e˜R‘.”.Ñ Ð åˆu�eÑÔÐs   ÃC7 Ã7DÄDN)2Ú
__future__r   Ú	itertoolsr   Úsympy.core.addr   Úsympy.core.assumptionsr   Úsympy.core.exprr   r   Úsympy.core.powerr	   Úsympy.core.singletonr
   Úsympy.core.sortingr   Úsympy.core.sympifyr   Ú(sympy.functions.elementary.miscellaneousr   Úsympy.matrices.immutabler   rk   Úsympy.vector.basisdependentr   r   r   r   Úsympy.vector.coordsysrectr   Úsympy.vector.dyadicr   r   r   r   r„   r¬   rv   r   rÈ   rÕ   rE   r6   r   r   r   r   r   r    rO   r'   r%   ú<module>r      sÝ  ðØ "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ø &Ð &Ð &Ð &Ð &Ð &Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø CÐ CÐ CÐ CÐ CÐ Cð:ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :ð :à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ðFCð FCð FCð FCð FCˆ^ñ FCô FCð FCðR
6ð 6ð 6ð 6ð 6�˜ñ 6ô 6ð 6ðrð ð ð ð Ð! 6ñ ô ð ð,$ð $ð $ð $ð $Ð! 6ñ $ô $ð $ð,ð ð ð ð Ð# Vñ ô ð ð/ð /ð /ð /ð /ˆFñ /ô /ð /ð@-ð -ð -ð -ð -ˆ$ñ -ô -ð -ðB-ð -ð -ð`'ð 'ð 'ðT €Ô Ø€Ô Ø€Ô Ø€Ô Ø€Ô Øˆj‰lŒl€„€€r'   