(self, name, indices=None, latexs=None, variables=None)
ReferenceFrame initialization method.

        A ReferenceFrame has a set of orthonormal basis vectors, along with
        orientations relative to other ReferenceFrames and angular velocities
        relative to other ReferenceFrames.

        Parameters
        ==========

        indices : list (of strings)
            If custom indices are desired for console, pretty, and LaTeX
            printing, supply three as a list. The basis vectors can then be
            accessed with the get_item method.
        latexs : list (of strings)
            If custom names are desired for LaTeX printing of each basis
            vector, supply the names here in a list.

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, vlatex
        >>> N = ReferenceFrame('N')
        >>> N.x
        N.x
        >>> O = ReferenceFrame('O', indices=('1', '2', '3'))
        >>> O.x
        O['1']
        >>> O['1']
        O['1']
        >>> P = ReferenceFrame('P', latexs=('A1', 'A2', 'A3'))
        >>> vlatex(P.x)
        'A1'
ReferenceFrame initialization method.
ReferenceFrame initialization method .
def __init__(self, name, indices=None, latexs=None, variables=None):
        """ReferenceFrame initialization method.

        A ReferenceFrame has a set of orthonormal basis vectors, along with
        orientations relative to other ReferenceFrames and angular velocities
        relative to other ReferenceFrames.

        Parameters
        ==========

        indices : list (of strings)
            If custom indices are desired for console, pretty, and LaTeX
            printing, supply three as a list. The basis vectors can then be
            accessed with the get_item method.
        latexs : list (of strings)
            If custom names are desired for LaTeX printing of each basis
            vector, supply the names here in a list.

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, vlatex
        >>> N = ReferenceFrame('N')
        >>> N.x
        N.x
        >>> O = ReferenceFrame('O', indices=('1', '2', '3'))
        >>> O.x
        O['1']
        >>> O['1']
        O['1']
        >>> P = ReferenceFrame('P', latexs=('A1', 'A2', 'A3'))
        >>> vlatex(P.x)
        'A1'

        """

        if not isinstance(name, string_types):
            raise TypeError('Need to supply a valid name')
        # The if statements below are for custom printing of basis-vectors for
        # each frame.
        # First case, when custom indices are supplied
        if indices is not None:
            if not isinstance(indices, (tuple, list)):
                raise TypeError('Supply the indices as a list')
            if len(indices) != 3:
                raise ValueError('Supply 3 indices')
            for i in indices:
                if not isinstance(i, string_types):
                    raise TypeError('Indices must be strings')
            self.str_vecs = [(name + '[\'' + indices[0] + '\']'),
                             (name + '[\'' + indices[1] + '\']'),
                             (name + '[\'' + indices[2] + '\']')]
            self.pretty_vecs = [(name.lower() + u("_") + indices[0]),
                                (name.lower() + u("_") + indices[1]),
                                (name.lower() + u("_") + indices[2])]
            self.latex_vecs = [(r"\mathbf{\hat{%s}_{%s}}" % (name.lower(),
                               indices[0])), (r"\mathbf{\hat{%s}_{%s}}" %
                               (name.lower(), indices[1])),
                               (r"\mathbf{\hat{%s}_{%s}}" % (name.lower(),
                               indices[2]))]
            self.indices = indices
        # Second case, when no custom indices are supplied
        else:
            self.str_vecs = [(name + '.x'), (name + '.y'), (name + '.z')]
            self.pretty_vecs = [name.lower() + u("_x"),
                                name.lower() + u("_y"),
                                name.lower() + u("_z")]
            self.latex_vecs = [(r"\mathbf{\hat{%s}_x}" % name.lower()),
                               (r"\mathbf{\hat{%s}_y}" % name.lower()),
                               (r"\mathbf{\hat{%s}_z}" % name.lower())]
            self.indices = ['x', 'y', 'z']
        # Different step, for custom latex basis vectors
        if latexs is not None:
            if not isinstance(latexs, (tuple, list)):
                raise TypeError('Supply the indices as a list')
            if len(latexs) != 3:
                raise ValueError('Supply 3 indices')
            for i in latexs:
                if not isinstance(i, string_types):
                    raise TypeError('Latex entries must be strings')
            self.latex_vecs = latexs
        self.name = name
        self._var_dict = {}
        #The _dcm_dict dictionary will only store the dcms of parent-child
        #relationships. The _dcm_cache dictionary will work as the dcm
        #cache.
        self._dcm_dict = {}
        self._dcm_cache = {}
        self._ang_vel_dict = {}
        self._ang_acc_dict = {}
        self._dlist = [self._dcm_dict, self._ang_vel_dict, self._ang_acc_dict]
        self._cur = 0
        self._x = Vector([(Matrix([1, 0, 0]), self)])
        self._y = Vector([(Matrix([0, 1, 0]), self)])
        self._z = Vector([(Matrix([0, 0, 1]), self)])
        #Associate coordinate symbols wrt this frame
        if variables is not None:
            if not isinstance(variables, (tuple, list)):
                raise TypeError('Supply the variable names as a list/tuple')
            if len(variables) != 3:
                raise ValueError('Supply 3 variable names')
            for i in variables:
                if not isinstance(i, string_types):
                    raise TypeError('Variable names must be strings')
        else:
            variables = [name + '_x', name + '_y', name + '_z']
        self.varlist = (CoordinateSym(variables[0], self, 0), \
                        CoordinateSym(variables[1], self, 1), \
                        CoordinateSym(variables[2], self, 2))
