§
    OŠtjZC  ã                   óŒ   — d g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  G d	„ d ¦  «        Zd
„ ZdS )Ú
Linearizeré    )ÚMatrixÚeyeÚzeros©ÚDummy)Úflatten)Údynamicsymbols)ÚmsubsÚ_parse_linear_solver)Ú
namedtuple)ÚIterablec                   ó@   — e Zd ZdZ	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Zdd
„Z	dS )r   aI  This object holds the general model form for a dynamic system. This
    model is used for computing the linearized form of the system, while
    properly dealing with constraints leading to  dependent coordinates and
    speeds. The notation and method is described in [1]_.

    Attributes
    ==========

    f_0, f_1, f_2, f_3, f_4, f_c, f_v, f_a : Matrix
        Matrices holding the general system form.
    q, u, r : Matrix
        Matrices holding the generalized coordinates, speeds, and
        input vectors.
    q_i, u_i : Matrix
        Matrices of the independent generalized coordinates and speeds.
    q_d, u_d : Matrix
        Matrices of the dependent generalized coordinates and speeds.
    perm_mat : Matrix
        Permutation matrix such that [q_ind, u_ind]^T = perm_mat*[q, u]^T

    References
    ==========

    .. [1] D. L. Peterson, G. Gede, and M. Hubbard, "Symbolic linearization of
           equations of motion of constrained multibody systems," Multibody
           Syst Dyn, vol. 33, no. 2, pp. 143-161, Feb. 2015, doi:
           10.1007/s11044-014-9436-5.

    NÚLUc                 ó¤  ‡— t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        t          |¦  «        | _
        t          |	¦  «        | _        t          |
¦  «        | _        d„ } ||¦  «        | _         ||¦  «        | _         ||¦  «        | _         ||¦  «        | _         ||¦  «        | _         ||¦  «        | _        | j                             t(          j        ¦  «        | _        | j                             t(          j        ¦  «        | _        t1          | j        ¦  «                             | j        ¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        | _        t7          | j        ¦  «        }t7          | j	        ¦  «        }t7          | j        ¦  «        }t7          | j        ¦  «        }t7          | j        ¦  «        }t7          | j        ¦  «        }t9          dg d¢¦  «        } |||||||¦  «        | _        d| _        d| _        d| _         d| _!        d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        d| _(        dS )a�  
        Parameters
        ==========

        f_0, f_1, f_2, f_3, f_4, f_c, f_v, f_a : array_like
            System of equations holding the general system form.
            Supply empty array or Matrix if the parameter
            does not exist.
        q : array_like
            The generalized coordinates.
        u : array_like
            The generalized speeds
        q_i, u_i : array_like, optional
            The independent generalized coordinates and speeds.
        q_d, u_d : array_like, optional
            The dependent generalized coordinates and speeds.
        r : array_like, optional
            The input variables.
        lams : array_like, optional
            The lagrange multipliers
        linear_solver : str, callable
            Method used to solve the several symbolic linear systems of the
            form ``A*x=b`` in the linearization process. If a string is
            supplied, it should be a valid method that can be used with the
            :meth:`sympy.matrices.matrixbase.MatrixBase.solve`. If a callable is
            supplied, it should have the format ``x = f(A, b)``, where it
            solves the equations and returns the solution. The default is
            ``'LU'`` which corresponds to SymPy's ``A.LUsolve(b)``.
            ``LUsolve()`` is fast to compute but will often result in
            divide-by-zero and thus ``nan`` results.

        c                 ó@   — | rt          | ¦  «        nt          ¦   «         S )N)r   )Úxs    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/mechanics/linearize.pyú<lambda>z%Linearizer.__init__.<locals>.<lambda>^   s   € ¨aÐ!=¥¨¡¤ µV±X´X€ ó    c                 ó8   •— g | ]}|‰vr|nt          ¦   «         ‘ŒS © r   )Ú.0ÚvarÚdup_varss     €r   ú
