class_docstr: A reference frame in classical mechanics.
  
  ReferenceFrame is a class used to represent a reference frame in classical
  mechanics. It has a standard basis of three unit vectors in the frame's
  x, y, and z directions.
  
  It also can have a rotation relative to a parent frame; this rotation is
  defined by a direction cosine matrix relating this frame's basis vectors to
  the parent frame's basis vectors.  It can also have an angular velocity
  vector, defined in another frame.
docstr: Sets the orientation of this reference frame relative to another (parent) reference frame
  using a direction cosine matrix that describes the rotation from the parent to the child.
  
  Parameters
  ==========
  
  parent : ReferenceFrame
      Reference frame that this reference frame will be rotated relative
      to.
  dcm : Matrix, shape(3, 3)
      Direction cosine matrix that specifies the relative rotation
      between the two reference frames.
  
  Warns
  ======
  
  UserWarning
      If the orientation creates a kinematic loop.
  
  Examples
  ========
  
  Setup variables for the examples:
  
  >>> from sympy import symbols, Matrix, sin, cos
  >>> from sympy.physics.vector import ReferenceFrame
  >>> q1 = symbols('q1')
  >>> A = ReferenceFrame('A')
  >>> B = ReferenceFrame('B')
  >>> N = ReferenceFrame('N')
  
  A simple rotation of ``A`` relative to ``N`` about ``N.x`` is defined
  by the following direction cosine matrix:
  
  >>> dcm = Matrix([[1, 0, 0],
  ...               [0, cos(q1), -sin(q1)],
  ...               [0, sin(q1), cos(q1)]])
  >>> A.orient_explicit(N, dcm)
  >>> A.dcm(N)
  Matrix([
  [1,       0,      0],
  [0,  cos(q1), sin(q1)],
  [0, -sin(q1), cos(q1)]])
  
  This is equivalent to using ``orient_axis()``:
  
  >>> B.orient_axis(N, N.x, q1)
  >>> B.dcm(N)
  Matrix([
  [1,       0,      0],
  [0,  cos(q1), sin(q1)],
  [0, -sin(q1), cos(q1)]])
  
  **Note carefully that** ``N.dcm(B)`` **(the transpose) would be passed
  into** ``orient_explicit()`` **for** ``A.dcm(N)`` **to match**
  ``B.dcm(N)``:
  
  >>> A.orient_explicit(N, N.dcm(B))
  >>> A.dcm(N)
  Matrix([
  [1,       0,      0],
  [0,  cos(q1), sin(q1)],
  [0, -sin(q1), cos(q1)]])
