(basis, metric=None, coords=None, rframe=False, debug=False, curv=(None, None))
MV.setup() creates all the arrays and dictionaries required to construct, multiply, add,
        and differentiate multivectors in linear and curvilinear coordinate systems.  The inputs
        to MV.setup() are as follows -

            basis:  A string that defines the noncommutative symbols that represent the basis
                    vectors of the underlying vector space of the multivector space.  If the
                    string consists of substrings separated by spaces or commas each substring
                    will be the name of the basis vector symbol for example basis='e_x e_y e_z'
                    or basis='i j k'.  Another way to enter the basis symbols is to specify a
                    base string with a list of subscript strings.  This is done with the following
                    notation so that 'e*x|y|z' is equivalent to 'e_x e_y e_z'.

            metric:

            rframe:

            coords:

            debug:

            curv:
MV.setup() creates all the arrays and dictionaries required to construct, multiply, add,
        and differentiate multivectors in linear and curvilinear coordinate systems.  The inputs
        to MV.setup() are as follows -
MV . setup () creates all the arrays and dictionaries required to construct multiply add and differentiate multivectors in linear and curvilinear coordinate systems . The inputs to MV . setup () are as follows -
def setup(basis, metric=None, coords=None, rframe=False, debug=False, curv=(None, None)):
        """
        MV.setup() creates all the arrays and dictionaries required to construct, multiply, add,
        and differentiate multivectors in linear and curvilinear coordinate systems.  The inputs
        to MV.setup() are as follows -

            basis:  A string that defines the noncommutative symbols that represent the basis
                    vectors of the underlying vector space of the multivector space.  If the
                    string consists of substrings separated by spaces or commas each substring
                    will be the name of the basis vector symbol for example basis='e_x e_y e_z'
                    or basis='i j k'.  Another way to enter the basis symbols is to specify a
                    base string with a list of subscript strings.  This is done with the following
                    notation so that 'e*x|y|z' is equivalent to 'e_x e_y e_z'.

            metric:

            rframe:

            coords:

            debug:

            curv:

        """
        MV.print_blades = False
        MV.connection = False

        MV.ONE = ONE_NC

        MV.basis_vectors = Vector.setup(basis, metric=metric, coords=coords, curv=curv, debug=debug)
        MV.curv_norm = curv[1]
        MV.metric = Vector.metric
        MV.subscripts = Vector.subscripts
        MV.coords = Vector.coords
        MV.metric2 = 2 * Vector.metric
        MV.is_orthogonal = Vector.is_orthogonal

        MV.basis_names = []
        for base in MV.basis_vectors:
            MV.basis_names.append(str(base))

        if debug:
            oprint('Basis Names', MV.basis_names)

        MV.dim = len(MV.basis_vectors)
        MV.dim1 = MV.dim + 1

        MV.build_base_blade_arrays(debug)

        if not MV.is_orthogonal:
            MV.build_base_mul_table(debug)
            MV.build_base_blade_expansion_tables(debug)

        MV.blades_MV = []
        for b in MV.blades[1]:
            mv = MV()
            mv.obj = b
            mv.blade_rep = True
            mv.igrade = 1
            MV.blades_MV.append(mv)
        MV.build_reciprocal_basis(debug)

        MV.blades_MV = tuple(MV.blades_MV)

        if curv != (None, None):
            MV.build_curvilinear_connection(debug)

        MV.print_blades = True

        MV.I = MV(MV.blades_flat[-1])
        MV.Isq = simplify((MV.I * MV.I).scalar())
        MV.Iinv = MV.I / MV.Isq

        if coords is not None:
            return MV.blades_MV + (MV.grad, )
        else:
            return MV.blades_MV
def setup ( basis , metric = None , coords = None , rframe = False , debug = False , curv = ( None , None ) ) : MV . print_blades = False MV . connection = False MV . ONE = ONE_NC MV . basis_vectors = Vector . setup ( basis , metric = metric , coords = coords , curv = curv , debug = debug ) MV . curv_norm = curv [ 1 ] MV . metric = Vector . metric MV . subscripts = Vector . subscripts MV . coords = Vector . coords MV . metric2 = 2 * Vector . metric MV . is_orthogonal = Vector . is_orthogonal MV . basis_names = [ ] for base in MV . basis_vectors : MV . basis_names . append ( str ( base ) ) if debug : oprint ( 'Basis Names' , MV . basis_names ) MV . dim = len ( MV . basis_vectors ) MV . dim1 = MV . dim + 1 MV . build_base_blade_arrays ( debug ) if not MV . is_orthogonal : MV . build_base_mul_table ( debug ) MV . build_base_blade_expansion_tables ( debug ) MV . blades_MV = [ ] for b in MV . blades [ 1 ] : mv = MV ( ) mv . obj = b mv . blade_rep = True mv . igrade = 1 MV . blades_MV . append ( mv ) MV . build_reciprocal_basis ( debug ) MV . blades_MV = tuple ( MV . blades_MV ) if curv != ( None , None ) : MV . build_curvilinear_connection ( debug ) MV . print_blades = True MV . I = MV ( MV . blades_flat [ - 1 ] ) MV . Isq = simplify ( ( MV . I * MV . I ) . scalar ( ) ) MV . Iinv = MV . I / MV . Isq if coords is not None : return MV . blades_MV + ( MV . grad , ) else : return MV . blades_MV