def __init__ ( self , name , indices = None , latexs = None , variables = None ) : if not isinstance ( name , string_types ) : raise TypeError ( 'Need to supply a valid name' ) # The if statements below are for custom printing of basis-vectors for # each frame. # First case, when custom indices are supplied if indices is not None : if not isinstance ( indices , ( tuple , list ) ) : raise TypeError ( 'Supply the indices as a list' ) if len ( indices ) != 3 : raise ValueError ( 'Supply 3 indices' ) for i in indices : if not isinstance ( i , string_types ) : raise TypeError ( 'Indices must be strings' ) self . str_vecs = [ ( name + '[\'' + indices [ 0 ] + '\']' ) , ( name + '[\'' + indices [ 1 ] + '\']' ) , ( name + '[\'' + indices [ 2 ] + '\']' ) ] self . pretty_vecs = [ ( name . lower ( ) + u ( "_" ) + indices [ 0 ] ) , ( name . lower ( ) + u ( "_" ) + indices [ 1 ] ) , ( name . lower ( ) + u ( "_" ) + indices [ 2 ] ) ] self . latex_vecs = [ ( r"\mathbf{\hat{%s}_{%s}}" % ( name . lower ( ) , indices [ 0 ] ) ) , ( r"\mathbf{\hat{%s}_{%s}}" % ( name . lower ( ) , indices [ 1 ] ) ) , ( r"\mathbf{\hat{%s}_{%s}}" % ( name . lower ( ) , indices [ 2 ] ) ) ] self . indices = indices # Second case, when no custom indices are supplied else : self . str_vecs = [ ( name + '.x' ) , ( name + '.y' ) , ( name + '.z' ) ] self . pretty_vecs = [ name . lower ( ) + u ( "_x" ) , name . lower ( ) + u ( "_y" ) , name . lower ( ) + u ( "_z" ) ] self . latex_vecs = [ ( r"\mathbf{\hat{%s}_x}" % name . lower ( ) ) , ( r"\mathbf{\hat{%s}_y}" % name . lower ( ) ) , ( r"\mathbf{\hat{%s}_z}" % name . lower ( ) ) ] self . indices = [ 'x' , 'y' , 'z' ] # Different step, for custom latex basis vectors if latexs is not None : if not isinstance ( latexs , ( tuple , list ) ) : raise TypeError ( 'Supply the indices as a list' ) if len ( latexs ) != 3 : raise ValueError ( 'Supply 3 indices' ) for i in latexs : if not isinstance ( i , string_types ) : raise TypeError ( 'Latex entries must be strings' ) self . latex_vecs = latexs self . name = name self . _var_dict = { } #The _dcm_dict dictionary will only store the dcms of parent-child #relationships. The _dcm_cache dictionary will work as the dcm #cache. self . _dcm_dict = { } self . _dcm_cache = { } self . _ang_vel_dict = { } self . _ang_acc_dict = { } self . _dlist = [ self . _dcm_dict , self . _ang_vel_dict , self . _ang_acc_dict ] self . _cur = 0 self . _x = Vector ( [ ( Matrix ( [ 1 , 0 , 0 ] ) , self ) ] ) self . _y = Vector ( [ ( Matrix ( [ 0 , 1 , 0 ] ) , self ) ] ) self . _z = Vector ( [ ( Matrix ( [ 0 , 0 , 1 ] ) , self ) ] ) #Associate coordinate symbols wrt this frame if variables is not None : if not isinstance ( variables , ( tuple , list ) ) : raise TypeError ( 'Supply the variable names as a list/tuple' ) if len ( variables ) != 3 : raise ValueError ( 'Supply 3 variable names' ) for i in variables : if not isinstance ( i , string_types ) : raise TypeError ( 'Variable names must be strings' ) else : variables = [ name + '_x' , name + '_y' , name + '_z' ] self . varlist = ( CoordinateSym ( variables [ 0 ] , self , 0 ) , CoordinateSym ( variables [ 1 ] , self , 1 ) , CoordinateSym ( variables [ 2 ] , self , 2 ) )