docstr_tok: ["Sets","the","orientation","of","this","reference","frame","relative","to","another","(","parent",")","reference","frame","using","a","direction","cosine","matrix","that","describes","the","rotation","from","the","parent","to","the","child",".","Parameters","==========","parent",":","ReferenceFrame","Reference","frame","that","this","reference","frame","will","be","rotated","relative","to",".","dcm",":","Matrix",",","shape","(","3",",","3",")","Direction","cosine","matrix","that","specifies","the","relative","rotation","between","the","two","reference","frames",".","Warns","======","UserWarning","If","the","orientation","creates","a","kinematic","loop",".","Examples","========","Setup","variables","for","the","examples",":",">",">",">","from","sympy","import","symbols",",","Matrix",",","sin",",","cos",">",">",">","from","sympy.physics.vector","import","ReferenceFrame",">",">",">","q1","=","symbols","(","'q1","'",")",">",">",">","A","=","ReferenceFrame","(","'","A","'",")",">",">",">","B","=","ReferenceFrame","(","'","B","'",")",">",">",">","N","=","ReferenceFrame","(","'N","'",")","A","simple","rotation","of","``","A","``","relative","to","``","N","``","about","``","N.x","``","is","defined","by","the","following","direction","cosine","matrix",":",">",">",">","dcm","=","Matrix","(","[","[","1",",","0",",","0","]",",","...","[","0",",","cos","(","q1",")",",","-sin","(","q1",")","]",",","...","[","0",",","sin","(","q1",")",",","cos","(","q1",")","]","]",")",">",">",">","A.orient_explicit","(","N",",","dcm",")",">",">",">","A.dcm","(","N",")","Matrix","(","[","[","1",",","0",",","0","]",",","[","0",",","cos","(","q1",")",",","sin","(","q1",")","]",",","[","0",",","-sin","(","q1",")",",","cos","(","q1",")","]","]",")","This","is","equivalent","to","using","``","orient_axis","(",")","``",":",">",">",">","B.orient_axis","(","N",",","N.x",",","q1",")",">",">",">","B.dcm","(","N",")","Matrix","(","[","[","1",",","0",",","0","]",",","[","0",",","cos","(","q1",")",",","sin","(","q1",")","]",",","[","0",",","-sin","(","q1",")",",","cos","(","q1",")","]","]",")","*","*","Note","carefully","that","*","*","``","N.dcm","(","B",")","``","*","*","(","the","transpose",")","would","be","passed","into","*","*","``","orient_explicit","(",")","``","*","*","for","*","*","``","A.dcm","(","N",")","``","*","*","to","match","*","*","``","B.dcm","(","N",")","``",":",">",">",">","A.orient_explicit","(","N",",","N.dcm","(","B",")",")",">",">",">","A.dcm","(","N",")","Matrix","(","[","[","1",",","0",",","0","]",",","[","0",",","cos","(","q1",")",",","sin","(","q1",")","]",",","[","0",",","-sin","(","q1",")",",","cos","(","q1",")","]","]",")"]
code: def orient_explicit(self, parent, dcm):
      """Sets the orientation of this reference frame relative to another (parent) reference frame
      using a direction cosine matrix that describes the rotation from the parent to the child.
  
      Parameters
      ==========
  
      parent : ReferenceFrame
          Reference frame that this reference frame will be rotated relative
          to.
      dcm : Matrix, shape(3, 3)
          Direction cosine matrix that specifies the relative rotation
          between the two reference frames.
  
      Warns
      ======
  
      UserWarning
          If the orientation creates a kinematic loop.
  
      Examples
      ========
  
      Setup variables for the examples:
  
      >>> from sympy import symbols, Matrix, sin, cos
      >>> from sympy.physics.vector import ReferenceFrame
      >>> q1 = symbols('q1')
      >>> A = ReferenceFrame('A')
      >>> B = ReferenceFrame('B')
      >>> N = ReferenceFrame('N')
  
      A simple rotation of ``A`` relative to ``N`` about ``N.x`` is defined
      by the following direction cosine matrix:
  
      >>> dcm = Matrix([[1, 0, 0],
      ...               [0, cos(q1), -sin(q1)],
      ...               [0, sin(q1), cos(q1)]])
      >>> A.orient_explicit(N, dcm)
      >>> A.dcm(N)
      Matrix([
      [1,       0,      0],
      [0,  cos(q1), sin(q1)],
      [0, -sin(q1), cos(q1)]])
  
      This is equivalent to using ``orient_axis()``:
  
      >>> B.orient_axis(N, N.x, q1)
      >>> B.dcm(N)
      Matrix([
      [1,       0,      0],
      [0,  cos(q1), sin(q1)],
      [0, -sin(q1), cos(q1)]])
  
      **Note carefully that** ``N.dcm(B)`` **(the transpose) would be passed
      into** ``orient_explicit()`` **for** ``A.dcm(N)`` **to match**
      ``B.dcm(N)``:
  
      >>> A.orient_explicit(N, N.dcm(B))
      >>> A.dcm(N)
      Matrix([
      [1,       0,      0],
      [0,  cos(q1), sin(q1)],
      [0, -sin(q1), cos(q1)]])
  
      """
      _check_frame(parent)
      # amounts must be a Matrix type object
      # (e.g. sympy.matrices.dense.MutableDenseMatrix).
      if not isinstance(dcm, MatrixBase):
          raise TypeError("Amounts must be a SymPy Matrix type object.")
  
      self.orient_dcm(parent, dcm.T)
  
imports: from sympy import diff, expand, sin, cos, sympify, eye, zeros, ImmutableMatrix, MatrixBase
  from sympy.core.symbol import Symbol
  from sympy.simplify.trigsimp import trigsimp
  from sympy.physics.vector.vector import Vector, _check_vector
  from sympy.utilities.misc import translate
  from warnings import warn
label_desc: Use image node_id 13 for calling the ReferenceFrame obj's underlying member method code with example usage: obj.orient_explicit(parent, dcm) without return types