class_docstr: Class to denote a space-orienter.
docstr: Space rotation is similar to Body rotation, but the rotations
  are applied in the opposite order.
  
  Parameters
  ==========
  
  angle1, angle2, angle3 : Expr
      Three successive angles to rotate the coordinate system by
  
  rotation_order : string
      String defining the order of axes for rotation
  
  See Also
  ========
  
  BodyOrienter : Orienter to orient systems wrt Euler angles.
  
  Examples
  ========
  
  >>> from sympy.vector import CoordSys3D, SpaceOrienter
  >>> from sympy import symbols
  >>> q1, q2, q3 = symbols('q1 q2 q3')
  >>> N = CoordSys3D('N')
  
  To orient a coordinate system D with respect to N, each
  sequential rotation is always about N's orthogonal unit vectors.
  For example, a '123' rotation will specify rotations about
  N.i, then N.j, then N.k.
  Therefore,
  
  >>> space_orienter = SpaceOrienter(q1, q2, q3, '312')
  >>> D = N.orient_new('D', (space_orienter, ))
  
  is same as
  
  >>> from sympy.vector import AxisOrienter
  >>> axis_orienter1 = AxisOrienter(q1, N.i)
  >>> B = N.orient_new('B', (axis_orienter1, ))
  >>> axis_orienter2 = AxisOrienter(q2, N.j)
  >>> C = B.orient_new('C', (axis_orienter2, ))
  >>> axis_orienter3 = AxisOrienter(q3, N.k)
  >>> D = C.orient_new('C', (axis_orienter3, ))
docstr_tok: ["Space","rotation","is","similar","to","Body","rotation",",","but","the","rotations","are","applied","in","the","opposite","order",".","Parameters","==========","angle1",",","angle2",",","angle3",":","Expr","Three","successive","angles","to","rotate","the","coordinate","system","by","rotation_order",":","string","String","defining","the","order","of","axes","for","rotation","See","Also","========","BodyOrienter",":","Orienter","to","orient","systems","wrt","Euler","angles",".","Examples","========",">",">",">","from","sympy.vector","import","CoordSys3D",",","SpaceOrienter",">",">",">","from","sympy","import","symbols",">",">",">","q1",",","q2",",","q3","=","symbols","(","'q1","q2","q3","'",")",">",">",">","N","=","CoordSys3D","(","'N","'",")","To","orient","a","coordinate","system","D","with","respect","to","N",",","each","sequential","rotation","is","always","about","N","'s","orthogonal","unit","vectors",".","For","example",",","a","'123","'","rotation","will","specify","rotations","about","N.i",",","then","N.j",",","then","N.k",".","Therefore",",",">",">",">","space_orienter","=","SpaceOrienter","(","q1",",","q2",",","q3",",","'312","'",")",">",">",">","D","=","N.orient_new","(","'D","'",",","(","space_orienter",",",")",")","is","same","as",">",">",">","from","sympy.vector","import","AxisOrienter",">",">",">","axis_orienter1","=","AxisOrienter","(","q1",",","N.i",")",">",">",">","B","=","N.orient_new","(","'","B","'",",","(","axis_orienter1",",",")",")",">",">",">","axis_orienter2","=","AxisOrienter","(","q2",",","N.j",")",">",">",">","C","=","B.orient_new","(","'","C","'",",","(","axis_orienter2",",",")",")",">",">",">","axis_orienter3","=","AxisOrienter","(","q3",",","N.k",")",">",">",">","D","=","C.orient_new","(","'","C","'",",","(","axis_orienter3",",",")",")"]
code: def __init__(self, angle1, angle2, angle3, rot_order):
      """
      Space rotation is similar to Body rotation, but the rotations
      are applied in the opposite order.
  
      Parameters
      ==========
  
      angle1, angle2, angle3 : Expr
          Three successive angles to rotate the coordinate system by
  
      rotation_order : string
          String defining the order of axes for rotation
  
      See Also
      ========
  
      BodyOrienter : Orienter to orient systems wrt Euler angles.
  
      Examples
      ========
  
      >>> from sympy.vector import CoordSys3D, SpaceOrienter
      >>> from sympy import symbols
      >>> q1, q2, q3 = symbols('q1 q2 q3')
      >>> N = CoordSys3D('N')
  
      To orient a coordinate system D with respect to N, each
      sequential rotation is always about N's orthogonal unit vectors.
      For example, a '123' rotation will specify rotations about
      N.i, then N.j, then N.k.
      Therefore,
  
      >>> space_orienter = SpaceOrienter(q1, q2, q3, '312')
      >>> D = N.orient_new('D', (space_orienter, ))
  
      is same as
  
      >>> from sympy.vector import AxisOrienter
      >>> axis_orienter1 = AxisOrienter(q1, N.i)
      >>> B = N.orient_new('B', (axis_orienter1, ))
      >>> axis_orienter2 = AxisOrienter(q2, N.j)
      >>> C = B.orient_new('C', (axis_orienter2, ))
      >>> axis_orienter3 = AxisOrienter(q3, N.k)
      >>> D = C.orient_new('C', (axis_orienter3, ))
  
      """
      # Dummy initializer for docstrings
      pass
  
imports: from sympy.core.basic import Basic
  from sympy.core.sympify import sympify
  from sympy.functions.elementary.trigonometric import cos, sin
  from sympy.matrices.dense import eye, rot_axis1, rot_axis2, rot_axis3
  from sympy.matrices.immutable import ImmutableDenseMatrix
  from sympy.core.cache import cacheit
  from sympy.core.symbol import Str
  import sympy.vector
label_desc: Use image node_id 2 to create a new SpaceOrienter object from inherited base classes: ThreeAngleOrienter with example: obj = SpaceOrienter(angle1, angle2, angle3, rot_order)