<listcomp>z'Linearizer.__init__.<locals>.<listcomp>m   s7   ø€ ð ,ð ,ð ,È3 c°Ð&9Ð&9˜s˜s½u¹w¼wð ,ð ,ð ,r   Údims)ÚlÚmÚnÚoÚsÚkNF))r   Úlinear_solverr   Úf_0Úf_1Úf_2Úf_3Úf_4Úf_cÚf_vÚf_aÚqÚuÚq_iÚq_dÚu_iÚu_dÚrÚlamsÚdiffr
   Ú_tÚ_qdÚ_udÚsetÚintersectionÚ_qd_dupÚlenr   Ú_dimsÚ_PqÚ_PqiÚ_PqdÚ_PuÚ_PuiÚ_PudÚ_C_0Ú_C_1Ú_C_2Úperm_matÚ_setup_done)Úselfr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r$   Únone_handlerr   r   r    r!   r"   r#   r   r   s                             @r   Ú__init__zLinearizer.__init__,   sg  ø€ õF 2°-Ñ@Ô@ˆÔõ ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒÝ˜#‘;”;ˆŒõ ˜‘”ˆŒÝ˜‘”ˆŒØ=Ð=ˆØ�< Ñ$Ô$ˆŒØ�< Ñ$Ô$ˆŒØ�< Ñ$Ô$ˆŒØ�< Ñ$Ô$ˆŒØ�˜a‘”ˆŒØ �L Ñ&Ô&ˆŒ	ð ”6—;’;�~Ô0Ñ1Ô1ˆŒØ”6—;’;�~Ô0Ñ1Ô1ˆŒõ �t”x‘=”=×-Ò-¨d¬fÑ5Ô5ˆÝð ,ð ,ð ,ð ,Ø"&¤(ð,ñ ,ô ,ñ -ô -ˆŒõ �”‰MŒMˆÝ�”‰MŒMˆÝ�”‰KŒKˆÝ�”‰KŒKˆÝ�”‰KŒKˆÝ�”	‰NŒNˆÝ˜&Ð"@Ð"@Ð"@ÑAÔAˆØ�T˜!˜Q  1 a¨Ñ+Ô+ˆŒ
àˆŒØˆŒ	ØˆŒ	ØˆŒØˆŒ	ØˆŒ	ØˆŒ	ØˆŒ	ØˆŒ	ØˆŒà ˆÔÐÐr   c                 óŒ   — |                       ¦   «          |                      ¦   «          |                      ¦   «          d| _        d S )NT)Ú_form_permutation_matricesÚ_form_block_matricesÚ_form_coefficient_matricesrH   )rI   s    r   Ú_setupzLinearizer._setup‡   sH   € ð 	×'Ò'Ñ)Ô)Ð)Ø×!Ò!Ñ#Ô#Ð#Ø×'Ò'Ñ)Ô)Ð)ØˆÔÐÐr   c           	      óŒ  — | j         \  }}}}}}|dk    r‹t          | j        t          | j        | j        g¦  «        ¦  «        | _        |dk    r3| j        dd…d| …f         | _        | j        dd…| d…f         | _        n| j        | _        t          ¦   «         | _        |dk    r‹t          | j	        t          | j
        | j        g¦  «        ¦  «        | _        |dk    r3| j        dd…d| …f         | _        | j        dd…| d…f         | _        n| j        | _        t          ¦   «         | _        t          | j        t          ||z   ||z
  ¦  «        g¦  «        }t          t          |||z
  ¦  «        | j        t          |||z
  ¦  «        g¦  «        }|r'|r|                     |¦  «        | _        dS || _        dS || _        dS )z(Form the permutation matrices Pq and Pu.r   N)r=   Úpermutation_matrixr-   r   r/   r0   r>   r?   r@   r.   r1   r2   rA   rB   rC   r   Úrow_joinrG   )	rI   r   r   r    r!   r"   r#   ÚP_col1ÚP_col2s	            r   rM   z%Linearizer._form_permutation_matrices�   s±  € ð  œ:Ñˆˆ1ˆa��A�qà�Š6ˆ6Ý)¨$¬&µ&¸$¼(ÀDÄHÐ9MÑ2NÔ2NÑOÔOˆDŒHØ�1ŠuˆuØ œH Q Q Q¨¨!¨¨ VÔ,�”	Ø œH Q Q Q¨¨¨¨ VÔ,�”	�	à œH�”	Ý"™HœH�”	Ø�Š6ˆ6Ý)¨$¬&µ&¸$¼(ÀDÄHÐ9MÑ2NÔ2NÑOÔOˆDŒHØ�1ŠuˆuØ œH Q Q Q¨¨!¨¨ VÔ,�”	Ø œH Q Q Q¨¨¨¨ VÔ,�”	�	à œH�”	Ý"™HœH�”	å˜œ¥E¨!¨a©%°°Q±Ñ$7Ô$7Ð8Ñ9Ô9ˆÝ�˜q ! a¡%™œ¨$¬)µU¸1¸aÀ!¹e±_´_ÐEÑFÔFˆØð 	#Øð 'Ø &§¢°Ñ 7Ô 7�”��à &�”��à"ˆDŒMˆMˆMr   c                 ó  — | j         \  }}}}}}|dk    rc| j                             | j        ¦  «        }t	          |¦  «        | j        |                      || j        z  |¦  «        z  z
  | j        z  | _        nt	          |¦  «        | _        |dk    rÅ| j	                             | j
        ¦  «        }|| j        z  }	|dk    rD| j	                             | j        ¦  «        }
| j         |                      |	|
¦  «        z  | _        nt          ||¦  «        | _        t	          |¦  «        | j        |                      |	|¦  «        z  z
  | j        z  | _        dS t          ||¦  «        | _        t	          |¦  «        | _        dS )z0Form the coefficient matrices C_0, C_1, and C_2.r   N)r=   r*   Újacobianr-   r   r@   r$   r?   rD   r+   r.   rC   rE   r   rB   rF   )rI   r   r   r    r!   r"   r#   Ú	f_c_jac_qÚ	f_v_jac_uÚtempÚ	f_v_jac_qs              r   rO   z%Linearizer._form_coefficient_matrices°   sn  € ð  œ:Ñˆˆ1ˆa��A�qð ˆqŠ5ˆ5Øœ×)Ò)¨$¬&Ñ1Ô1ˆIÝ˜Q™œ $¤)Ø×+Ò+¨I°d´iÑ,?Ø,5ñ7ô 7ñ#7ñ 7à8<¼	ñBˆDŒIˆIõ ˜A™œˆDŒIð ˆqŠ5ˆ5Øœ×)Ò)¨$¬&Ñ1Ô1ˆIØ˜tœyÑ(ˆDØ�AŠvˆvØ œH×-Ò-¨d¬fÑ5Ô5�	Ø!œY˜J¨×);Ò);¸DÀ)Ñ)LÔ)LÑL�”	�	å! ! Q™KœK�”	Ý˜Q™œ $¤)Ø×+Ò+¨D°)Ñ<Ô<ñ#=ñ =Ø>B¼iñHˆDŒIˆIˆIõ ˜a ™œˆDŒIÝ˜A™œˆDŒIˆIˆIr   c                 óü  — | j         \  }}}}}}|dk    rR| j                             | j        ¦  «        | _        | j        | j        z                        | j        ¦  «         | _        n&t          ¦   «         | _        t          ¦   «         | _        |dk    rP|dk    rJ| j	                             | j
        ¦  «        | _        | j	                             | j        ¦  «         | _        n&t          ¦   «         | _        t          ¦   «         | _        |dk    rf||z
  |z   dk    rZ| j                             | j
        ¦  «        | _        | j        | j        z   | j        z                        | j        ¦  «         | _        n&t          ¦   «         | _        t          ¦   «         | _        |dk    rP|dk    rJ| j	                             | j        ¦  «        | _        | j	                             | j        ¦  «         | _        n&t          ¦   «         | _        t          ¦   «         | _        |dk    r^||z
  |z   dk    rR| j                             | j        ¦  «        | _        | j        | j        z                        | j        ¦  «         | _        n&t          ¦   «         | _        t          ¦   «         | _        |dk    r,|dk    r&| j                             | j        ¦  «         | _        nt          ¦   «         | _        |dk    r1||z
  |z   dk    r%| j                             | j        ¦  «        | _        nt          ¦   «         | _        |dk    r3||z
  |z   dk    r'| j                             | j        ¦  «         | _        dS t          ¦   «         | _        dS )z2Form the block matrices for composing M, A, and B.r   N)r=   r%   rW   r7   Ú_M_qqr&   r-   Ú_A_qqr   r,   r;   Ú_M_uqcÚ_A_uqcr(   Ú_M_uqdr'   r)   Ú_A_uqdr8   Ú_M_uucr.   Ú_A_uucÚ_M_uudÚ_A_uudÚ_A_qur4   Ú_M_uldr3   Ú_B_u)rI   r   r   r    r!   r"   r#   s          r   rN   zLinearizer._form_block_matricesÐ   sÕ  € ð  œ:Ñˆˆ1ˆa��A�qð �Š6ˆ6Øœ×*Ò*¨4¬8Ñ4Ô4ˆDŒJØœ8 d¤hÑ.×8Ò8¸¼Ñ@Ô@Ð@ˆDŒJˆJå™œˆDŒJÝ™œˆDŒJØ�Š6ˆ6�a˜1’f�fØœ(×+Ò+¨D¬LÑ9Ô9ˆDŒKØœ8×,Ò,¨T¬VÑ4Ô4Ð4ˆDŒKˆKå ™(œ(ˆDŒKÝ ™(œ(ˆDŒKØ�Š6ˆ6�a˜!‘e˜a‘i 1’n�nØœ(×+Ò+¨D¬LÑ9Ô9ˆDŒKØ œH t¤xÑ/°$´(Ñ:×DÒDÀTÄVÑLÔLÐLˆDŒKˆKå ™(œ(ˆDŒKÝ ™(œ(ˆDŒKØ�Š6ˆ6�a˜1’f�fØœ(×+Ò+¨D¬HÑ5Ô5ˆDŒKØœ8×,Ò,¨T¬VÑ4Ô4Ð4ˆDŒKˆKå ™(œ(ˆDŒKÝ ™(œ(ˆDŒKØ�Š6ˆ6�a˜!‘e˜a‘i 1’n�nØœ(×+Ò+¨D¬HÑ5Ô5ˆDŒKØ œH t¤xÑ/×9Ò9¸$¼&ÑAÔAÐAˆDŒKˆKå ™(œ(ˆDŒKÝ ™(œ(ˆDŒKØ�Š6ˆ6�a˜1’f�fØœ(×+Ò+¨D¬FÑ3Ô3Ð3ˆDŒJˆJå™œˆDŒJØ�Š6ˆ6�a˜!‘e˜a‘i 1’n�nØœ(×+Ò+¨D¬IÑ6Ô6ˆDŒKˆKå ™(œ(ˆDŒKØ�Š6ˆ6�a˜!‘e˜a‘i 1’n�nØœ×*Ò*¨4¬6Ñ2Ô2Ð2ˆDŒIˆIˆIå™œˆDŒIˆIˆIr   Fc                 óF  — | j         s|                      ¦   «          t          |t          ¦  «        r|}n4t          |t          ¦  «        ri }|D ]}|                     |¦  «         Œni }| j        \  }}}}	}
}| j        }| j        }| j	        }| j
        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }| j        }|	dk    r t/          t1          ||	¦  «        ||g¦  «        }|dk    r"t/          t1          ||z   |¦  «        |g¦  «        }|dk    rft/          |||g¦  «        }|	dk    r/|dk    r)|                     |¦  «                             |¦  «        }n=|	dk    r|                     |¦  «        }n!|}n|dk    r|                     |¦  «        }n|}t5          ||¦  «        } |dk    r‚|}!|	dk    r|!||z  z  }!|!|z  }!|dk    r|}"|	dk    r|"||z  z  }"|"|z  }"nt/          ¦   «         }"|	|z
  |z   dk    r|}#|	dk    r|#||z  z  }#|#|z  }#nt/          ¦   «         }#t/          |!|"|#g¦  «        }nt/          ¦   «         }|	dk    rg|dk    r||z  }$nt/          ¦   «         }$|dk    r||z  }%nt/          ¦   «         }%|	|z
  |z   dk    r||z  }&nt/          ¦   «         }&t/          |$|%|&g¦  «        }nt/          ¦   «         }|r|r|                     |¦  «        }'n|}'n|}'t5          |'|¦  «        }(|
dk    rC|	|z
  |z   dk    r7t1          ||z   |
¦  «                             |¦  «        })t5          |)|¦  «        }*nt/          ¦   «         }*|ry| j        j        |                      | |(¦  «        z  }+|*r$| j        j        |                      | |*¦  «        z  },n|*},|r(|+                     ¦   «          |,                     ¦   «          |+|,fS |r<|                      ¦   «          |(                     ¦   «          |*                     ¦   «          | |(|*fS )a!  Linearize the system about the operating point. Note that
        q_op, u_op, qd_op, ud_op must satisfy the equations of motion.
        These may be either symbolic or numeric.

        Parameters
        ==========
        op_point : dict or iterable of dicts, optional
            Dictionary or iterable of dictionaries containing the operating
            point conditions for all or a subset of the generalized
            coordinates, generalized speeds, and time derivatives of the
            generalized speeds. These will be substituted into the linearized
            system before the linearization is complete. Leave set to ``None``
            if you want the operating point to be an arbitrary set of symbols.
            Note that any reduction in symbols (whether substituted for numbers
            or expressions with a common parameter) will result in faster
            runtime.
        A_and_B : bool, optional
            If A_and_B=False (default), (M, A, B) is returned and of
            A_and_B=True, (A, B) is returned. See below.
        simplify : bool, optional
            Determines if returned values are simplified before return.
            For large expressions this may be time consuming. Default is False.

        Returns
        =======
        M, A, B : Matrices, ``A_and_B=False``
            Matrices from the implicit form:
                ``[M]*[q', u']^T = [A]*[q_ind, u_ind]^T + [B]*r``
        A, B : Matrices, ``A_and_B=True``
            Matrices from the explicit form:
                ``[q_ind', u_ind']^T = [A]*[q_ind, u_ind]^T + [B]*r``

        Notes
        =====

        Note that the process of solving with A_and_B=True is computationally
        intensive if there are many symbolic parameters. For this reason, it
        may be more desirable to use the default A_and_B=False, returning M, A,
        and B. More values may then be substituted in to these matrices later
        on. The state space form can then be found as A = P.T*M.LUsolve(A), B =
        P.T*M.LUsolve(B), where P = Linearizer.perm_mat.

        r   ) rH   rP   Ú
isinstanceÚdictr   Úupdater=   r]   r_   ra   rc   re   rh   r^   r`   rb   rg   rd   rf   ri   rD   rE   rF   r   r   rS   r   Úcol_joinrG   ÚTr$   Úsimplify)-rI   Úop_pointÚA_and_Brp   Úop_point_dictÚopr   r   r    r!   r"   r#   ÚM_qqÚM_uqcÚM_uqdÚM_uucÚM_uudÚM_uldÚA_qqÚA_uqcÚA_uqdÚA_quÚA_uucÚA_uudÚB_uÚC_0ÚC_1ÚC_2Úcol2Úcol3Úcol1ÚMÚM_eqÚr1c1Úr2c1Úr3c1Úr1c2Úr2c2Úr3c2ÚAmatÚAmat_eqÚBmatÚBmat_eqÚA_contÚB_conts-                                                r   Ú	linearizezLinearizer.linearize  s¬  € ð\ Ôð 	Ø�KŠK‰MŒMˆMõ �h¥Ñ%Ô%ð 	Ø$ˆMˆMÝ˜¥(Ñ+Ô+ð 	ØˆMØð )ð )�Ø×$Ò$ RÑ(Ô(Ð(Ð(ð)ð ˆMð  œ:Ñˆˆ1ˆa��A�qð ŒzˆØ”ˆØ”ˆØ”ˆØ”ˆØ”ˆØŒzˆØ”ˆØ”ˆØŒzˆØ”ˆØ”ˆØŒiˆØŒiˆØŒiˆØŒiˆð �Š6ˆ6Ý�5  A™;œ;¨¨uÐ5Ñ6Ô6ˆDØ�Š6ˆ6Ý�5  Q¡¨™?œ?¨EÐ2Ñ3Ô3ˆDØ�Š6ˆ6Ý˜4 ¨Ð.Ñ/Ô/ˆDØ�AŠvˆv˜!˜qš&˜&Ø—M’M $Ñ'Ô'×0Ò0°Ñ6Ô6��Ø�a’�Ø—M’M $Ñ'Ô'��à��Ø�!ŠVˆVØ—’˜dÑ#Ô#ˆAˆAàˆAÝ�Q˜Ñ&Ô&ˆð �Š6ˆ6ØˆDØ�AŠvˆvØ˜ ™Ñ$�Ø˜#‘:ˆDØ�AŠvˆvØ�Ø˜’6�6Ø˜U S™[Ñ)�DØ˜c‘z��å‘x”x�Ø�1‰u�q‰y˜AŠ~ˆ~Ø�Ø˜’6�6Ø˜U S™[Ñ)�DØ˜c‘z��å‘x”x�Ý˜4  tÐ,Ñ-Ô-ˆDˆDå‘8”8ˆDà�Š6ˆ6Ø�AŠvˆvØ˜c‘z��å‘x”x�Ø�AŠvˆvØ˜s‘{��å‘x”x�Ø�1‰u�q‰y˜AŠ~ˆ~Ø˜s‘{��å‘x”x�Ý˜4  tÐ,Ñ-Ô-ˆDˆDå‘8”8ˆDØð 	Øð Ø—}’} TÑ*Ô*��à��àˆDÝ˜˜mÑ,Ô,ˆð
 �Š6ˆ6�a˜!‘e˜a‘i 1’n�nÝ˜˜Q™ ‘?”?×+Ò+¨CÑ0Ô0ˆDÝ˜D -Ñ0Ô0ˆGˆGå‘h”hˆGð ð 	*Ø”]”_ t×'9Ò'9¸$ÀÑ'HÔ'HÑHˆFØð !Øœœ¨4×+=Ò+=¸dÀGÑ+LÔ+LÑL��ð !�Øð "Ø—’Ñ!Ô!Ð!Ø—’Ñ!Ô!Ð!Ø˜6�>Ð!ð ð #Ø—’‘”�Ø× Ò Ñ"Ô"Ð"Ø× Ò Ñ"Ô"Ð"Ø˜ 'Ð)Ð)r   )NNNNNNr   )NFF)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rK   rP   rM   rO   rN   r–   r   r   r   r   r      s�   € € € € € ðð ð< JNØ<@Ø#ðY!ð Y!ð Y!ð Y!ðv ð  ð  ð#ð #ð #ðBð ð ð@0!ð 0!ð 0!ðdx*ð x*ð x*ð x*ð x*ð x*r   c                 óž  ‡ — t          ‰ t          t          f¦  «        st          ‰ ¦  «        Š t          |t          t          f¦  «        st          |¦  «        }t	          ‰ ¦  «        t	          |¦  «        k    rt          d¦  «        ‚ˆ fd„|D ¦   «         }t          t          ‰ ¦  «        ¦  «        }t          |¦  «        D ]\  }}d|||f<   Œ|S )ak  Compute the permutation matrix to change order of
    orig_vec into order of per_vec.

    Parameters
    ==========

    orig_vec : array_like
        Symbols in original ordering.
    per_vec : array_like
        Symbols in new ordering.

    Returns
    =======

    p_matrix : Matrix
        Permutation matrix such that orig_vec == (p_matrix * per_vec).
    zKorig_vec and per_vec must be the same length, and contain the same symbols.c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Úindex)r   ÚiÚorig_vecs     €r   r   z&permutation_matrix.<locals>.<listcomp>Ö  s%   ø€ Ð3Ð3Ð3 a�—’˜qÑ!Ô!Ð3Ð3Ð3r   é   )	rk   ÚlistÚtupler	   r9   Ú
ValueErrorr   r<   Ú	enumerate)rŸ   Úper_vecÚind_listÚp_matrixrž   Újs   `     r   rR   rR   ½  sÔ   ø€ õ$ �h¥¥u Ñ.Ô.ð %Ý˜8Ñ$Ô$ˆÝ�g¥¥e˜}Ñ-Ô-ð #Ý˜'Ñ"Ô"ˆÝ
ˆ8�}„}�˜G™œÒ$Ð$Ýð 9ñ :ô :ð 	:à3Ð3Ð3Ð3¨7Ð3Ñ3Ô3€HÝ•S˜‘]”]Ñ#Ô#€HÝ˜(Ñ#Ô#ð ð ‰ˆˆ1Øˆ��A�‰ˆØ€Or   N)Ú__all__Úsympyr   r   r   Úsympy.core.symbolr   Úsympy.utilities.iterablesr	   Úsympy.physics.vectorr
   Ú!sympy.physics.mechanics.functionsr   r   Úcollectionsr   Úcollections.abcr   r   rR   r   r   r   ú<module>r±      sæ   ðØˆ.€à $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #Ø -Ð -Ð -Ð -Ð -Ð -Ø /Ð /Ð /Ð /Ð /Ð /Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià "Ð "Ð "Ð "Ð "Ð "Ø $Ð $Ð $Ð $Ð $Ð $ðm*ð m*ð m*ð m*ð m*ñ m*ô m*ð m*ð`ð ð ð ð r   