``````

// Generated on 2007-08-08 10:15:48 by G2 0.1 from 'E:\gasandbox\ga_sandbox\libgasandbox\c2ga.gs2'

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

#include <string.h>
#include "c2ga.h"

// pre_cpp_include

namespace c2ga {

// The dimension of the space:
const int mv_spaceDim = 4;

// Is the metric of the space Euclidean?
const bool mv_metricEuclidean = false;

// This array can be used to lookup the number of coordinates for a grade part of a general multivector
1, 4, 6, 4, 1
};

// This array can be used to lookup the number of coordinates based on a grade usage bitmap
const int mv_size[32] = {
0, 1, 4, 5, 6, 7, 10, 11, 4, 5, 8, 9, 10, 11, 14, 15, 1, 2, 5, 6, 7, 8, 11, 12, 5, 6, 9, 10, 11, 12, 15, 16
};

// This array of ASCIIZ strings contains the names of the basis vectors
const char *mv_basisVectorNames[4] = {
"no", "e1", "e2", "ni"
};

// This array of integers contains the order of basis elements in the general multivector
const int mv_basisElements[16][5] = {
{-1}
, {0, -1}
, {1, -1}
, {2, -1}
, {3, -1}
, {0, 1, -1}
, {0, 2, -1}
, {1, 2, -1}
, {1, 3, -1}
, {2, 3, -1}
, {0, 3, -1}
, {1, 2, 3, -1}
, {0, 1, 3, -1}
, {0, 2, 3, -1}
, {0, 1, 2, -1}
, {0, 1, 2, 3, -1}
};

// This array of integers contains the 'sign' (even/odd permutation of the canonical order) of basis elements in the general multivector
// Use it to answer 'what is the permutation of the coordinate at index [x]'?
const double mv_basisElementSignByIndex[16] = {
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
};

// This array of integers contains the 'sign' (even/odd permutation of canonical order) of basis elements in the general multivector
// Use it to answer 'what is the permutation of the coordinate of bitmap [x]'?
const double mv_basisElementSignByBitmap[16] = {
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
};

// This array of integers contains the order of basis elements in the general multivector
// Use it to answer: 'at what index do I find basis element [x] (x = basis vector bitmap)?
const int mv_basisElementIndexByBitmap[16] = {
0, 1, 2, 5, 3, 6, 7, 14, 4, 10, 8, 12, 9, 13, 11, 15
};

// This array of integers contains the indices of basis elements in the general multivector
// Use it to answer: 'what basis element do I find at index [x]'?
const int mv_basisElementBitmapByIndex[16] = {
0, 1, 2, 4, 8, 3, 5, 6, 10, 12, 9, 14, 11, 13, 7, 15
};

// This array of grade of each basis elements in the general multivector
// Use it to answer: 'what is the grade of basis element bitmap [x]'?
extern const int mv_basisElementGradeByBitmap[16] = {
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
};

// These strings determine how the output of string() is formatted.
// You can alter them at runtime using mv_setStringFormat().

const char *mv_string_fp = "%2.2f";
const char *mv_string_start = "";
const char *mv_string_end = "";
const char *mv_string_mul = "*";
const char *mv_string_wedge = "^";
const char *mv_string_plus = " + ";
const char *mv_string_minus = " - ";

void mv_setStringFormat(const char *what, const char *format) {

if (!strcmp(what, "fp"))
mv_string_fp = (format) ? format : "%2.2f";
else if (!strcmp(what, "start"))
mv_string_start = (format) ? format : "";
else if (!strcmp(what, "end"))
mv_string_end = (format) ? format : "";
else if (!strcmp(what, "mul"))
mv_string_mul = (format) ? format : "*";
else if (!strcmp(what, "wedge"))
mv_string_wedge = (format) ? format : "^";
else if (!strcmp(what, "plus"))
mv_string_plus = (format) ? format : " + ";
else if (!strcmp(what, "minus"))
mv_string_minus = (format) ? format : " - ";    else {
char msg[1024];
sprintf(msg, "invalid argument to mv_setStringFormat(): %s", what);
mv_throw_exception(msg, MV_EXCEPTION_WARNING);
}

}

namespace g2Profiling {
// Just a bunch of dummy functions:
// Profiling is disabled, but having these functions around
// simplifies a lot.
void profile(unsigned int funcIdx, unsigned short storageTypeIdx, unsigned short nbArg, unsigned short argType[]) {
}
void reset() {
}
void save(const char *filename /*= "E:\\gasandbox\\ga_sandbox\\libgasandbox\\c2ga.gp2"*/, bool append /*= false*/) {
}
void init(const char *filename /*= "E:\\gasandbox\\ga_sandbox\\libgasandbox\\c2ga.gp2"*/,
const char *hostName /*= "localhost"*/, int port /*= 7693*/) {
}
} // end of namespace g2Profiling

// todo: for all storage formats, generate constants

// set to 0
void mv::set() {
gu(0);

}

// set to copy
void mv::set(const mv &arg1) {
gu(arg1.gu());
// copy coordinates
mv_memcpy(m_c, arg1.m_c, mv_size[gu()]);

}

// set to scalar
void mv::set(Float scalarVal) {
gu(1);
// set type (if profile)
// set coordinate
m_c[0] = scalarVal;

}

// set to coordinates
void mv::set(unsigned int gradeUsage, const Float *coordinates) {
// set coordinates
mv_memcpy(m_c, coordinates, mv_size[gu()]);

}

// set to 1 coordinates
void mv::set(unsigned int gradeUsage, Float c0  ) {
// check the number of coordinates
if (mv_size[gu()] != 1)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;

}

// set to 2 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1    ) {
// check the number of coordinates
if (mv_size[gu()] != 2)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;

}

// set to 3 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2  ) {
// check the number of coordinates
if (mv_size[gu()] != 3)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;

}

// set to 4 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3    ) {
// check the number of coordinates
if (mv_size[gu()] != 4)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;

}

// set to 5 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4  ) {
// check the number of coordinates
if (mv_size[gu()] != 5)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;

}

// set to 6 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5    ) {
// check the number of coordinates
if (mv_size[gu()] != 6)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;

}

// set to 7 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6  ) {
// check the number of coordinates
if (mv_size[gu()] != 7)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;

}

// set to 8 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7    ) {
// check the number of coordinates
if (mv_size[gu()] != 8)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;

}

// set to 9 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8  ) {
// check the number of coordinates
if (mv_size[gu()] != 9)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;

}

// set to 10 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9    ) {
// check the number of coordinates
if (mv_size[gu()] != 10)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;

}

// set to 11 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10 ) {
// check the number of coordinates
if (mv_size[gu()] != 11)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;

}

// set to 12 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10, Float c11  ) {
// check the number of coordinates
if (mv_size[gu()] != 12)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;
m_c[11] = c11;

}

// set to 13 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10, Float c11, Float c12   ) {
// check the number of coordinates
if (mv_size[gu()] != 13)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;
m_c[11] = c11;
m_c[12] = c12;

}

// set to 14 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10, Float c11, Float c12, Float c13    ) {
// check the number of coordinates
if (mv_size[gu()] != 14)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;
m_c[11] = c11;
m_c[12] = c12;
m_c[13] = c13;

}

// set to 15 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10, Float c11, Float c12, Float c13, Float c14 ) {
// check the number of coordinates
if (mv_size[gu()] != 15)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;
m_c[11] = c11;
m_c[12] = c12;
m_c[13] = c13;
m_c[14] = c14;

}

// set to 16 coordinates
void mv::set(unsigned int gradeUsage, Float c0, Float c1, Float c2, Float c3, Float c4, Float c5, Float c6, Float c7, Float c8, Float c9, Float c10, Float c11, Float c12, Float c13, Float c14, Float c15  ) {
// check the number of coordinates
if (mv_size[gu()] != 16)
throw (-1); // todo: more sensible exception
// set coordinates
m_c[0] = c0;
m_c[1] = c1;
m_c[2] = c2;
m_c[3] = c3;
m_c[4] = c4;
m_c[5] = c5;
m_c[6] = c6;
m_c[7] = c7;
m_c[8] = c8;
m_c[9] = c9;
m_c[10] = c10;
m_c[11] = c11;
m_c[12] = c12;
m_c[13] = c13;
m_c[14] = c14;
m_c[15] = c15;

}

// set to no_t
void mv::set(const no_t & arg1) {

gu(2);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to e1_t
void mv::set(const e1_t & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = arg1.m_c[0] ;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to e2_t
void mv::set(const e2_t & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = arg1.m_c[0] ;
m_c[3] = (Float)0;

}
// set to ni_t
void mv::set(const ni_t & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;

}
// set to scalar
void mv::set(const scalar & arg1) {

gu(1);

m_c[0] = arg1.m_c[0] ;

}
// set to point
void mv::set(const point & arg1) {

gu(2);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;

}
// set to normalizedPoint
void mv::set(const normalizedPoint & arg1) {

gu(2);

m_c[0] = (Float)1.0f;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;

}
// set to flatPoint
void mv::set(const flatPoint & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;
m_c[4] = arg1.m_c[1] ;
m_c[5] = arg1.m_c[2] ;

}
// set to normalizedFlatPoint
void mv::set(const normalizedFlatPoint & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;
m_c[4] = arg1.m_c[1] ;
m_c[5] = (Float)1.0f;

}
// set to pointPair
void mv::set(const pointPair & arg1) {

gu(4);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;
m_c[4] = arg1.m_c[4] ;
m_c[5] = arg1.m_c[5] ;

}
// set to TRversorLog
void mv::set(const TRversorLog & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = arg1.m_c[0] ;
m_c[3] = arg1.m_c[1] ;
m_c[4] = arg1.m_c[2] ;
m_c[5] = (Float)0;

}
// set to line
void mv::set(const line & arg1) {

gu(8);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] * (Float)-1.0;
m_c[2] = arg1.m_c[2] * (Float)-1.0;
m_c[3] = (Float)0;

}
// set to dualLine
void mv::set(const dualLine & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = arg1.m_c[0] ;
m_c[3] = arg1.m_c[1] ;
m_c[4] = arg1.m_c[2] ;
m_c[5] = (Float)0;

}
// set to circle
void mv::set(const circle & arg1) {

gu(8);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;

}
// set to freeVector
void mv::set(const freeVector & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;
m_c[4] = arg1.m_c[1] ;
m_c[5] = (Float)0;

}
// set to freeBivector
void mv::set(const freeBivector & arg1) {

gu(8);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to tangentVector
void mv::set(const tangentVector & arg1) {

gu(4);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;
m_c[4] = arg1.m_c[4] ;
m_c[5] = arg1.m_c[5] ;

}
// set to tangentBivector
void mv::set(const tangentBivector & arg1) {

gu(8);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;

}
// set to vectorE2GA
void mv::set(const vectorE2GA & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = (Float)0;

}
// set to bivectorE2GA
void mv::set(const bivectorE2GA & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = arg1.m_c[0] ;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = (Float)0;

}
// set to TRversor
void mv::set(const TRversor & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[1] ;
m_c[4] = arg1.m_c[2] ;
m_c[5] = arg1.m_c[3] ;
m_c[6] = (Float)0;

}
// set to TRSversor
void mv::set(const TRSversor & arg1) {

gu(21);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[1] ;
m_c[4] = arg1.m_c[2] ;
m_c[5] = arg1.m_c[3] ;
m_c[6] = arg1.m_c[4] ;
m_c[7] = arg1.m_c[5] ;

}
// set to evenVersor
void mv::set(const evenVersor & arg1) {

gu(21);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;
m_c[4] = arg1.m_c[4] ;
m_c[5] = arg1.m_c[5] ;
m_c[6] = arg1.m_c[6] ;
m_c[7] = arg1.m_c[7] ;

}
// set to translator
void mv::set(const translator & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = arg1.m_c[1] ;
m_c[5] = arg1.m_c[2] ;
m_c[6] = (Float)0;

}
// set to normalizedTranslator
void mv::set(const normalizedTranslator & arg1) {

gu(5);

m_c[0] = (Float)1.0f;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = arg1.m_c[0] ;
m_c[5] = arg1.m_c[1] ;
m_c[6] = (Float)0;

}
// set to rotor
void mv::set(const rotor & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[1] ;
m_c[4] = (Float)0;
m_c[5] = (Float)0;
m_c[6] = (Float)0;

}
// set to scalor
void mv::set(const scalor & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = (Float)0;
m_c[6] = arg1.m_c[1] ;

}
// set to __no_ct__
void mv::set(const __no_ct__ & arg1) {

gu(2);

m_c[0] = (Float)1.0f;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to __e1_ct__
void mv::set(const __e1_ct__ & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)1.0f;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to __e2_ct__
void mv::set(const __e2_ct__ & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)1.0f;
m_c[3] = (Float)0;

}
// set to __ni_ct__
void mv::set(const __ni_ct__ & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)1.0f;

}
// set to __I4i_ct__
void mv::set(const __I4i_ct__ & arg1) {

gu(16);

m_c[0] = (Float)-1.0f;

}
// set to __I4_ct__
void mv::set(const __I4_ct__ & arg1) {

gu(16);

m_c[0] = (Float)1.0f;

}
// set to __I2_ct__
void mv::set(const __I2_ct__ & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)1.0f;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = (Float)0;

}
// set to __noni_ct__
void mv::set(const __noni_ct__ & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = (Float)1.0f;

}
// set to __e2ni_ct__
void mv::set(const __e2ni_ct__ & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = (Float)1.0f;
m_c[5] = (Float)0;

}
// set to __e1ni_ct__
void mv::set(const __e1ni_ct__ & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)1.0f;
m_c[4] = (Float)0;
m_c[5] = (Float)0;

}
// set to __syn_smv___e1_e2_nof1_0
void mv::set(const __syn_smv___e1_e2_nof1_0 & arg1) {

gu(2);

m_c[0] = (Float)1.0f;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = (Float)0;

}
// set to __syn_smv___e1e2nif1_0
void mv::set(const __syn_smv___e1e2nif1_0 & arg1) {

gu(8);

m_c[0] = (Float)1.0f;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;

}
// set to __syn_smv___e1_e2_ni_nof_1_0
void mv::set(const __syn_smv___e1_e2_ni_nof_1_0 & arg1) {

gu(2);

m_c[0] = (Float)-1.0f;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;

}
// set to __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni
void mv::set(const __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;
m_c[4] = arg1.m_c[5] ;
m_c[5] = arg1.m_c[6] ;
m_c[6] = arg1.m_c[4] ;

}
// set to __syn_smv___scalar_noe1_noe2_noni
void mv::set(const __syn_smv___scalar_noe1_noe2_noni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = (Float)0;
m_c[6] = arg1.m_c[3] ;

}
// set to __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni
void mv::set(const __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni & arg1) {

gu(10);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[4] ;
m_c[4] = (Float)0;
m_c[5] = arg1.m_c[5] ;
m_c[6] = arg1.m_c[6] ;
m_c[7] = arg1.m_c[3] ;

}
// set to __syn_smv___scalar_noe1_e1e2_e1ni
void mv::set(const __syn_smv___scalar_noe1_e1e2_e1ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[2] ;
m_c[4] = arg1.m_c[3] ;
m_c[5] = (Float)0;
m_c[6] = (Float)0;

}
// set to __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni
void mv::set(const __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni & arg1) {

gu(10);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[4] ;
m_c[4] = arg1.m_c[6] ;
m_c[5] = arg1.m_c[5] ;
m_c[6] = (Float)0;
m_c[7] = arg1.m_c[3] ;

}
// set to __syn_smv___scalar_noe2_e1e2_e2ni
void mv::set(const __syn_smv___scalar_noe2_e1e2_e2ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;
m_c[4] = (Float)0;
m_c[5] = arg1.m_c[3] ;
m_c[6] = (Float)0;

}
// set to __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni
void mv::set(const __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni & arg1) {

gu(10);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[4] ;
m_c[4] = arg1.m_c[6] ;
m_c[5] = (Float)0;
m_c[6] = arg1.m_c[5] ;
m_c[7] = arg1.m_c[3] ;

}
// set to __syn_smv___scalar_noni_e1ni_e2ni
void mv::set(const __syn_smv___scalar_noni_e1ni_e2ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = arg1.m_c[2] ;
m_c[5] = arg1.m_c[3] ;
m_c[6] = arg1.m_c[1] ;

}
// set to __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni
void mv::set(const __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni & arg1) {

gu(10);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = arg1.m_c[2] ;
m_c[3] = arg1.m_c[3] ;
m_c[4] = arg1.m_c[6] ;
m_c[5] = arg1.m_c[4] ;
m_c[6] = arg1.m_c[5] ;
m_c[7] = (Float)0;

}
// set to __syn_smv___e1ni_e2ni_nonif_1_0
void mv::set(const __syn_smv___e1ni_e2ni_nonif_1_0 & arg1) {

gu(4);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;
m_c[4] = arg1.m_c[1] ;
m_c[5] = (Float)-1.0f;

}
// set to __syn_smv___scalarf_1_0
void mv::set(const __syn_smv___scalarf_1_0 & arg1) {

gu(1);

m_c[0] = (Float)-1.0f;

}
// set to __syn_smv___nif_1_0
void mv::set(const __syn_smv___nif_1_0 & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)-1.0f;

}
// set to __syn_smv___nif1_0
void mv::set(const __syn_smv___nif1_0 & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)1.0f;

}
// set to __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0
void mv::set(const __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0 & arg1) {

gu(10);

m_c[0] = (Float)1.0f;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;
m_c[4] = arg1.m_c[5] ;
m_c[5] = arg1.m_c[3] ;
m_c[6] = arg1.m_c[4] ;
m_c[7] = (Float)0;

}
// set to __syn_smv___e1_e2_ni_nof2_0
void mv::set(const __syn_smv___e1_e2_ni_nof2_0 & arg1) {

gu(2);

m_c[0] = (Float)2.0f;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;

}
// set to __syn_smv___e1_e2_ni
void mv::set(const __syn_smv___e1_e2_ni & arg1) {

gu(2);

m_c[0] = (Float)0;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;

}
// set to __syn_smv___noe1_noe2_noni
void mv::set(const __syn_smv___noe1_noe2_noni & arg1) {

gu(4);

m_c[0] = arg1.m_c[0] ;
m_c[1] = arg1.m_c[1] ;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = arg1.m_c[2] ;

}
// set to __syn_smv___no_noe1e2_noe1ni_noe2ni
void mv::set(const __syn_smv___no_noe1e2_noe1ni_noe2ni & arg1) {

gu(10);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = (Float)0;
m_c[4] = (Float)0;
m_c[5] = arg1.m_c[2] ;
m_c[6] = arg1.m_c[3] ;
m_c[7] = arg1.m_c[1] ;

}
// set to __syn_smv___scalar_e1e2_e1ni
void mv::set(const __syn_smv___scalar_e1e2_e1ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[1] ;
m_c[4] = arg1.m_c[2] ;
m_c[5] = (Float)0;
m_c[6] = (Float)0;

}
// set to __syn_smv___e1_e2_ni_e1e2ni
void mv::set(const __syn_smv___e1_e2_ni_e1e2ni & arg1) {

gu(10);

m_c[0] = (Float)0;
m_c[1] = arg1.m_c[0] ;
m_c[2] = arg1.m_c[1] ;
m_c[3] = arg1.m_c[2] ;
m_c[4] = arg1.m_c[3] ;
m_c[5] = (Float)0;
m_c[6] = (Float)0;
m_c[7] = (Float)0;

}
// set to __syn_smv___scalar_e1e2_e2ni
void mv::set(const __syn_smv___scalar_e1e2_e2ni & arg1) {

gu(5);

m_c[0] = arg1.m_c[0] ;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[1] ;
m_c[4] = (Float)0;
m_c[5] = arg1.m_c[2] ;
m_c[6] = (Float)0;

}
// set to __syn_smv___scalarf0_0
void mv::set(const __syn_smv___scalarf0_0 & arg1) {

gu(1);

m_c[0] = (Float)0.0f;

}
// set to __syn_smv___ni_e1e2ni
void mv::set(const __syn_smv___ni_e1e2ni & arg1) {

gu(10);

m_c[0] = (Float)0;
m_c[1] = (Float)0;
m_c[2] = (Float)0;
m_c[3] = arg1.m_c[0] ;
m_c[4] = arg1.m_c[1] ;
m_c[5] = (Float)0;
m_c[6] = (Float)0;
m_c[7] = (Float)0;

}

// assign copy
mv& mv::operator=(const mv &arg1) {
set(arg1);
return *this;
}

// assign scalar
mv& mv::operator=(Float s) {
set(s);
return *this;
}

// assign no_t
mv& mv::operator=(const no_t& arg1) {
set(arg1);
return *this;
}
// assign e1_t
mv& mv::operator=(const e1_t& arg1) {
set(arg1);
return *this;
}
// assign e2_t
mv& mv::operator=(const e2_t& arg1) {
set(arg1);
return *this;
}
// assign ni_t
mv& mv::operator=(const ni_t& arg1) {
set(arg1);
return *this;
}
// assign scalar
mv& mv::operator=(const scalar& arg1) {
set(arg1);
return *this;
}
// assign point
mv& mv::operator=(const point& arg1) {
set(arg1);
return *this;
}
// assign normalizedPoint
mv& mv::operator=(const normalizedPoint& arg1) {
set(arg1);
return *this;
}
// assign flatPoint
mv& mv::operator=(const flatPoint& arg1) {
set(arg1);
return *this;
}
// assign normalizedFlatPoint
mv& mv::operator=(const normalizedFlatPoint& arg1) {
set(arg1);
return *this;
}
// assign pointPair
mv& mv::operator=(const pointPair& arg1) {
set(arg1);
return *this;
}
// assign TRversorLog
mv& mv::operator=(const TRversorLog& arg1) {
set(arg1);
return *this;
}
// assign line
mv& mv::operator=(const line& arg1) {
set(arg1);
return *this;
}
// assign dualLine
mv& mv::operator=(const dualLine& arg1) {
set(arg1);
return *this;
}
// assign circle
mv& mv::operator=(const circle& arg1) {
set(arg1);
return *this;
}
// assign freeVector
mv& mv::operator=(const freeVector& arg1) {
set(arg1);
return *this;
}
// assign freeBivector
mv& mv::operator=(const freeBivector& arg1) {
set(arg1);
return *this;
}
// assign tangentVector
mv& mv::operator=(const tangentVector& arg1) {
set(arg1);
return *this;
}
// assign tangentBivector
mv& mv::operator=(const tangentBivector& arg1) {
set(arg1);
return *this;
}
// assign vectorE2GA
mv& mv::operator=(const vectorE2GA& arg1) {
set(arg1);
return *this;
}
// assign bivectorE2GA
mv& mv::operator=(const bivectorE2GA& arg1) {
set(arg1);
return *this;
}
// assign TRversor
mv& mv::operator=(const TRversor& arg1) {
set(arg1);
return *this;
}
// assign TRSversor
mv& mv::operator=(const TRSversor& arg1) {
set(arg1);
return *this;
}
// assign evenVersor
mv& mv::operator=(const evenVersor& arg1) {
set(arg1);
return *this;
}
// assign translator
mv& mv::operator=(const translator& arg1) {
set(arg1);
return *this;
}
// assign normalizedTranslator
mv& mv::operator=(const normalizedTranslator& arg1) {
set(arg1);
return *this;
}
// assign rotor
mv& mv::operator=(const rotor& arg1) {
set(arg1);
return *this;
}
// assign scalor
mv& mv::operator=(const scalor& arg1) {
set(arg1);
return *this;
}
// assign __no_ct__
mv& mv::operator=(const __no_ct__& arg1) {
set(arg1);
return *this;
}
// assign __e1_ct__
mv& mv::operator=(const __e1_ct__& arg1) {
set(arg1);
return *this;
}
// assign __e2_ct__
mv& mv::operator=(const __e2_ct__& arg1) {
set(arg1);
return *this;
}
// assign __ni_ct__
mv& mv::operator=(const __ni_ct__& arg1) {
set(arg1);
return *this;
}
// assign __I4i_ct__
mv& mv::operator=(const __I4i_ct__& arg1) {
set(arg1);
return *this;
}
// assign __I4_ct__
mv& mv::operator=(const __I4_ct__& arg1) {
set(arg1);
return *this;
}
// assign __I2_ct__
mv& mv::operator=(const __I2_ct__& arg1) {
set(arg1);
return *this;
}
// assign __noni_ct__
mv& mv::operator=(const __noni_ct__& arg1) {
set(arg1);
return *this;
}
// assign __e2ni_ct__
mv& mv::operator=(const __e2ni_ct__& arg1) {
set(arg1);
return *this;
}
// assign __e1ni_ct__
mv& mv::operator=(const __e1ni_ct__& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_nof1_0
mv& mv::operator=(const __syn_smv___e1_e2_nof1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1e2nif1_0
mv& mv::operator=(const __syn_smv___e1e2nif1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_ni_nof_1_0
mv& mv::operator=(const __syn_smv___e1_e2_ni_nof_1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni
mv& mv::operator=(const __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_noe1_noe2_noni
mv& mv::operator=(const __syn_smv___scalar_noe1_noe2_noni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni
mv& mv::operator=(const __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_noe1_e1e2_e1ni
mv& mv::operator=(const __syn_smv___scalar_noe1_e1e2_e1ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni
mv& mv::operator=(const __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_noe2_e1e2_e2ni
mv& mv::operator=(const __syn_smv___scalar_noe2_e1e2_e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni
mv& mv::operator=(const __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_noni_e1ni_e2ni
mv& mv::operator=(const __syn_smv___scalar_noni_e1ni_e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni
mv& mv::operator=(const __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1ni_e2ni_nonif_1_0
mv& mv::operator=(const __syn_smv___e1ni_e2ni_nonif_1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalarf_1_0
mv& mv::operator=(const __syn_smv___scalarf_1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___nif_1_0
mv& mv::operator=(const __syn_smv___nif_1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___nif1_0
mv& mv::operator=(const __syn_smv___nif1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0
mv& mv::operator=(const __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_ni_nof2_0
mv& mv::operator=(const __syn_smv___e1_e2_ni_nof2_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_ni
mv& mv::operator=(const __syn_smv___e1_e2_ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___noe1_noe2_noni
mv& mv::operator=(const __syn_smv___noe1_noe2_noni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___no_noe1e2_noe1ni_noe2ni
mv& mv::operator=(const __syn_smv___no_noe1e2_noe1ni_noe2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_e1e2_e1ni
mv& mv::operator=(const __syn_smv___scalar_e1e2_e1ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___e1_e2_ni_e1e2ni
mv& mv::operator=(const __syn_smv___e1_e2_ni_e1e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalar_e1e2_e2ni
mv& mv::operator=(const __syn_smv___scalar_e1e2_e2ni& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___scalarf0_0
mv& mv::operator=(const __syn_smv___scalarf0_0& arg1) {
set(arg1);
return *this;
}
// assign __syn_smv___ni_e1e2ni
mv& mv::operator=(const __syn_smv___ni_e1e2ni& arg1) {
set(arg1);
return *this;
}

float mv::largestCoordinate() const {
int nc = mv_size[gu()], i;
Float maxC = -1.0, C;

for (i = 0; i < nc; i++) {
C = (m_c[i] < (Float)0.0) ? -m_c[i] : m_c[i];
if (C > maxC) maxC = C;
}

return maxC;
}

float mv::largestBasisBlade(unsigned int &bm) const {
int nc = mv_size[gu()];
Float maxC = -1.0, C;

int idx = 0;
int i = 0;

while (i < nc) {
if (gu() & (1 << grade)) {
C = (m_c[i] < (Float)0.0) ? -m_c[i] : m_c[i];
if (C > maxC) {
maxC = C;
bm = mv_basisElementBitmapByIndex[idx];
}
idx++;
i++;
}
}
}

return maxC;
}

// set to mv
void no_t::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
}
else {
m_c[0] = (Float)0.0;
}

}

float no_t::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float no_t::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 1;

return maxC;
}

// set to mv
void e1_t::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
}
else {
m_c[0] = (Float)0.0;
}

}

float e1_t::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float e1_t::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 2;

return maxC;
}

// set to mv
void e2_t::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 2];
}
else {
m_c[0] = (Float)0.0;
}

}

float e2_t::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float e2_t::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 4;

return maxC;
}

// set to mv
void ni_t::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
}

}

float ni_t::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float ni_t::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 8;

return maxC;
}

// set to mv
void scalar::set(const mv & arg1) {

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[0];
}
else {
m_c[0] = (Float)0.0;
}

}

float scalar::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float scalar::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 0;

return maxC;
}

// set to mv
void point::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float point::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float point::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 8;
}
return maxC;
}

// set to mv
void normalizedPoint::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float normalizedPoint::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float normalizedPoint::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 1;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
return maxC;
}

// set to mv
void flatPoint::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 3];
m_c[1] = arg1.m_c[gidx + 4];
m_c[2] = arg1.m_c[gidx + 5];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float flatPoint::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float flatPoint::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 10;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 12;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void normalizedFlatPoint::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 3];
m_c[1] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float normalizedFlatPoint::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float normalizedFlatPoint::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 9;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void pointPair::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
m_c[4] = arg1.m_c[gidx + 4];
m_c[5] = arg1.m_c[gidx + 5];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
}

}

float pointPair::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
return maxC;
}

float pointPair::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 3;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 12;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void TRversorLog::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 2];
m_c[1] = arg1.m_c[gidx + 3];
m_c[2] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float TRversorLog::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float TRversorLog::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 6;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void line::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1]* (Float)-1.0;
m_c[2] = arg1.m_c[gidx + 2]* (Float)-1.0;
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float line::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float line::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 14;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 13;
}
return maxC;
}

// set to mv
void dualLine::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 2];
m_c[1] = arg1.m_c[gidx + 3];
m_c[2] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float dualLine::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float dualLine::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 6;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void circle::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float circle::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float circle::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 14;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 13;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 7;
}
return maxC;
}

// set to mv
void freeVector::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 3];
m_c[1] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float freeVector::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float freeVector::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 10;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void freeBivector::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[0] = arg1.m_c[gidx + 0];
}
else {
m_c[0] = (Float)0.0;
}

}

float freeBivector::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float freeBivector::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 14;

return maxC;
}

// set to mv
void tangentVector::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
m_c[4] = arg1.m_c[gidx + 4];
m_c[5] = arg1.m_c[gidx + 5];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
}

}

float tangentVector::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
return maxC;
}

float tangentVector::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 3;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 12;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void tangentBivector::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float tangentBivector::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float tangentBivector::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 14;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 13;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 7;
}
return maxC;
}

// set to mv
void vectorE2GA::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float vectorE2GA::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float vectorE2GA::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 2;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
return maxC;
}

// set to mv
void bivectorE2GA::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 2];
}
else {
m_c[0] = (Float)0.0;
}

}

float bivectorE2GA::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];

return maxC;
}

float bivectorE2GA::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
bm = 6;

return maxC;
}

// set to mv
void TRversor::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
m_c[3] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float TRversor::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float TRversor::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void TRSversor::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
m_c[3] = arg1.m_c[gidx + 4];
m_c[4] = arg1.m_c[gidx + 5];
gidx += 6;      }
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
}

if (arg1.gu() & 8) {
gidx += 4;      }
else {
}

if (arg1.gu() & 16) {
m_c[5] = arg1.m_c[gidx + 0];
}
else {
m_c[5] = (Float)0.0;
}

}

float TRSversor::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
return maxC;
}

float TRSversor::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 12;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 9;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 15;
}
return maxC;
}

// set to mv
void evenVersor::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 0];
m_c[2] = arg1.m_c[gidx + 1];
m_c[3] = arg1.m_c[gidx + 2];
m_c[4] = arg1.m_c[gidx + 3];
m_c[5] = arg1.m_c[gidx + 4];
m_c[6] = arg1.m_c[gidx + 5];
gidx += 6;      }
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

if (arg1.gu() & 8) {
gidx += 4;      }
else {
}

if (arg1.gu() & 16) {
m_c[7] = arg1.m_c[gidx + 0];
}
else {
m_c[7] = (Float)0.0;
}

}

float evenVersor::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
C = (m_c[7] < (Float)0.0) ? -m_c[7] : m_c[7];
if (C > maxC) maxC = C;
return maxC;
}

float evenVersor::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 3;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 12;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 9;
}
C = (m_c[7] < (Float)0.0) ? -m_c[7] : m_c[7];
if (C > maxC) {
maxC = C;
bm = 15;
}
return maxC;
}

// set to mv
void translator::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 3];
m_c[2] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float translator::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float translator::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void normalizedTranslator::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 3];
m_c[1] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float normalizedTranslator::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float normalizedTranslator::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 0;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void rotor::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 2];
}
else {
m_c[1] = (Float)0.0;
}

}

float rotor::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float rotor::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 6;
}
return maxC;
}

// set to mv
void scalor::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 5];
}
else {
m_c[1] = (Float)0.0;
}

}

float scalor::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float scalor::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void __no_ct__::set(const mv & arg1) {

}

float __no_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __no_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 1;

return maxC;
}

// set to mv
void __e1_ct__::set(const mv & arg1) {

}

float __e1_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __e1_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 2;

return maxC;
}

// set to mv
void __e2_ct__::set(const mv & arg1) {

}

float __e2_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __e2_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 4;

return maxC;
}

// set to mv
void __ni_ct__::set(const mv & arg1) {

}

float __ni_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __ni_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 8;

return maxC;
}

// set to mv
void __I4i_ct__::set(const mv & arg1) {

}

float __I4i_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __I4i_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 15;

return maxC;
}

// set to mv
void __I4_ct__::set(const mv & arg1) {

}

float __I4_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __I4_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 15;

return maxC;
}

// set to mv
void __I2_ct__::set(const mv & arg1) {

}

float __I2_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __I2_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 6;

return maxC;
}

// set to mv
void __noni_ct__::set(const mv & arg1) {

}

float __noni_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __noni_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 9;

return maxC;
}

// set to mv
void __e2ni_ct__::set(const mv & arg1) {

}

float __e2ni_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __e2ni_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 12;

return maxC;
}

// set to mv
void __e1ni_ct__::set(const mv & arg1) {

}

float __e1ni_ct__::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __e1ni_ct__::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 10;

return maxC;
}

// set to mv
void __syn_smv___e1_e2_nof1_0::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float __syn_smv___e1_e2_nof1_0::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_nof1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 1;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
return maxC;
}

// set to mv
void __syn_smv___e1e2nif1_0::set(const mv & arg1) {

}

float __syn_smv___e1e2nif1_0::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __syn_smv___e1e2nif1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 14;

return maxC;
}

// set to mv
void __syn_smv___e1_e2_ni_nof_1_0::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___e1_e2_ni_nof_1_0::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_ni_nof_1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 1;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 0];
m_c[2] = arg1.m_c[gidx + 1];
m_c[3] = arg1.m_c[gidx + 2];
m_c[4] = arg1.m_c[gidx + 5];
m_c[5] = arg1.m_c[gidx + 3];
m_c[6] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

}

float __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_noe1_noe2_e1e2_noni_e1ni_e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 3;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 9;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_noe1_noe2_noni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 0];
m_c[2] = arg1.m_c[gidx + 1];
m_c[3] = arg1.m_c[gidx + 5];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float __syn_smv___scalar_noe1_noe2_noni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_noe1_noe2_noni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 3;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[4] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[4] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[3] = arg1.m_c[gidx + 3];
m_c[5] = arg1.m_c[gidx + 1];
m_c[6] = arg1.m_c[gidx + 2];
}
else {
m_c[3] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

}

float __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_noe2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 7;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 13;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_noe1_e1e2_e1ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 0];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float __syn_smv___scalar_noe1_e1e2_e1ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_noe1_e1e2_e1ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 3;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 10;
}
return maxC;
}

// set to mv
void __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[4] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[4] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[3] = arg1.m_c[gidx + 3];
m_c[5] = arg1.m_c[gidx + 1];
m_c[6] = arg1.m_c[gidx + 0];
}
else {
m_c[3] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

}

float __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___no_e1_e2_noe1e2_ni_noe1ni_e1e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 7;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_noe2_e1e2_e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float __syn_smv___scalar_noe2_e1e2_e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_noe2_e1e2_e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[4] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[4] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[3] = arg1.m_c[gidx + 3];
m_c[5] = arg1.m_c[gidx + 2];
m_c[6] = arg1.m_c[gidx + 0];
}
else {
m_c[3] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

}

float __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___no_e1_e2_noe1e2_ni_noe2ni_e1e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 7;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 13;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_noni_e1ni_e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 5];
m_c[2] = arg1.m_c[gidx + 3];
m_c[3] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float __syn_smv___scalar_noni_e1ni_e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_noni_e1ni_e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 9;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 2];
m_c[3] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[4] = arg1.m_c[gidx + 1];
m_c[5] = arg1.m_c[gidx + 2];
m_c[6] = arg1.m_c[gidx + 0];
}
else {
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
m_c[6] = (Float)0.0;
}

}

float __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___no_e1_e2_ni_noe1ni_noe2ni_e1e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 13;
}
C = (m_c[6] < (Float)0.0) ? -m_c[6] : m_c[6];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to mv
void __syn_smv___e1ni_e2ni_nonif_1_0::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 3];
m_c[1] = arg1.m_c[gidx + 4];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
}

}

float __syn_smv___e1ni_e2ni_nonif_1_0::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1ni_e2ni_nonif_1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 9;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 10;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void __syn_smv___scalarf_1_0::set(const mv & arg1) {

}

float __syn_smv___scalarf_1_0::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __syn_smv___scalarf_1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 0;

return maxC;
}

// set to mv
void __syn_smv___nif_1_0::set(const mv & arg1) {

}

float __syn_smv___nif_1_0::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __syn_smv___nif_1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 8;

return maxC;
}

// set to mv
void __syn_smv___nif1_0::set(const mv & arg1) {

}

float __syn_smv___nif1_0::largestCoordinate() const {

Float maxC = (Float)1.0f;

return maxC;
}

float __syn_smv___nif1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f;
bm = 8;

return maxC;
}

// set to mv
void __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[3] = arg1.m_c[gidx + 1];
m_c[4] = arg1.m_c[gidx + 2];
m_c[5] = arg1.m_c[gidx + 0];
}
else {
m_c[3] = (Float)0.0;
m_c[4] = (Float)0.0;
m_c[5] = (Float)0.0;
}

}

float __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0::largestCoordinate() const {

Float maxC = (Float)1.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) maxC = C;
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_ni_noe1ni_noe2ni_e1e2ni_nof1_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)1.0f, C;
bm = 1;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[4] < (Float)0.0) ? -m_c[4] : m_c[4];
if (C > maxC) {
maxC = C;
bm = 13;
}
C = (m_c[5] < (Float)0.0) ? -m_c[5] : m_c[5];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to mv
void __syn_smv___e1_e2_ni_nof2_0::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___e1_e2_ni_nof2_0::largestCoordinate() const {

Float maxC = (Float)2.0f, C;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) maxC = C;
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_ni_nof2_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)2.0f, C;
bm = 1;

C = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0];
if (C > maxC) {
maxC = C;
bm = 2;
}
C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
return maxC;
}

// set to mv
void __syn_smv___e1_e2_ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___e1_e2_ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 2;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
return maxC;
}

// set to mv
void __syn_smv___noe1_noe2_noni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[0] = arg1.m_c[gidx + 0];
m_c[1] = arg1.m_c[gidx + 1];
m_c[2] = arg1.m_c[gidx + 5];
}
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___noe1_noe2_noni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___noe1_noe2_noni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 3;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 5;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 9;
}
return maxC;
}

// set to mv
void __syn_smv___no_noe1e2_noe1ni_noe2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[1] = arg1.m_c[gidx + 3];
m_c[2] = arg1.m_c[gidx + 1];
m_c[3] = arg1.m_c[gidx + 2];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
m_c[3] = (Float)0.0;
}

}

float __syn_smv___no_noe1e2_noe1ni_noe2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___no_noe1e2_noe1ni_noe2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 1;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 7;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 11;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 13;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_e1e2_e1ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___scalar_e1e2_e1ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_e1e2_e1ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 10;
}
return maxC;
}

// set to mv
void __syn_smv___e1_e2_ni_e1e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 1];
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[3] = arg1.m_c[gidx + 0];
}
else {
m_c[3] = (Float)0.0;
}

}

float __syn_smv___e1_e2_ni_e1e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___e1_e2_ni_e1e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 2;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 4;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 8;
}
C = (m_c[3] < (Float)0.0) ? -m_c[3] : m_c[3];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to mv
void __syn_smv___scalar_e1e2_e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
m_c[0] = arg1.m_c[gidx + 0];
gidx += 1;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 2) {
gidx += 4;      }
else {
}

if (arg1.gu() & 4) {
m_c[1] = arg1.m_c[gidx + 2];
m_c[2] = arg1.m_c[gidx + 4];
}
else {
m_c[1] = (Float)0.0;
m_c[2] = (Float)0.0;
}

}

float __syn_smv___scalar_e1e2_e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___scalar_e1e2_e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 0;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 6;
}
C = (m_c[2] < (Float)0.0) ? -m_c[2] : m_c[2];
if (C > maxC) {
maxC = C;
bm = 12;
}
return maxC;
}

// set to mv
void __syn_smv___scalarf0_0::set(const mv & arg1) {

}

float __syn_smv___scalarf0_0::largestCoordinate() const {

Float maxC = (Float)0.0f;

return maxC;
}

float __syn_smv___scalarf0_0::largestBasisBlade(unsigned int &bm) const {

Float maxC = (Float)0.0f;
bm = 0;

return maxC;
}

// set to mv
void __syn_smv___ni_e1e2ni::set(const mv & arg1) {

int gidx = 0;

if (arg1.gu() & 1) {
gidx += 1;      }
else {
}

if (arg1.gu() & 2) {
m_c[0] = arg1.m_c[gidx + 3];
gidx += 4;      }
else {
m_c[0] = (Float)0.0;
}

if (arg1.gu() & 4) {
gidx += 6;      }
else {
}

if (arg1.gu() & 8) {
m_c[1] = arg1.m_c[gidx + 0];
}
else {
m_c[1] = (Float)0.0;
}

}

float __syn_smv___ni_e1e2ni::largestCoordinate() const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) maxC = C;
return maxC;
}

float __syn_smv___ni_e1e2ni::largestBasisBlade(unsigned int &bm) const {

Float maxC = (m_c[0] < (Float)0.0) ? -m_c[0] : m_c[0], C;
bm = 8;

C = (m_c[1] < (Float)0.0) ? -m_c[1] : m_c[1];
if (C > maxC) {
maxC = C;
bm = 14;
}
return maxC;
}

// set to identity 'I'
void om::set() {
// simplify forward call to set(scalar)
set(1.0);
}

// set to copy
void om::set(const om &arg1) {
mv_memcpy(m_c, arg1.m_c, 69);
}

// set to scalar
void om::set(Float scalarVal) {
c2ga::__G2_GENERATED__::set(*this, point(point_no_e1_e2_ni, scalarVal, (Float)0, (Float)0, (Float)0), point(point_no_e1_e2_ni, (Float)0, scalarVal, (Float)0, (Float)0), point(point_no_e1_e2_ni, (Float)0, (Float)0, scalarVal, (Float)0), point(point_no_e1_e2_ni, (Float)0, (Float)0, (Float)0, scalarVal));
}

// set to coordinates
void om::set(const Float *coordinates) {
mv_memcpy(m_c, coordinates, 69);
}

// set from basis vectors array
void om::set(const point *vectors) {
c2ga::__G2_GENERATED__::set(*this, vectors[0], vectors[1], vectors[2], vectors[3]);
}

// set from basis vectors
void om::set(const point & image_of_no, const point & image_of_e1, const point & image_of_e2, const point & image_of_ni) {
c2ga::__G2_GENERATED__::set(*this, image_of_no, image_of_e1, image_of_e2, image_of_ni);
}

// set by coordinates, transpose
void om::set(const Float *coordinates, bool transpose) {
if (transpose) {
m_c[0] = coordinates[0];
m_c[4] = coordinates[1];
m_c[8] = coordinates[2];
m_c[12] = coordinates[3];
m_c[1] = coordinates[4];
m_c[5] = coordinates[5];
m_c[9] = coordinates[6];
m_c[13] = coordinates[7];
m_c[2] = coordinates[8];
m_c[6] = coordinates[9];
m_c[10] = coordinates[10];
m_c[14] = coordinates[11];
m_c[3] = coordinates[12];
m_c[7] = coordinates[13];
m_c[11] = coordinates[14];
m_c[15] = coordinates[15];
m_c[16] = coordinates[16];
m_c[22] = coordinates[17];
m_c[28] = coordinates[18];
m_c[34] = coordinates[19];
m_c[40] = coordinates[20];
m_c[46] = coordinates[21];
m_c[17] = coordinates[22];
m_c[23] = coordinates[23];
m_c[29] = coordinates[24];
m_c[35] = coordinates[25];
m_c[41] = coordinates[26];
m_c[47] = coordinates[27];
m_c[18] = coordinates[28];
m_c[24] = coordinates[29];
m_c[30] = coordinates[30];
m_c[36] = coordinates[31];
m_c[42] = coordinates[32];
m_c[48] = coordinates[33];
m_c[19] = coordinates[34];
m_c[25] = coordinates[35];
m_c[31] = coordinates[36];
m_c[37] = coordinates[37];
m_c[43] = coordinates[38];
m_c[49] = coordinates[39];
m_c[20] = coordinates[40];
m_c[26] = coordinates[41];
m_c[32] = coordinates[42];
m_c[38] = coordinates[43];
m_c[44] = coordinates[44];
m_c[50] = coordinates[45];
m_c[21] = coordinates[46];
m_c[27] = coordinates[47];
m_c[33] = coordinates[48];
m_c[39] = coordinates[49];
m_c[45] = coordinates[50];
m_c[51] = coordinates[51];
m_c[52] = coordinates[52];
m_c[56] = coordinates[53];
m_c[60] = coordinates[54];
m_c[64] = coordinates[55];
m_c[53] = coordinates[56];
m_c[57] = coordinates[57];
m_c[61] = coordinates[58];
m_c[65] = coordinates[59];
m_c[54] = coordinates[60];
m_c[58] = coordinates[61];
m_c[62] = coordinates[62];
m_c[66] = coordinates[63];
m_c[55] = coordinates[64];
m_c[59] = coordinates[65];
m_c[63] = coordinates[66];
m_c[67] = coordinates[67];
m_c[68] = coordinates[68];
}
else set(coordinates);
}

// assign copy
om &om::operator=(const om &arg1) {
set(arg1);
return *this;
}

// assign scalar (creates scalar * 'I' outermorphism)
om &om::operator=(Float scalarVal) {
set(scalarVal);
return *this;
}

/// assign specialization:

// G2 functions:
mv lcont(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_1__[16] ;
mv_zero(__tmp_coord_array_1__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((y.m_gu & 1) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_1__[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}

}
if (((y.m_gu & 2) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_1__[1] += (__y_xpd__[1][0] * __x_xpd__[0][0]);
__tmp_coord_array_1__[2] += (__y_xpd__[1][1] * __x_xpd__[0][0]);
__tmp_coord_array_1__[3] += (__y_xpd__[1][2] * __x_xpd__[0][0]);
__tmp_coord_array_1__[4] += (__y_xpd__[1][3] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_1__[0] += ((__x_xpd__[1][2] * __y_xpd__[1][2]) + (__x_xpd__[1][1] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[1][3]));

}

}
if (((y.m_gu & 4) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_1__[5] += (__y_xpd__[2][0] * __x_xpd__[0][0]);
__tmp_coord_array_1__[6] += (__y_xpd__[2][1] * __x_xpd__[0][0]);
__tmp_coord_array_1__[7] += (__y_xpd__[2][2] * __x_xpd__[0][0]);
__tmp_coord_array_1__[8] += (__y_xpd__[2][3] * __x_xpd__[0][0]);
__tmp_coord_array_1__[9] += (__y_xpd__[2][4] * __x_xpd__[0][0]);
__tmp_coord_array_1__[10] += (__y_xpd__[2][5] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_1__[1] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[2][0]) + (__x_xpd__[1][0] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][1]));
__tmp_coord_array_1__[2] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[2][0]) + (__x_xpd__[1][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][2]));
__tmp_coord_array_1__[3] += ((__x_xpd__[1][0] * __y_xpd__[2][4]) + (__x_xpd__[1][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][1]));
__tmp_coord_array_1__[4] += ((__x_xpd__[1][1] * __y_xpd__[2][3]) + (__x_xpd__[1][2] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][5]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_1__[0] += ((-1.0f * __x_xpd__[2][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][3]) + (__x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][1]));

}

}
if (((y.m_gu & 8) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_1__[11] += (__y_xpd__[3][0] * __x_xpd__[0][0]);
__tmp_coord_array_1__[12] += (__y_xpd__[3][1] * __x_xpd__[0][0]);
__tmp_coord_array_1__[13] += (__y_xpd__[3][2] * __x_xpd__[0][0]);
__tmp_coord_array_1__[14] += (__y_xpd__[3][3] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_1__[5] += ((__x_xpd__[1][2] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[3][1]));
__tmp_coord_array_1__[6] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[3][2]));
__tmp_coord_array_1__[7] += ((-1.0f * __x_xpd__[1][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[3][3]));
__tmp_coord_array_1__[8] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][0]));
__tmp_coord_array_1__[9] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[3][2]) + (__x_xpd__[1][1] * __y_xpd__[3][0]));
__tmp_coord_array_1__[10] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][2]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_1__[1] += ((-1.0f * __x_xpd__[2][1] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][3]));
__tmp_coord_array_1__[2] += ((-1.0f * __x_xpd__[2][5] * __y_xpd__[3][1]) + (__x_xpd__[2][4] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[3][0]));
__tmp_coord_array_1__[3] += ((-1.0f * __x_xpd__[2][5] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[3][3]) + (__x_xpd__[2][0] * __y_xpd__[3][0]));
__tmp_coord_array_1__[4] += ((-1.0f * __x_xpd__[2][4] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[3][1]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_1__[0] += ((__x_xpd__[3][2] * __y_xpd__[3][2]) + (__x_xpd__[3][1] * __y_xpd__[3][1]) + (__x_xpd__[3][0] * __y_xpd__[3][3]) + (__x_xpd__[3][3] * __y_xpd__[3][0]));

}

}
if (((y.m_gu & 16) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_1__[15] += (__y_xpd__[4][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_1__[11] += (-1.0f * __x_xpd__[1][3] * __y_xpd__[4][0]);
__tmp_coord_array_1__[12] += (__x_xpd__[1][2] * __y_xpd__[4][0]);
__tmp_coord_array_1__[13] += (-1.0f * __x_xpd__[1][1] * __y_xpd__[4][0]);
__tmp_coord_array_1__[14] += (__x_xpd__[1][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_1__[5] += (-1.0f * __x_xpd__[2][1] * __y_xpd__[4][0]);
__tmp_coord_array_1__[6] += (__x_xpd__[2][0] * __y_xpd__[4][0]);
__tmp_coord_array_1__[7] += (__x_xpd__[2][5] * __y_xpd__[4][0]);
__tmp_coord_array_1__[8] += (__x_xpd__[2][4] * __y_xpd__[4][0]);
__tmp_coord_array_1__[9] += (-1.0f * __x_xpd__[2][3] * __y_xpd__[4][0]);
__tmp_coord_array_1__[10] += (-1.0f * __x_xpd__[2][2] * __y_xpd__[4][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_1__[1] += (-1.0f * __x_xpd__[3][3] * __y_xpd__[4][0]);
__tmp_coord_array_1__[2] += (__x_xpd__[3][2] * __y_xpd__[4][0]);
__tmp_coord_array_1__[3] += (-1.0f * __x_xpd__[3][1] * __y_xpd__[4][0]);
__tmp_coord_array_1__[4] += (__x_xpd__[3][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_1__[0] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
__temp_var_1__ = mv_compress(__tmp_coord_array_1__);
return __temp_var_1__;
}
scalar scp(const mv& x, const mv& y) {
scalar __temp_var_1__;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
if (((x.m_gu & 1) != 0)) {
if (((y.m_gu & 1) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}

}
if (((x.m_gu & 2) != 0)) {
if (((y.m_gu & 2) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[1][1] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[1][3]) + (__x_xpd__[1][2] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]));

}

}
if (((x.m_gu & 4) != 0)) {
if (((y.m_gu & 4) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][1]) + (__x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][4]));

}

}
if (((x.m_gu & 8) != 0)) {
if (((y.m_gu & 8) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[3][2] * __y_xpd__[3][2]) + (__x_xpd__[3][3] * __y_xpd__[3][0]) + (__x_xpd__[3][0] * __y_xpd__[3][3]) + (__x_xpd__[3][1] * __y_xpd__[3][1]));

}

}
if (((x.m_gu & 16) != 0)) {
if (((y.m_gu & 16) != 0)) {
__temp_var_1__.m_c[0] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
return __temp_var_1__;
}
mv gp(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_2__[16] ;
mv_zero(__tmp_coord_array_2__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((y.m_gu & 1) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_2__[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_2__[1] += (__x_xpd__[1][0] * __y_xpd__[0][0]);
__tmp_coord_array_2__[2] += (__x_xpd__[1][1] * __y_xpd__[0][0]);
__tmp_coord_array_2__[3] += (__x_xpd__[1][2] * __y_xpd__[0][0]);
__tmp_coord_array_2__[4] += (__x_xpd__[1][3] * __y_xpd__[0][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_2__[5] += (__x_xpd__[2][0] * __y_xpd__[0][0]);
__tmp_coord_array_2__[6] += (__x_xpd__[2][1] * __y_xpd__[0][0]);
__tmp_coord_array_2__[7] += (__x_xpd__[2][2] * __y_xpd__[0][0]);
__tmp_coord_array_2__[8] += (__x_xpd__[2][3] * __y_xpd__[0][0]);
__tmp_coord_array_2__[9] += (__x_xpd__[2][4] * __y_xpd__[0][0]);
__tmp_coord_array_2__[10] += (__x_xpd__[2][5] * __y_xpd__[0][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_2__[11] += (__x_xpd__[3][0] * __y_xpd__[0][0]);
__tmp_coord_array_2__[12] += (__x_xpd__[3][1] * __y_xpd__[0][0]);
__tmp_coord_array_2__[13] += (__x_xpd__[3][2] * __y_xpd__[0][0]);
__tmp_coord_array_2__[14] += (__x_xpd__[3][3] * __y_xpd__[0][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_2__[15] += (__x_xpd__[4][0] * __y_xpd__[0][0]);

}

}
if (((y.m_gu & 2) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_2__[1] += (__x_xpd__[0][0] * __y_xpd__[1][0]);
__tmp_coord_array_2__[2] += (__x_xpd__[0][0] * __y_xpd__[1][1]);
__tmp_coord_array_2__[3] += (__x_xpd__[0][0] * __y_xpd__[1][2]);
__tmp_coord_array_2__[4] += (__x_xpd__[0][0] * __y_xpd__[1][3]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_2__[0] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]) + (__x_xpd__[1][1] * __y_xpd__[1][1]) + (__x_xpd__[1][2] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[1][3]));
__tmp_coord_array_2__[5] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][1]));
__tmp_coord_array_2__[6] += ((__x_xpd__[1][0] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[1][0]));
__tmp_coord_array_2__[7] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[1][1]) + (__x_xpd__[1][1] * __y_xpd__[1][2]));
__tmp_coord_array_2__[8] += ((__x_xpd__[1][1] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][1]));
__tmp_coord_array_2__[9] += ((__x_xpd__[1][2] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][2]));
__tmp_coord_array_2__[10] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][3]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_2__[1] += ((__x_xpd__[2][0] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][0]) + (__x_xpd__[2][1] * __y_xpd__[1][2]));
__tmp_coord_array_2__[2] += ((__x_xpd__[2][0] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[1][0]) + (__x_xpd__[2][2] * __y_xpd__[1][2]));
__tmp_coord_array_2__[3] += ((-1.0f * __x_xpd__[2][4] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[1][1]) + (__x_xpd__[2][1] * __y_xpd__[1][3]));
__tmp_coord_array_2__[4] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[1][1]) + (__x_xpd__[2][5] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[1][2]));
__tmp_coord_array_2__[11] += ((__x_xpd__[2][4] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[1][2]) + (__x_xpd__[2][2] * __y_xpd__[1][3]));
__tmp_coord_array_2__[12] += ((__x_xpd__[2][3] * __y_xpd__[1][0]) + (__x_xpd__[2][0] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][1]));
__tmp_coord_array_2__[13] += ((__x_xpd__[2][4] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][2]) + (__x_xpd__[2][1] * __y_xpd__[1][3]));
__tmp_coord_array_2__[14] += ((__x_xpd__[2][0] * __y_xpd__[1][2]) + (__x_xpd__[2][2] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[1][1]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_2__[5] += ((__x_xpd__[3][3] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[1][0]));
__tmp_coord_array_2__[6] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[1][1]));
__tmp_coord_array_2__[7] += ((-1.0f * __x_xpd__[3][3] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[1][0]));
__tmp_coord_array_2__[8] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[1][2]));
__tmp_coord_array_2__[9] += ((__x_xpd__[3][0] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[1][3]));
__tmp_coord_array_2__[10] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[1][2]));
__tmp_coord_array_2__[15] += ((__x_xpd__[3][2] * __y_xpd__[1][1]) + (__x_xpd__[3][3] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[1][0]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_2__[11] += (__x_xpd__[4][0] * __y_xpd__[1][3]);
__tmp_coord_array_2__[12] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[1][2]);
__tmp_coord_array_2__[13] += (__x_xpd__[4][0] * __y_xpd__[1][1]);
__tmp_coord_array_2__[14] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[1][0]);

}

}
if (((y.m_gu & 4) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_2__[5] += (__x_xpd__[0][0] * __y_xpd__[2][0]);
__tmp_coord_array_2__[6] += (__x_xpd__[0][0] * __y_xpd__[2][1]);
__tmp_coord_array_2__[7] += (__x_xpd__[0][0] * __y_xpd__[2][2]);
__tmp_coord_array_2__[8] += (__x_xpd__[0][0] * __y_xpd__[2][3]);
__tmp_coord_array_2__[9] += (__x_xpd__[0][0] * __y_xpd__[2][4]);
__tmp_coord_array_2__[10] += (__x_xpd__[0][0] * __y_xpd__[2][5]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_2__[1] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][1]) + (__x_xpd__[1][0] * __y_xpd__[2][5]));
__tmp_coord_array_2__[2] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[2][0]) + (__x_xpd__[1][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][2]));
__tmp_coord_array_2__[3] += ((__x_xpd__[1][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][1]) + (__x_xpd__[1][0] * __y_xpd__[2][4]));
__tmp_coord_array_2__[4] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[2][5]) + (__x_xpd__[1][1] * __y_xpd__[2][3]) + (__x_xpd__[1][2] * __y_xpd__[2][4]));
__tmp_coord_array_2__[11] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[2][3]) + (__x_xpd__[1][3] * __y_xpd__[2][2]) + (__x_xpd__[1][1] * __y_xpd__[2][4]));
__tmp_coord_array_2__[12] += ((__x_xpd__[1][3] * __y_xpd__[2][0]) + (__x_xpd__[1][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][5]));
__tmp_coord_array_2__[13] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[2][5]) + (__x_xpd__[1][0] * __y_xpd__[2][4]) + (__x_xpd__[1][3] * __y_xpd__[2][1]));
__tmp_coord_array_2__[14] += ((__x_xpd__[1][0] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][1]) + (__x_xpd__[1][2] * __y_xpd__[2][0]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_2__[0] += ((__x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][1]));
__tmp_coord_array_2__[5] += ((__x_xpd__[2][2] * __y_xpd__[2][1]) + (__x_xpd__[2][0] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[2][0]));
__tmp_coord_array_2__[6] += ((__x_xpd__[2][1] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][0]) + (__x_xpd__[2][0] * __y_xpd__[2][2]));
__tmp_coord_array_2__[7] += ((__x_xpd__[2][4] * __y_xpd__[2][0]) + (__x_xpd__[2][1] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][4]));
__tmp_coord_array_2__[8] += ((__x_xpd__[2][5] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][5]) + (__x_xpd__[2][2] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][2]));
__tmp_coord_array_2__[9] += ((-1.0f * __x_xpd__[2][2] * __y_xpd__[2][3]) + (__x_xpd__[2][3] * __y_xpd__[2][2]) + (__x_xpd__[2][5] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][5]));
__tmp_coord_array_2__[10] += ((__x_xpd__[2][0] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][0]) + (__x_xpd__[2][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][1]));
__tmp_coord_array_2__[15] += ((__x_xpd__[2][4] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][1]) + (__x_xpd__[2][2] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][3]) + (__x_xpd__[2][5] * __y_xpd__[2][2]) + (__x_xpd__[2][0] * __y_xpd__[2][4]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_2__[1] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[2][2]));
__tmp_coord_array_2__[2] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][5]) + (__x_xpd__[3][3] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][1]));
__tmp_coord_array_2__[3] += ((__x_xpd__[3][0] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[2][3]));
__tmp_coord_array_2__[4] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[2][3]));
__tmp_coord_array_2__[11] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][5]) + (__x_xpd__[3][2] * __y_xpd__[2][3]));
__tmp_coord_array_2__[12] += ((__x_xpd__[3][0] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[2][2]) + (__x_xpd__[3][3] * __y_xpd__[2][4]));
__tmp_coord_array_2__[13] += ((-1.0f * __x_xpd__[3][3] * __y_xpd__[2][3]) + (__x_xpd__[3][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][0]));
__tmp_coord_array_2__[14] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][1]) + (__x_xpd__[3][2] * __y_xpd__[2][0]) + (__x_xpd__[3][3] * __y_xpd__[2][5]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_2__[5] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][1]);
__tmp_coord_array_2__[6] += (__x_xpd__[4][0] * __y_xpd__[2][0]);
__tmp_coord_array_2__[7] += (__x_xpd__[4][0] * __y_xpd__[2][5]);
__tmp_coord_array_2__[8] += (__x_xpd__[4][0] * __y_xpd__[2][4]);
__tmp_coord_array_2__[9] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][3]);
__tmp_coord_array_2__[10] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][2]);

}

}
if (((y.m_gu & 8) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_2__[11] += (__x_xpd__[0][0] * __y_xpd__[3][0]);
__tmp_coord_array_2__[12] += (__x_xpd__[0][0] * __y_xpd__[3][1]);
__tmp_coord_array_2__[13] += (__x_xpd__[0][0] * __y_xpd__[3][2]);
__tmp_coord_array_2__[14] += (__x_xpd__[0][0] * __y_xpd__[3][3]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_2__[5] += ((__x_xpd__[1][2] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[3][1]));
__tmp_coord_array_2__[6] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][0] * __y_xpd__[3][2]));
__tmp_coord_array_2__[7] += ((-1.0f * __x_xpd__[1][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[3][3]));
__tmp_coord_array_2__[8] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][0]));
__tmp_coord_array_2__[9] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[3][2]) + (__x_xpd__[1][1] * __y_xpd__[3][0]));
__tmp_coord_array_2__[10] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][2]));
__tmp_coord_array_2__[15] += ((__x_xpd__[1][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[3][2]) + (__x_xpd__[1][2] * __y_xpd__[3][1]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_2__[1] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][3]));
__tmp_coord_array_2__[2] += ((-1.0f * __x_xpd__[2][1] * __y_xpd__[3][0]) + (__x_xpd__[2][4] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[3][1]));
__tmp_coord_array_2__[3] += ((__x_xpd__[2][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[3][2]));
__tmp_coord_array_2__[4] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][2]));
__tmp_coord_array_2__[11] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[3][2]) + (__x_xpd__[2][4] * __y_xpd__[3][1]) + (__x_xpd__[2][5] * __y_xpd__[3][0]));
__tmp_coord_array_2__[12] += ((-1.0f * __x_xpd__[2][1] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][3]) + (__x_xpd__[2][2] * __y_xpd__[3][2]));
__tmp_coord_array_2__[13] += ((__x_xpd__[2][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][1]) + (__x_xpd__[2][0] * __y_xpd__[3][0]));
__tmp_coord_array_2__[14] += ((__x_xpd__[2][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[3][2]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_2__[0] += ((__x_xpd__[3][1] * __y_xpd__[3][1]) + (__x_xpd__[3][2] * __y_xpd__[3][2]) + (__x_xpd__[3][0] * __y_xpd__[3][3]) + (__x_xpd__[3][3] * __y_xpd__[3][0]));
__tmp_coord_array_2__[5] += ((__x_xpd__[3][2] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][2]));
__tmp_coord_array_2__[6] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[3][3]) + (__x_xpd__[3][3] * __y_xpd__[3][1]));
__tmp_coord_array_2__[7] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[3][1]) + (__x_xpd__[3][1] * __y_xpd__[3][2]));
__tmp_coord_array_2__[8] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[3][2]) + (__x_xpd__[3][2] * __y_xpd__[3][0]));
__tmp_coord_array_2__[9] += ((__x_xpd__[3][0] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[3][0]));
__tmp_coord_array_2__[10] += ((-1.0f * __x_xpd__[3][3] * __y_xpd__[3][0]) + (__x_xpd__[3][0] * __y_xpd__[3][3]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_2__[1] += (__x_xpd__[4][0] * __y_xpd__[3][3]);
__tmp_coord_array_2__[2] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[3][2]);
__tmp_coord_array_2__[3] += (__x_xpd__[4][0] * __y_xpd__[3][1]);
__tmp_coord_array_2__[4] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[3][0]);

}

}
if (((y.m_gu & 16) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_2__[15] += (__x_xpd__[0][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_2__[11] += (-1.0f * __x_xpd__[1][3] * __y_xpd__[4][0]);
__tmp_coord_array_2__[12] += (__x_xpd__[1][2] * __y_xpd__[4][0]);
__tmp_coord_array_2__[13] += (-1.0f * __x_xpd__[1][1] * __y_xpd__[4][0]);
__tmp_coord_array_2__[14] += (__x_xpd__[1][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_2__[5] += (-1.0f * __x_xpd__[2][1] * __y_xpd__[4][0]);
__tmp_coord_array_2__[6] += (__x_xpd__[2][0] * __y_xpd__[4][0]);
__tmp_coord_array_2__[7] += (__x_xpd__[2][5] * __y_xpd__[4][0]);
__tmp_coord_array_2__[8] += (__x_xpd__[2][4] * __y_xpd__[4][0]);
__tmp_coord_array_2__[9] += (-1.0f * __x_xpd__[2][3] * __y_xpd__[4][0]);
__tmp_coord_array_2__[10] += (-1.0f * __x_xpd__[2][2] * __y_xpd__[4][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_2__[1] += (-1.0f * __x_xpd__[3][3] * __y_xpd__[4][0]);
__tmp_coord_array_2__[2] += (__x_xpd__[3][2] * __y_xpd__[4][0]);
__tmp_coord_array_2__[3] += (-1.0f * __x_xpd__[3][1] * __y_xpd__[4][0]);
__tmp_coord_array_2__[4] += (__x_xpd__[3][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_2__[0] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
__temp_var_1__ = mv_compress(__tmp_coord_array_2__);
return __temp_var_1__;
}
mv gpEM(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_3__[16] ;
mv_zero(__tmp_coord_array_3__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((y.m_gu & 1) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_3__[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_3__[1] += (__x_xpd__[1][0] * __y_xpd__[0][0]);
__tmp_coord_array_3__[2] += (__x_xpd__[1][1] * __y_xpd__[0][0]);
__tmp_coord_array_3__[3] += (__x_xpd__[1][2] * __y_xpd__[0][0]);
__tmp_coord_array_3__[4] += (__x_xpd__[1][3] * __y_xpd__[0][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_3__[5] += (__x_xpd__[2][0] * __y_xpd__[0][0]);
__tmp_coord_array_3__[6] += (__x_xpd__[2][1] * __y_xpd__[0][0]);
__tmp_coord_array_3__[7] += (__x_xpd__[2][2] * __y_xpd__[0][0]);
__tmp_coord_array_3__[8] += (__x_xpd__[2][3] * __y_xpd__[0][0]);
__tmp_coord_array_3__[9] += (__x_xpd__[2][4] * __y_xpd__[0][0]);
__tmp_coord_array_3__[10] += (__x_xpd__[2][5] * __y_xpd__[0][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_3__[11] += (__x_xpd__[3][0] * __y_xpd__[0][0]);
__tmp_coord_array_3__[12] += (__x_xpd__[3][1] * __y_xpd__[0][0]);
__tmp_coord_array_3__[13] += (__x_xpd__[3][2] * __y_xpd__[0][0]);
__tmp_coord_array_3__[14] += (__x_xpd__[3][3] * __y_xpd__[0][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_3__[15] += (__x_xpd__[4][0] * __y_xpd__[0][0]);

}

}
if (((y.m_gu & 2) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_3__[1] += (__x_xpd__[0][0] * __y_xpd__[1][0]);
__tmp_coord_array_3__[2] += (__x_xpd__[0][0] * __y_xpd__[1][1]);
__tmp_coord_array_3__[3] += (__x_xpd__[0][0] * __y_xpd__[1][2]);
__tmp_coord_array_3__[4] += (__x_xpd__[0][0] * __y_xpd__[1][3]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_3__[0] += ((__x_xpd__[1][0] * __y_xpd__[1][0]) + (__x_xpd__[1][2] * __y_xpd__[1][2]) + (__x_xpd__[1][1] * __y_xpd__[1][1]) + (__x_xpd__[1][3] * __y_xpd__[1][3]));
__tmp_coord_array_3__[5] += ((__x_xpd__[1][0] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[1][0]));
__tmp_coord_array_3__[6] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][2]));
__tmp_coord_array_3__[7] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[1][1]) + (__x_xpd__[1][1] * __y_xpd__[1][2]));
__tmp_coord_array_3__[8] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][1]) + (__x_xpd__[1][1] * __y_xpd__[1][3]));
__tmp_coord_array_3__[9] += ((__x_xpd__[1][2] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][2]));
__tmp_coord_array_3__[10] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][3]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_3__[1] += ((__x_xpd__[2][1] * __y_xpd__[1][2]) + (__x_xpd__[2][5] * __y_xpd__[1][3]) + (__x_xpd__[2][0] * __y_xpd__[1][1]));
__tmp_coord_array_3__[2] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[1][0]) + (__x_xpd__[2][3] * __y_xpd__[1][3]) + (__x_xpd__[2][2] * __y_xpd__[1][2]));
__tmp_coord_array_3__[3] += ((__x_xpd__[2][4] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[1][0]));
__tmp_coord_array_3__[4] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[1][2]));
__tmp_coord_array_3__[11] += ((__x_xpd__[2][2] * __y_xpd__[1][3]) + (__x_xpd__[2][4] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[1][2]));
__tmp_coord_array_3__[12] += ((__x_xpd__[2][3] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][1]) + (__x_xpd__[2][0] * __y_xpd__[1][3]));
__tmp_coord_array_3__[13] += ((-1.0f * __x_xpd__[2][5] * __y_xpd__[1][2]) + (__x_xpd__[2][1] * __y_xpd__[1][3]) + (__x_xpd__[2][4] * __y_xpd__[1][0]));
__tmp_coord_array_3__[14] += ((__x_xpd__[2][0] * __y_xpd__[1][2]) + (__x_xpd__[2][2] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[1][1]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_3__[5] += ((__x_xpd__[3][3] * __y_xpd__[1][2]) + (__x_xpd__[3][1] * __y_xpd__[1][3]));
__tmp_coord_array_3__[6] += ((__x_xpd__[3][2] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[1][1]));
__tmp_coord_array_3__[7] += ((__x_xpd__[3][3] * __y_xpd__[1][0]) + (__x_xpd__[3][0] * __y_xpd__[1][3]));
__tmp_coord_array_3__[8] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[1][2]) + (__x_xpd__[3][1] * __y_xpd__[1][0]));
__tmp_coord_array_3__[9] += ((__x_xpd__[3][2] * __y_xpd__[1][0]) + (__x_xpd__[3][0] * __y_xpd__[1][1]));
__tmp_coord_array_3__[10] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[1][1]));
__tmp_coord_array_3__[15] += ((__x_xpd__[3][3] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[1][0]) + (__x_xpd__[3][2] * __y_xpd__[1][1]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_3__[11] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[1][0]);
__tmp_coord_array_3__[12] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[1][2]);
__tmp_coord_array_3__[13] += (__x_xpd__[4][0] * __y_xpd__[1][1]);
__tmp_coord_array_3__[14] += (__x_xpd__[4][0] * __y_xpd__[1][3]);

}

}
if (((y.m_gu & 4) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_3__[5] += (__x_xpd__[0][0] * __y_xpd__[2][0]);
__tmp_coord_array_3__[6] += (__x_xpd__[0][0] * __y_xpd__[2][1]);
__tmp_coord_array_3__[7] += (__x_xpd__[0][0] * __y_xpd__[2][2]);
__tmp_coord_array_3__[8] += (__x_xpd__[0][0] * __y_xpd__[2][3]);
__tmp_coord_array_3__[9] += (__x_xpd__[0][0] * __y_xpd__[2][4]);
__tmp_coord_array_3__[10] += (__x_xpd__[0][0] * __y_xpd__[2][5]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_3__[1] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][5]));
__tmp_coord_array_3__[2] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[2][3]) + (__x_xpd__[1][0] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][2]));
__tmp_coord_array_3__[3] += ((__x_xpd__[1][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][4]) + (__x_xpd__[1][0] * __y_xpd__[2][1]));
__tmp_coord_array_3__[4] += ((__x_xpd__[1][2] * __y_xpd__[2][4]) + (__x_xpd__[1][0] * __y_xpd__[2][5]) + (__x_xpd__[1][1] * __y_xpd__[2][3]));
__tmp_coord_array_3__[11] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[2][3]) + (__x_xpd__[1][1] * __y_xpd__[2][4]) + (__x_xpd__[1][3] * __y_xpd__[2][2]));
__tmp_coord_array_3__[12] += ((__x_xpd__[1][3] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][5]) + (__x_xpd__[1][0] * __y_xpd__[2][3]));
__tmp_coord_array_3__[13] += ((__x_xpd__[1][0] * __y_xpd__[2][4]) + (__x_xpd__[1][3] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][5]));
__tmp_coord_array_3__[14] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[2][1]) + (__x_xpd__[1][0] * __y_xpd__[2][2]) + (__x_xpd__[1][2] * __y_xpd__[2][0]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_3__[0] += ((-1.0f * __x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]));
__tmp_coord_array_3__[5] += ((-1.0f * __x_xpd__[2][5] * __y_xpd__[2][3]) + (__x_xpd__[2][2] * __y_xpd__[2][1]) + (__x_xpd__[2][3] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][2]));
__tmp_coord_array_3__[6] += ((__x_xpd__[2][4] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][0]) + (__x_xpd__[2][0] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[2][4]));
__tmp_coord_array_3__[7] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[2][4]) + (__x_xpd__[2][4] * __y_xpd__[2][3]) + (__x_xpd__[2][1] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][1]));
__tmp_coord_array_3__[8] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][2]) + (__x_xpd__[2][2] * __y_xpd__[2][4]) + (__x_xpd__[2][5] * __y_xpd__[2][0]));
__tmp_coord_array_3__[9] += ((__x_xpd__[2][5] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][3]) + (__x_xpd__[2][3] * __y_xpd__[2][2]));
__tmp_coord_array_3__[10] += ((-1.0f * __x_xpd__[2][4] * __y_xpd__[2][1]) + (__x_xpd__[2][0] * __y_xpd__[2][3]) + (__x_xpd__[2][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][0]));
__tmp_coord_array_3__[15] += ((__x_xpd__[2][0] * __y_xpd__[2][4]) + (__x_xpd__[2][4] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][1]) + (__x_xpd__[2][5] * __y_xpd__[2][2]) + (__x_xpd__[2][2] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][3]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_3__[1] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[2][2]));
__tmp_coord_array_3__[2] += ((__x_xpd__[3][3] * __y_xpd__[2][1]) + (__x_xpd__[3][1] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][4]));
__tmp_coord_array_3__[3] += ((-1.0f * __x_xpd__[3][3] * __y_xpd__[2][0]) + (__x_xpd__[3][0] * __y_xpd__[2][3]) + (__x_xpd__[3][2] * __y_xpd__[2][5]));
__tmp_coord_array_3__[4] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[2][1]));
__tmp_coord_array_3__[11] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[2][1]) + (__x_xpd__[3][2] * __y_xpd__[2][0]) + (__x_xpd__[3][3] * __y_xpd__[2][5]));
__tmp_coord_array_3__[12] += ((__x_xpd__[3][3] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[2][2]) + (__x_xpd__[3][0] * __y_xpd__[2][1]));
__tmp_coord_array_3__[13] += ((-1.0f * __x_xpd__[3][3] * __y_xpd__[2][3]) + (__x_xpd__[3][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][0]));
__tmp_coord_array_3__[14] += ((__x_xpd__[3][2] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[2][5]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_3__[5] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][4]);
__tmp_coord_array_3__[6] += (__x_xpd__[4][0] * __y_xpd__[2][3]);
__tmp_coord_array_3__[7] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][5]);
__tmp_coord_array_3__[8] += (__x_xpd__[4][0] * __y_xpd__[2][1]);
__tmp_coord_array_3__[9] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][0]);
__tmp_coord_array_3__[10] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[2][2]);

}

}
if (((y.m_gu & 8) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_3__[11] += (__x_xpd__[0][0] * __y_xpd__[3][0]);
__tmp_coord_array_3__[12] += (__x_xpd__[0][0] * __y_xpd__[3][1]);
__tmp_coord_array_3__[13] += (__x_xpd__[0][0] * __y_xpd__[3][2]);
__tmp_coord_array_3__[14] += (__x_xpd__[0][0] * __y_xpd__[3][3]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_3__[5] += ((__x_xpd__[1][3] * __y_xpd__[3][1]) + (__x_xpd__[1][2] * __y_xpd__[3][3]));
__tmp_coord_array_3__[6] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][3]) + (__x_xpd__[1][3] * __y_xpd__[3][2]));
__tmp_coord_array_3__[7] += ((__x_xpd__[1][0] * __y_xpd__[3][3]) + (__x_xpd__[1][3] * __y_xpd__[3][0]));
__tmp_coord_array_3__[8] += ((__x_xpd__[1][0] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][0]));
__tmp_coord_array_3__[9] += ((__x_xpd__[1][0] * __y_xpd__[3][2]) + (__x_xpd__[1][1] * __y_xpd__[3][0]));
__tmp_coord_array_3__[10] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[3][1]));
__tmp_coord_array_3__[15] += ((__x_xpd__[1][2] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[3][3]) + (__x_xpd__[1][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[3][2]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_3__[1] += ((-1.0f * __x_xpd__[2][2] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[3][1]));
__tmp_coord_array_3__[2] += ((__x_xpd__[2][1] * __y_xpd__[3][3]) + (__x_xpd__[2][5] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][0]));
__tmp_coord_array_3__[3] += ((__x_xpd__[2][3] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[3][3]) + (__x_xpd__[2][5] * __y_xpd__[3][2]));
__tmp_coord_array_3__[4] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[3][2]));
__tmp_coord_array_3__[11] += ((__x_xpd__[2][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[3][3]));
__tmp_coord_array_3__[12] += ((-1.0f * __x_xpd__[2][4] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[3][0]) + (__x_xpd__[2][2] * __y_xpd__[3][2]));
__tmp_coord_array_3__[13] += ((__x_xpd__[2][3] * __y_xpd__[3][3]) + (__x_xpd__[2][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][1]));
__tmp_coord_array_3__[14] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[3][2]) + (__x_xpd__[2][5] * __y_xpd__[3][0]) + (__x_xpd__[2][4] * __y_xpd__[3][1]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_3__[0] += ((-1.0f * __x_xpd__[3][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[3][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][3]));
__tmp_coord_array_3__[5] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[3][0]) + (__x_xpd__[3][0] * __y_xpd__[3][2]));
__tmp_coord_array_3__[6] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[3][1]) + (__x_xpd__[3][1] * __y_xpd__[3][0]));
__tmp_coord_array_3__[7] += ((__x_xpd__[3][2] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[3][2]));
__tmp_coord_array_3__[8] += ((-1.0f * __x_xpd__[3][2] * __y_xpd__[3][3]) + (__x_xpd__[3][3] * __y_xpd__[3][2]));
__tmp_coord_array_3__[9] += ((__x_xpd__[3][1] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][1]));
__tmp_coord_array_3__[10] += ((__x_xpd__[3][0] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][0]));

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_3__[1] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[3][0]);
__tmp_coord_array_3__[2] += (__x_xpd__[4][0] * __y_xpd__[3][2]);
__tmp_coord_array_3__[3] += (-1.0f * __x_xpd__[4][0] * __y_xpd__[3][1]);
__tmp_coord_array_3__[4] += (__x_xpd__[4][0] * __y_xpd__[3][3]);

}

}
if (((y.m_gu & 16) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_3__[15] += (__x_xpd__[0][0] * __y_xpd__[4][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_3__[11] += (__x_xpd__[1][0] * __y_xpd__[4][0]);
__tmp_coord_array_3__[12] += (__x_xpd__[1][2] * __y_xpd__[4][0]);
__tmp_coord_array_3__[13] += (-1.0f * __x_xpd__[1][1] * __y_xpd__[4][0]);
__tmp_coord_array_3__[14] += (-1.0f * __x_xpd__[1][3] * __y_xpd__[4][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_3__[5] += (-1.0f * __x_xpd__[2][4] * __y_xpd__[4][0]);
__tmp_coord_array_3__[6] += (__x_xpd__[2][3] * __y_xpd__[4][0]);
__tmp_coord_array_3__[7] += (-1.0f * __x_xpd__[2][5] * __y_xpd__[4][0]);
__tmp_coord_array_3__[8] += (__x_xpd__[2][1] * __y_xpd__[4][0]);
__tmp_coord_array_3__[9] += (-1.0f * __x_xpd__[2][0] * __y_xpd__[4][0]);
__tmp_coord_array_3__[10] += (-1.0f * __x_xpd__[2][2] * __y_xpd__[4][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_3__[1] += (__x_xpd__[3][0] * __y_xpd__[4][0]);
__tmp_coord_array_3__[2] += (-1.0f * __x_xpd__[3][2] * __y_xpd__[4][0]);
__tmp_coord_array_3__[3] += (__x_xpd__[3][1] * __y_xpd__[4][0]);
__tmp_coord_array_3__[4] += (-1.0f * __x_xpd__[3][3] * __y_xpd__[4][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_3__[0] += (__x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
__temp_var_1__ = mv_compress(__tmp_coord_array_3__);
return __temp_var_1__;
}
scalar scpEM(const mv& x, const mv& y) {
scalar __temp_var_1__;
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((y.m_gu & 1) != 0)) {
if (((x.m_gu & 1) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}

}
if (((y.m_gu & 2) != 0)) {
if (((x.m_gu & 2) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[1][3] * __y_xpd__[1][3]) + (__x_xpd__[1][1] * __y_xpd__[1][1]) + (__x_xpd__[1][0] * __y_xpd__[1][0]) + (__x_xpd__[1][2] * __y_xpd__[1][2]));

}

}
if (((y.m_gu & 4) != 0)) {
if (((x.m_gu & 4) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[2][0]));

}

}
if (((y.m_gu & 8) != 0)) {
if (((x.m_gu & 8) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[3][1]));

}

}
if (((y.m_gu & 16) != 0)) {
if (((x.m_gu & 16) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
return __temp_var_1__;
}
mv lcontEM(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_4__[16] ;
mv_zero(__tmp_coord_array_4__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((y.m_gu & 1) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_4__[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}

}
if (((y.m_gu & 2) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_4__[1] += (__y_xpd__[1][0] * __x_xpd__[0][0]);
__tmp_coord_array_4__[2] += (__y_xpd__[1][1] * __x_xpd__[0][0]);
__tmp_coord_array_4__[3] += (__y_xpd__[1][2] * __x_xpd__[0][0]);
__tmp_coord_array_4__[4] += (__y_xpd__[1][3] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_4__[0] += ((__x_xpd__[1][3] * __y_xpd__[1][3]) + (__x_xpd__[1][0] * __y_xpd__[1][0]) + (__x_xpd__[1][2] * __y_xpd__[1][2]) + (__x_xpd__[1][1] * __y_xpd__[1][1]));

}

}
if (((y.m_gu & 4) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_4__[5] += (__y_xpd__[2][0] * __x_xpd__[0][0]);
__tmp_coord_array_4__[6] += (__y_xpd__[2][1] * __x_xpd__[0][0]);
__tmp_coord_array_4__[7] += (__y_xpd__[2][2] * __x_xpd__[0][0]);
__tmp_coord_array_4__[8] += (__y_xpd__[2][3] * __x_xpd__[0][0]);
__tmp_coord_array_4__[9] += (__y_xpd__[2][4] * __x_xpd__[0][0]);
__tmp_coord_array_4__[10] += (__y_xpd__[2][5] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_4__[1] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][0]));
__tmp_coord_array_4__[2] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[2][2]) + (__x_xpd__[1][0] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][3]));
__tmp_coord_array_4__[3] += ((__x_xpd__[1][1] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[2][4]) + (__x_xpd__[1][0] * __y_xpd__[2][1]));
__tmp_coord_array_4__[4] += ((__x_xpd__[1][2] * __y_xpd__[2][4]) + (__x_xpd__[1][0] * __y_xpd__[2][5]) + (__x_xpd__[1][1] * __y_xpd__[2][3]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_4__[0] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[2][5]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[2][4]));

}

}
if (((y.m_gu & 8) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_4__[11] += (__y_xpd__[3][0] * __x_xpd__[0][0]);
__tmp_coord_array_4__[12] += (__y_xpd__[3][1] * __x_xpd__[0][0]);
__tmp_coord_array_4__[13] += (__y_xpd__[3][2] * __x_xpd__[0][0]);
__tmp_coord_array_4__[14] += (__y_xpd__[3][3] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_4__[5] += ((__x_xpd__[1][3] * __y_xpd__[3][1]) + (__x_xpd__[1][2] * __y_xpd__[3][3]));
__tmp_coord_array_4__[6] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][3]) + (__x_xpd__[1][3] * __y_xpd__[3][2]));
__tmp_coord_array_4__[7] += ((__x_xpd__[1][0] * __y_xpd__[3][3]) + (__x_xpd__[1][3] * __y_xpd__[3][0]));
__tmp_coord_array_4__[8] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[3][0]) + (__x_xpd__[1][0] * __y_xpd__[3][1]));
__tmp_coord_array_4__[9] += ((__x_xpd__[1][1] * __y_xpd__[3][0]) + (__x_xpd__[1][0] * __y_xpd__[3][2]));
__tmp_coord_array_4__[10] += ((-1.0f * __x_xpd__[1][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[3][2]));

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_4__[1] += ((-1.0f * __x_xpd__[2][3] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[2][2] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][2]));
__tmp_coord_array_4__[2] += ((__x_xpd__[2][5] * __y_xpd__[3][1]) + (__x_xpd__[2][1] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[2][4] * __y_xpd__[3][0]));
__tmp_coord_array_4__[3] += ((-1.0f * __x_xpd__[2][0] * __y_xpd__[3][3]) + (__x_xpd__[2][5] * __y_xpd__[3][2]) + (__x_xpd__[2][3] * __y_xpd__[3][0]));
__tmp_coord_array_4__[4] += ((-1.0f * __x_xpd__[2][2] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[3][2]) + (-1.0f * __x_xpd__[2][0] * __y_xpd__[3][1]));

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_4__[0] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[3][0]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[3][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[3][2] * __y_xpd__[3][2]));

}

}
if (((y.m_gu & 16) != 0)) {
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_4__[15] += (__y_xpd__[4][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_4__[11] += (__x_xpd__[1][0] * __y_xpd__[4][0]);
__tmp_coord_array_4__[12] += (__x_xpd__[1][2] * __y_xpd__[4][0]);
__tmp_coord_array_4__[13] += (-1.0f * __x_xpd__[1][1] * __y_xpd__[4][0]);
__tmp_coord_array_4__[14] += (-1.0f * __x_xpd__[1][3] * __y_xpd__[4][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_4__[5] += (-1.0f * __x_xpd__[2][4] * __y_xpd__[4][0]);
__tmp_coord_array_4__[6] += (__x_xpd__[2][3] * __y_xpd__[4][0]);
__tmp_coord_array_4__[7] += (-1.0f * __x_xpd__[2][5] * __y_xpd__[4][0]);
__tmp_coord_array_4__[8] += (__x_xpd__[2][1] * __y_xpd__[4][0]);
__tmp_coord_array_4__[9] += (-1.0f * __x_xpd__[2][0] * __y_xpd__[4][0]);
__tmp_coord_array_4__[10] += (-1.0f * __x_xpd__[2][2] * __y_xpd__[4][0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_4__[1] += (__x_xpd__[3][0] * __y_xpd__[4][0]);
__tmp_coord_array_4__[2] += (-1.0f * __x_xpd__[3][2] * __y_xpd__[4][0]);
__tmp_coord_array_4__[3] += (__x_xpd__[3][1] * __y_xpd__[4][0]);
__tmp_coord_array_4__[4] += (-1.0f * __x_xpd__[3][3] * __y_xpd__[4][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_4__[0] += (__x_xpd__[4][0] * __y_xpd__[4][0]);

}

}
__temp_var_1__ = mv_compress(__tmp_coord_array_4__);
return __temp_var_1__;
}
mv op(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_5__[16] ;
mv_zero(__tmp_coord_array_5__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
if (((x.m_gu & 1) != 0)) {
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_5__[0] += (__x_xpd__[0][0] * __y_xpd__[0][0]);

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_5__[1] += (__x_xpd__[0][0] * __y_xpd__[1][0]);
__tmp_coord_array_5__[2] += (__x_xpd__[0][0] * __y_xpd__[1][1]);
__tmp_coord_array_5__[3] += (__x_xpd__[0][0] * __y_xpd__[1][2]);
__tmp_coord_array_5__[4] += (__x_xpd__[0][0] * __y_xpd__[1][3]);

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_5__[5] += (__x_xpd__[0][0] * __y_xpd__[2][0]);
__tmp_coord_array_5__[6] += (__x_xpd__[0][0] * __y_xpd__[2][1]);
__tmp_coord_array_5__[7] += (__x_xpd__[0][0] * __y_xpd__[2][2]);
__tmp_coord_array_5__[8] += (__x_xpd__[0][0] * __y_xpd__[2][3]);
__tmp_coord_array_5__[9] += (__x_xpd__[0][0] * __y_xpd__[2][4]);
__tmp_coord_array_5__[10] += (__x_xpd__[0][0] * __y_xpd__[2][5]);

}
if (((y.m_gu & 8) != 0)) {
__tmp_coord_array_5__[11] += (__x_xpd__[0][0] * __y_xpd__[3][0]);
__tmp_coord_array_5__[12] += (__x_xpd__[0][0] * __y_xpd__[3][1]);
__tmp_coord_array_5__[13] += (__x_xpd__[0][0] * __y_xpd__[3][2]);
__tmp_coord_array_5__[14] += (__x_xpd__[0][0] * __y_xpd__[3][3]);

}
if (((y.m_gu & 16) != 0)) {
__tmp_coord_array_5__[15] += (__x_xpd__[0][0] * __y_xpd__[4][0]);

}

}
if (((x.m_gu & 2) != 0)) {
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_5__[1] += (__x_xpd__[1][0] * __y_xpd__[0][0]);
__tmp_coord_array_5__[2] += (__x_xpd__[1][1] * __y_xpd__[0][0]);
__tmp_coord_array_5__[3] += (__x_xpd__[1][2] * __y_xpd__[0][0]);
__tmp_coord_array_5__[4] += (__x_xpd__[1][3] * __y_xpd__[0][0]);

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_5__[5] += ((__x_xpd__[1][0] * __y_xpd__[1][1]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[1][0]));
__tmp_coord_array_5__[6] += ((-1.0f * __x_xpd__[1][2] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][2]));
__tmp_coord_array_5__[7] += ((__x_xpd__[1][1] * __y_xpd__[1][2]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[1][1]));
__tmp_coord_array_5__[8] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][1]) + (__x_xpd__[1][1] * __y_xpd__[1][3]));
__tmp_coord_array_5__[9] += ((__x_xpd__[1][2] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[1][2]));
__tmp_coord_array_5__[10] += ((-1.0f * __x_xpd__[1][3] * __y_xpd__[1][0]) + (__x_xpd__[1][0] * __y_xpd__[1][3]));

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_5__[11] += ((__x_xpd__[1][1] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][3]) + (__x_xpd__[1][3] * __y_xpd__[2][2]));
__tmp_coord_array_5__[12] += ((__x_xpd__[1][3] * __y_xpd__[2][0]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][5]) + (__x_xpd__[1][0] * __y_xpd__[2][3]));
__tmp_coord_array_5__[13] += ((__x_xpd__[1][3] * __y_xpd__[2][1]) + (-1.0f * __x_xpd__[1][2] * __y_xpd__[2][5]) + (__x_xpd__[1][0] * __y_xpd__[2][4]));
__tmp_coord_array_5__[14] += ((__x_xpd__[1][0] * __y_xpd__[2][2]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[2][1]) + (__x_xpd__[1][2] * __y_xpd__[2][0]));

}
if (((y.m_gu & 8) != 0)) {
__tmp_coord_array_5__[15] += ((__x_xpd__[1][0] * __y_xpd__[3][0]) + (__x_xpd__[1][2] * __y_xpd__[3][1]) + (-1.0f * __x_xpd__[1][3] * __y_xpd__[3][3]) + (-1.0f * __x_xpd__[1][1] * __y_xpd__[3][2]));

}

}
if (((x.m_gu & 4) != 0)) {
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_5__[5] += (__x_xpd__[2][0] * __y_xpd__[0][0]);
__tmp_coord_array_5__[6] += (__x_xpd__[2][1] * __y_xpd__[0][0]);
__tmp_coord_array_5__[7] += (__x_xpd__[2][2] * __y_xpd__[0][0]);
__tmp_coord_array_5__[8] += (__x_xpd__[2][3] * __y_xpd__[0][0]);
__tmp_coord_array_5__[9] += (__x_xpd__[2][4] * __y_xpd__[0][0]);
__tmp_coord_array_5__[10] += (__x_xpd__[2][5] * __y_xpd__[0][0]);

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_5__[11] += ((__x_xpd__[2][2] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[1][2]) + (__x_xpd__[2][4] * __y_xpd__[1][1]));
__tmp_coord_array_5__[12] += ((__x_xpd__[2][0] * __y_xpd__[1][3]) + (__x_xpd__[2][3] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][1]));
__tmp_coord_array_5__[13] += ((__x_xpd__[2][1] * __y_xpd__[1][3]) + (__x_xpd__[2][4] * __y_xpd__[1][0]) + (-1.0f * __x_xpd__[2][5] * __y_xpd__[1][2]));
__tmp_coord_array_5__[14] += ((-1.0f * __x_xpd__[2][1] * __y_xpd__[1][1]) + (__x_xpd__[2][2] * __y_xpd__[1][0]) + (__x_xpd__[2][0] * __y_xpd__[1][2]));

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_5__[15] += ((__x_xpd__[2][2] * __y_xpd__[2][5]) + (__x_xpd__[2][4] * __y_xpd__[2][0]) + (__x_xpd__[2][5] * __y_xpd__[2][2]) + (__x_xpd__[2][0] * __y_xpd__[2][4]) + (-1.0f * __x_xpd__[2][1] * __y_xpd__[2][3]) + (-1.0f * __x_xpd__[2][3] * __y_xpd__[2][1]));

}

}
if (((x.m_gu & 8) != 0)) {
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_5__[11] += (__x_xpd__[3][0] * __y_xpd__[0][0]);
__tmp_coord_array_5__[12] += (__x_xpd__[3][1] * __y_xpd__[0][0]);
__tmp_coord_array_5__[13] += (__x_xpd__[3][2] * __y_xpd__[0][0]);
__tmp_coord_array_5__[14] += (__x_xpd__[3][3] * __y_xpd__[0][0]);

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_5__[15] += ((-1.0f * __x_xpd__[3][0] * __y_xpd__[1][0]) + (__x_xpd__[3][2] * __y_xpd__[1][1]) + (__x_xpd__[3][3] * __y_xpd__[1][3]) + (-1.0f * __x_xpd__[3][1] * __y_xpd__[1][2]));

}

}
if (((x.m_gu & 16) != 0)) {
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_5__[15] += (__x_xpd__[4][0] * __y_xpd__[0][0]);

}

}
__temp_var_1__ = mv_compress(__tmp_coord_array_5__);
return __temp_var_1__;
}
mv add(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_6__[16] ;
mv_zero(__tmp_coord_array_6__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_6__[0] += __y_xpd__[0][0];

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_6__[1] += __y_xpd__[1][0];
__tmp_coord_array_6__[2] += __y_xpd__[1][1];
__tmp_coord_array_6__[3] += __y_xpd__[1][2];
__tmp_coord_array_6__[4] += __y_xpd__[1][3];

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_6__[5] += __y_xpd__[2][0];
__tmp_coord_array_6__[6] += __y_xpd__[2][1];
__tmp_coord_array_6__[7] += __y_xpd__[2][2];
__tmp_coord_array_6__[8] += __y_xpd__[2][3];
__tmp_coord_array_6__[9] += __y_xpd__[2][4];
__tmp_coord_array_6__[10] += __y_xpd__[2][5];

}
if (((y.m_gu & 8) != 0)) {
__tmp_coord_array_6__[11] += __y_xpd__[3][0];
__tmp_coord_array_6__[12] += __y_xpd__[3][1];
__tmp_coord_array_6__[13] += __y_xpd__[3][2];
__tmp_coord_array_6__[14] += __y_xpd__[3][3];

}
if (((y.m_gu & 16) != 0)) {
__tmp_coord_array_6__[15] += __y_xpd__[4][0];

}
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_6__[0] += __x_xpd__[0][0];

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_6__[1] += __x_xpd__[1][0];
__tmp_coord_array_6__[2] += __x_xpd__[1][1];
__tmp_coord_array_6__[3] += __x_xpd__[1][2];
__tmp_coord_array_6__[4] += __x_xpd__[1][3];

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_6__[5] += __x_xpd__[2][0];
__tmp_coord_array_6__[6] += __x_xpd__[2][1];
__tmp_coord_array_6__[7] += __x_xpd__[2][2];
__tmp_coord_array_6__[8] += __x_xpd__[2][3];
__tmp_coord_array_6__[9] += __x_xpd__[2][4];
__tmp_coord_array_6__[10] += __x_xpd__[2][5];

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_6__[11] += __x_xpd__[3][0];
__tmp_coord_array_6__[12] += __x_xpd__[3][1];
__tmp_coord_array_6__[13] += __x_xpd__[3][2];
__tmp_coord_array_6__[14] += __x_xpd__[3][3];

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_6__[15] += __x_xpd__[4][0];

}
__temp_var_1__ = mv_compress(__tmp_coord_array_6__);
return __temp_var_1__;
}
mv subtract(const mv& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_7__[16] ;
mv_zero(__tmp_coord_array_7__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_7__[0] += __x_xpd__[0][0];

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_7__[1] += __x_xpd__[1][0];
__tmp_coord_array_7__[2] += __x_xpd__[1][1];
__tmp_coord_array_7__[3] += __x_xpd__[1][2];
__tmp_coord_array_7__[4] += __x_xpd__[1][3];

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_7__[5] += __x_xpd__[2][0];
__tmp_coord_array_7__[6] += __x_xpd__[2][1];
__tmp_coord_array_7__[7] += __x_xpd__[2][2];
__tmp_coord_array_7__[8] += __x_xpd__[2][3];
__tmp_coord_array_7__[9] += __x_xpd__[2][4];
__tmp_coord_array_7__[10] += __x_xpd__[2][5];

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_7__[11] += __x_xpd__[3][0];
__tmp_coord_array_7__[12] += __x_xpd__[3][1];
__tmp_coord_array_7__[13] += __x_xpd__[3][2];
__tmp_coord_array_7__[14] += __x_xpd__[3][3];

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_7__[15] += __x_xpd__[4][0];

}
if (((y.m_gu & 1) != 0)) {
__tmp_coord_array_7__[0] += (-1.0f * __y_xpd__[0][0]);

}
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_7__[1] += (-1.0f * __y_xpd__[1][0]);
__tmp_coord_array_7__[2] += (-1.0f * __y_xpd__[1][1]);
__tmp_coord_array_7__[3] += (-1.0f * __y_xpd__[1][2]);
__tmp_coord_array_7__[4] += (-1.0f * __y_xpd__[1][3]);

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_7__[5] += (-1.0f * __y_xpd__[2][0]);
__tmp_coord_array_7__[6] += (-1.0f * __y_xpd__[2][1]);
__tmp_coord_array_7__[7] += (-1.0f * __y_xpd__[2][2]);
__tmp_coord_array_7__[8] += (-1.0f * __y_xpd__[2][3]);
__tmp_coord_array_7__[9] += (-1.0f * __y_xpd__[2][4]);
__tmp_coord_array_7__[10] += (-1.0f * __y_xpd__[2][5]);

}
if (((y.m_gu & 8) != 0)) {
__tmp_coord_array_7__[11] += (-1.0f * __y_xpd__[3][0]);
__tmp_coord_array_7__[12] += (-1.0f * __y_xpd__[3][1]);
__tmp_coord_array_7__[13] += (-1.0f * __y_xpd__[3][2]);
__tmp_coord_array_7__[14] += (-1.0f * __y_xpd__[3][3]);

}
if (((y.m_gu & 16) != 0)) {
__tmp_coord_array_7__[15] += (-1.0f * __y_xpd__[4][0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_7__);
return __temp_var_1__;
}
scalar norm_e2(const mv& x) {
scalar __temp_var_1__;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[1][2] * __x_xpd__[1][2]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (__x_xpd__[1][3] * __x_xpd__[1][3]) + (__x_xpd__[1][0] * __x_xpd__[1][0]));

}
if (((x.m_gu & 4) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[2][1] * __x_xpd__[2][1]) + (__x_xpd__[2][0] * __x_xpd__[2][0]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][4] * __x_xpd__[2][4]) + (__x_xpd__[2][3] * __x_xpd__[2][3]));

}
if (((x.m_gu & 8) != 0)) {
__temp_var_1__.m_c[0] += ((__x_xpd__[3][3] * __x_xpd__[3][3]) + (__x_xpd__[3][1] * __x_xpd__[3][1]) + (__x_xpd__[3][2] * __x_xpd__[3][2]) + (__x_xpd__[3][0] * __x_xpd__[3][0]));

}
if (((x.m_gu & 16) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[4][0] * __x_xpd__[4][0]);

}
return __temp_var_1__;
}
scalar norm_e(const mv& x) {
scalar e2;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
e2.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
e2.m_c[0] += ((__x_xpd__[1][1] * __x_xpd__[1][1]) + (__x_xpd__[1][0] * __x_xpd__[1][0]) + (__x_xpd__[1][2] * __x_xpd__[1][2]) + (__x_xpd__[1][3] * __x_xpd__[1][3]));

}
if (((x.m_gu & 4) != 0)) {
e2.m_c[0] += ((__x_xpd__[2][1] * __x_xpd__[2][1]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][3] * __x_xpd__[2][3]) + (__x_xpd__[2][4] * __x_xpd__[2][4]) + (__x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][0] * __x_xpd__[2][0]));

}
if (((x.m_gu & 8) != 0)) {
e2.m_c[0] += ((__x_xpd__[3][3] * __x_xpd__[3][3]) + (__x_xpd__[3][1] * __x_xpd__[3][1]) + (__x_xpd__[3][2] * __x_xpd__[3][2]) + (__x_xpd__[3][0] * __x_xpd__[3][0]));

}
if (((x.m_gu & 16) != 0)) {
e2.m_c[0] += (__x_xpd__[4][0] * __x_xpd__[4][0]);

}
return scalar(scalar_scalar, sqrt(e2.m_c[0]));
}
mv unit_e(const mv& x) {
scalar e2;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
e2.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
e2.m_c[0] += ((__x_xpd__[1][3] * __x_xpd__[1][3]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (__x_xpd__[1][0] * __x_xpd__[1][0]) + (__x_xpd__[1][2] * __x_xpd__[1][2]));

}
if (((x.m_gu & 4) != 0)) {
e2.m_c[0] += ((__x_xpd__[2][0] * __x_xpd__[2][0]) + (__x_xpd__[2][4] * __x_xpd__[2][4]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][3] * __x_xpd__[2][3]) + (__x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][1] * __x_xpd__[2][1]));

}
if (((x.m_gu & 8) != 0)) {
e2.m_c[0] += ((__x_xpd__[3][0] * __x_xpd__[3][0]) + (__x_xpd__[3][3] * __x_xpd__[3][3]) + (__x_xpd__[3][2] * __x_xpd__[3][2]) + (__x_xpd__[3][1] * __x_xpd__[3][1]));

}
if (((x.m_gu & 16) != 0)) {
e2.m_c[0] += (__x_xpd__[4][0] * __x_xpd__[4][0]);

}
scalar ie;
ie.m_c[0] = ((char)1 / sqrt(e2.m_c[0]));
mv __temp_var_1__;
float __tmp_coord_array_8__[16] ;
mv_zero(__tmp_coord_array_8__, 16);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_8__[0] += (__x_xpd__[0][0] * ie.m_c[0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_8__[1] += (__x_xpd__[1][0] * ie.m_c[0]);
__tmp_coord_array_8__[2] += (__x_xpd__[1][1] * ie.m_c[0]);
__tmp_coord_array_8__[3] += (__x_xpd__[1][2] * ie.m_c[0]);
__tmp_coord_array_8__[4] += (__x_xpd__[1][3] * ie.m_c[0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_8__[5] += (__x_xpd__[2][0] * ie.m_c[0]);
__tmp_coord_array_8__[6] += (__x_xpd__[2][1] * ie.m_c[0]);
__tmp_coord_array_8__[7] += (__x_xpd__[2][2] * ie.m_c[0]);
__tmp_coord_array_8__[8] += (__x_xpd__[2][3] * ie.m_c[0]);
__tmp_coord_array_8__[9] += (__x_xpd__[2][4] * ie.m_c[0]);
__tmp_coord_array_8__[10] += (__x_xpd__[2][5] * ie.m_c[0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_8__[11] += (__x_xpd__[3][0] * ie.m_c[0]);
__tmp_coord_array_8__[12] += (__x_xpd__[3][1] * ie.m_c[0]);
__tmp_coord_array_8__[13] += (__x_xpd__[3][2] * ie.m_c[0]);
__tmp_coord_array_8__[14] += (__x_xpd__[3][3] * ie.m_c[0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_8__[15] += (__x_xpd__[4][0] * ie.m_c[0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_8__);
return __temp_var_1__;
}
scalar norm_r2(const mv& x) {
scalar __temp_var_1__;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__temp_var_1__.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[1][3] * __x_xpd__[1][0]) + (__x_xpd__[1][2] * __x_xpd__[1][2]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (-1.0f * __x_xpd__[1][0] * __x_xpd__[1][3]));

}
if (((x.m_gu & 4) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][3] * __x_xpd__[2][0]) + (__x_xpd__[2][4] * __x_xpd__[2][1]) + (__x_xpd__[2][0] * __x_xpd__[2][3]) + (__x_xpd__[2][1] * __x_xpd__[2][4]) + (__x_xpd__[2][2] * __x_xpd__[2][2]));

}
if (((x.m_gu & 8) != 0)) {
__temp_var_1__.m_c[0] += ((-1.0f * __x_xpd__[3][3] * __x_xpd__[3][0]) + (-1.0f * __x_xpd__[3][2] * __x_xpd__[3][2]) + (-1.0f * __x_xpd__[3][1] * __x_xpd__[3][1]) + (-1.0f * __x_xpd__[3][0] * __x_xpd__[3][3]));

}
if (((x.m_gu & 16) != 0)) {
__temp_var_1__.m_c[0] += (-1.0f * __x_xpd__[4][0] * __x_xpd__[4][0]);

}
return __temp_var_1__;
}
scalar norm_r(const mv& x) {
scalar r2;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
r2.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
r2.m_c[0] += ((-1.0f * __x_xpd__[1][3] * __x_xpd__[1][0]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (-1.0f * __x_xpd__[1][0] * __x_xpd__[1][3]) + (__x_xpd__[1][2] * __x_xpd__[1][2]));

}
if (((x.m_gu & 4) != 0)) {
r2.m_c[0] += ((__x_xpd__[2][3] * __x_xpd__[2][0]) + (__x_xpd__[2][4] * __x_xpd__[2][1]) + (-1.0f * __x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][0] * __x_xpd__[2][3]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][1] * __x_xpd__[2][4]));

}
if (((x.m_gu & 8) != 0)) {
r2.m_c[0] += ((-1.0f * __x_xpd__[3][0] * __x_xpd__[3][3]) + (-1.0f * __x_xpd__[3][1] * __x_xpd__[3][1]) + (-1.0f * __x_xpd__[3][3] * __x_xpd__[3][0]) + (-1.0f * __x_xpd__[3][2] * __x_xpd__[3][2]));

}
if (((x.m_gu & 16) != 0)) {
r2.m_c[0] += (-1.0f * __x_xpd__[4][0] * __x_xpd__[4][0]);

}
return scalar(scalar_scalar, ((((r2.m_c[0] < (char)0)) ? (char)-1 : ((((r2.m_c[0] > (char)0)) ? (char)1 : (char)0))) * sqrt((((r2.m_c[0] < (char)0)) ? ((-r2.m_c[0])) : (r2.m_c[0])))));
}
mv unit_r(const mv& x) {
scalar r2;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
r2.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
r2.m_c[0] += ((__x_xpd__[1][1] * __x_xpd__[1][1]) + (-1.0f * __x_xpd__[1][3] * __x_xpd__[1][0]) + (__x_xpd__[1][2] * __x_xpd__[1][2]) + (-1.0f * __x_xpd__[1][0] * __x_xpd__[1][3]));

}
if (((x.m_gu & 4) != 0)) {
r2.m_c[0] += ((-1.0f * __x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][3] * __x_xpd__[2][0]) + (__x_xpd__[2][1] * __x_xpd__[2][4]) + (__x_xpd__[2][0] * __x_xpd__[2][3]) + (__x_xpd__[2][4] * __x_xpd__[2][1]) + (__x_xpd__[2][2] * __x_xpd__[2][2]));

}
if (((x.m_gu & 8) != 0)) {
r2.m_c[0] += ((-1.0f * __x_xpd__[3][3] * __x_xpd__[3][0]) + (-1.0f * __x_xpd__[3][2] * __x_xpd__[3][2]) + (-1.0f * __x_xpd__[3][1] * __x_xpd__[3][1]) + (-1.0f * __x_xpd__[3][0] * __x_xpd__[3][3]));

}
if (((x.m_gu & 16) != 0)) {
r2.m_c[0] += (-1.0f * __x_xpd__[4][0] * __x_xpd__[4][0]);

}
scalar ir;
ir.m_c[0] = ((char)1 / sqrt((((r2.m_c[0] < (char)0)) ? ((-r2.m_c[0])) : (r2.m_c[0]))));
mv __temp_var_1__;
float __tmp_coord_array_9__[16] ;
mv_zero(__tmp_coord_array_9__, 16);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_9__[0] += (__x_xpd__[0][0] * ir.m_c[0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_9__[1] += (__x_xpd__[1][0] * ir.m_c[0]);
__tmp_coord_array_9__[2] += (__x_xpd__[1][1] * ir.m_c[0]);
__tmp_coord_array_9__[3] += (__x_xpd__[1][2] * ir.m_c[0]);
__tmp_coord_array_9__[4] += (__x_xpd__[1][3] * ir.m_c[0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_9__[5] += (__x_xpd__[2][0] * ir.m_c[0]);
__tmp_coord_array_9__[6] += (__x_xpd__[2][1] * ir.m_c[0]);
__tmp_coord_array_9__[7] += (__x_xpd__[2][2] * ir.m_c[0]);
__tmp_coord_array_9__[8] += (__x_xpd__[2][3] * ir.m_c[0]);
__tmp_coord_array_9__[9] += (__x_xpd__[2][4] * ir.m_c[0]);
__tmp_coord_array_9__[10] += (__x_xpd__[2][5] * ir.m_c[0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_9__[11] += (__x_xpd__[3][0] * ir.m_c[0]);
__tmp_coord_array_9__[12] += (__x_xpd__[3][1] * ir.m_c[0]);
__tmp_coord_array_9__[13] += (__x_xpd__[3][2] * ir.m_c[0]);
__tmp_coord_array_9__[14] += (__x_xpd__[3][3] * ir.m_c[0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_9__[15] += (__x_xpd__[4][0] * ir.m_c[0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_9__);
return __temp_var_1__;
}
mv reverse(const mv& x) {
mv __temp_var_1__;
float __tmp_coord_array_10__[16] ;
mv_zero(__tmp_coord_array_10__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_10__[0] += __x_xpd__[0][0];

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_10__[1] += __x_xpd__[1][0];
__tmp_coord_array_10__[2] += __x_xpd__[1][1];
__tmp_coord_array_10__[3] += __x_xpd__[1][2];
__tmp_coord_array_10__[4] += __x_xpd__[1][3];

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_10__[5] += (-1.0f * __x_xpd__[2][0]);
__tmp_coord_array_10__[6] += (-1.0f * __x_xpd__[2][1]);
__tmp_coord_array_10__[7] += (-1.0f * __x_xpd__[2][2]);
__tmp_coord_array_10__[8] += (-1.0f * __x_xpd__[2][3]);
__tmp_coord_array_10__[9] += (-1.0f * __x_xpd__[2][4]);
__tmp_coord_array_10__[10] += (-1.0f * __x_xpd__[2][5]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_10__[11] += (-1.0f * __x_xpd__[3][0]);
__tmp_coord_array_10__[12] += (-1.0f * __x_xpd__[3][1]);
__tmp_coord_array_10__[13] += (-1.0f * __x_xpd__[3][2]);
__tmp_coord_array_10__[14] += (-1.0f * __x_xpd__[3][3]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_10__[15] += __x_xpd__[4][0];

}
__temp_var_1__ = mv_compress(__tmp_coord_array_10__);
return __temp_var_1__;
}
mv negate(const mv& x) {
mv __temp_var_1__;
float __tmp_coord_array_11__[16] ;
mv_zero(__tmp_coord_array_11__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_11__[0] += (-1.0f * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_11__[1] += (-1.0f * __x_xpd__[1][0]);
__tmp_coord_array_11__[2] += (-1.0f * __x_xpd__[1][1]);
__tmp_coord_array_11__[3] += (-1.0f * __x_xpd__[1][2]);
__tmp_coord_array_11__[4] += (-1.0f * __x_xpd__[1][3]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_11__[5] += (-1.0f * __x_xpd__[2][0]);
__tmp_coord_array_11__[6] += (-1.0f * __x_xpd__[2][1]);
__tmp_coord_array_11__[7] += (-1.0f * __x_xpd__[2][2]);
__tmp_coord_array_11__[8] += (-1.0f * __x_xpd__[2][3]);
__tmp_coord_array_11__[9] += (-1.0f * __x_xpd__[2][4]);
__tmp_coord_array_11__[10] += (-1.0f * __x_xpd__[2][5]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_11__[11] += (-1.0f * __x_xpd__[3][0]);
__tmp_coord_array_11__[12] += (-1.0f * __x_xpd__[3][1]);
__tmp_coord_array_11__[13] += (-1.0f * __x_xpd__[3][2]);
__tmp_coord_array_11__[14] += (-1.0f * __x_xpd__[3][3]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_11__[15] += (-1.0f * __x_xpd__[4][0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_11__);
return __temp_var_1__;
}
mv dual(const mv& x) {
mv __temp_var_1__;
float __tmp_coord_array_12__[16] ;
mv_zero(__tmp_coord_array_12__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_12__[15] += (-1.0f * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_12__[11] += __x_xpd__[1][3];
__tmp_coord_array_12__[12] += (-1.0f * __x_xpd__[1][2]);
__tmp_coord_array_12__[13] += __x_xpd__[1][1];
__tmp_coord_array_12__[14] += (-1.0f * __x_xpd__[1][0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_12__[5] += __x_xpd__[2][1];
__tmp_coord_array_12__[6] += (-1.0f * __x_xpd__[2][0]);
__tmp_coord_array_12__[7] += (-1.0f * __x_xpd__[2][5]);
__tmp_coord_array_12__[8] += (-1.0f * __x_xpd__[2][4]);
__tmp_coord_array_12__[9] += __x_xpd__[2][3];
__tmp_coord_array_12__[10] += __x_xpd__[2][2];

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_12__[1] += __x_xpd__[3][3];
__tmp_coord_array_12__[2] += (-1.0f * __x_xpd__[3][2]);
__tmp_coord_array_12__[3] += __x_xpd__[3][1];
__tmp_coord_array_12__[4] += (-1.0f * __x_xpd__[3][0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_12__[0] += __x_xpd__[4][0];

}
__temp_var_1__ = mv_compress(__tmp_coord_array_12__);
return __temp_var_1__;
}
mv undual(const mv& x) {
mv __temp_var_1__;
float __tmp_coord_array_13__[16] ;
mv_zero(__tmp_coord_array_13__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_13__[15] += __x_xpd__[0][0];

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_13__[11] += (-1.0f * __x_xpd__[1][3]);
__tmp_coord_array_13__[12] += __x_xpd__[1][2];
__tmp_coord_array_13__[13] += (-1.0f * __x_xpd__[1][1]);
__tmp_coord_array_13__[14] += __x_xpd__[1][0];

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_13__[5] += (-1.0f * __x_xpd__[2][1]);
__tmp_coord_array_13__[6] += __x_xpd__[2][0];
__tmp_coord_array_13__[7] += __x_xpd__[2][5];
__tmp_coord_array_13__[8] += __x_xpd__[2][4];
__tmp_coord_array_13__[9] += (-1.0f * __x_xpd__[2][3]);
__tmp_coord_array_13__[10] += (-1.0f * __x_xpd__[2][2]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_13__[1] += (-1.0f * __x_xpd__[3][3]);
__tmp_coord_array_13__[2] += __x_xpd__[3][2];
__tmp_coord_array_13__[3] += (-1.0f * __x_xpd__[3][1]);
__tmp_coord_array_13__[4] += __x_xpd__[3][0];

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_13__[0] += (-1.0f * __x_xpd__[4][0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_13__);
return __temp_var_1__;
}
mv inverse(const mv& x) {
scalar n;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
n.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
n.m_c[0] += ((__x_xpd__[1][2] * __x_xpd__[1][2]) + (-1.0f * __x_xpd__[1][0] * __x_xpd__[1][3]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (-1.0f * __x_xpd__[1][3] * __x_xpd__[1][0]));

}
if (((x.m_gu & 4) != 0)) {
n.m_c[0] += ((__x_xpd__[2][0] * __x_xpd__[2][3]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][3] * __x_xpd__[2][0]) + (__x_xpd__[2][4] * __x_xpd__[2][1]) + (__x_xpd__[2][1] * __x_xpd__[2][4]) + (-1.0f * __x_xpd__[2][5] * __x_xpd__[2][5]));

}
if (((x.m_gu & 8) != 0)) {
n.m_c[0] += ((-1.0f * __x_xpd__[3][3] * __x_xpd__[3][0]) + (-1.0f * __x_xpd__[3][0] * __x_xpd__[3][3]) + (-1.0f * __x_xpd__[3][1] * __x_xpd__[3][1]) + (-1.0f * __x_xpd__[3][2] * __x_xpd__[3][2]));

}
if (((x.m_gu & 16) != 0)) {
n.m_c[0] += (-1.0f * __x_xpd__[4][0] * __x_xpd__[4][0]);

}
scalar in;
in.m_c[0] = ((char)1 / n.m_c[0]);
mv __temp_var_1__;
float __tmp_coord_array_14__[16] ;
mv_zero(__tmp_coord_array_14__, 16);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_14__[0] += (__x_xpd__[0][0] * in.m_c[0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_14__[1] += (__x_xpd__[1][0] * in.m_c[0]);
__tmp_coord_array_14__[2] += (__x_xpd__[1][1] * in.m_c[0]);
__tmp_coord_array_14__[3] += (__x_xpd__[1][2] * in.m_c[0]);
__tmp_coord_array_14__[4] += (__x_xpd__[1][3] * in.m_c[0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_14__[5] += (-1.0f * __x_xpd__[2][0] * in.m_c[0]);
__tmp_coord_array_14__[6] += (-1.0f * __x_xpd__[2][1] * in.m_c[0]);
__tmp_coord_array_14__[7] += (-1.0f * __x_xpd__[2][2] * in.m_c[0]);
__tmp_coord_array_14__[8] += (-1.0f * __x_xpd__[2][3] * in.m_c[0]);
__tmp_coord_array_14__[9] += (-1.0f * __x_xpd__[2][4] * in.m_c[0]);
__tmp_coord_array_14__[10] += (-1.0f * __x_xpd__[2][5] * in.m_c[0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_14__[11] += (-1.0f * __x_xpd__[3][0] * in.m_c[0]);
__tmp_coord_array_14__[12] += (-1.0f * __x_xpd__[3][1] * in.m_c[0]);
__tmp_coord_array_14__[13] += (-1.0f * __x_xpd__[3][2] * in.m_c[0]);
__tmp_coord_array_14__[14] += (-1.0f * __x_xpd__[3][3] * in.m_c[0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_14__[15] += (__x_xpd__[4][0] * in.m_c[0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_14__);
return __temp_var_1__;
}
mv inverseEM(const mv& x) {
scalar n;
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
n.m_c[0] += (__x_xpd__[0][0] * __x_xpd__[0][0]);

}
if (((x.m_gu & 2) != 0)) {
n.m_c[0] += ((__x_xpd__[1][2] * __x_xpd__[1][2]) + (__x_xpd__[1][1] * __x_xpd__[1][1]) + (__x_xpd__[1][3] * __x_xpd__[1][3]) + (__x_xpd__[1][0] * __x_xpd__[1][0]));

}
if (((x.m_gu & 4) != 0)) {
n.m_c[0] += ((__x_xpd__[2][3] * __x_xpd__[2][3]) + (__x_xpd__[2][4] * __x_xpd__[2][4]) + (__x_xpd__[2][1] * __x_xpd__[2][1]) + (__x_xpd__[2][2] * __x_xpd__[2][2]) + (__x_xpd__[2][5] * __x_xpd__[2][5]) + (__x_xpd__[2][0] * __x_xpd__[2][0]));

}
if (((x.m_gu & 8) != 0)) {
n.m_c[0] += ((__x_xpd__[3][2] * __x_xpd__[3][2]) + (__x_xpd__[3][3] * __x_xpd__[3][3]) + (__x_xpd__[3][0] * __x_xpd__[3][0]) + (__x_xpd__[3][1] * __x_xpd__[3][1]));

}
if (((x.m_gu & 16) != 0)) {
n.m_c[0] += (__x_xpd__[4][0] * __x_xpd__[4][0]);

}
scalar in;
in.m_c[0] = ((char)1 / n.m_c[0]);
mv __temp_var_1__;
float __tmp_coord_array_15__[16] ;
mv_zero(__tmp_coord_array_15__, 16);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_15__[0] += (__x_xpd__[0][0] * in.m_c[0]);

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_15__[1] += (__x_xpd__[1][0] * in.m_c[0]);
__tmp_coord_array_15__[2] += (__x_xpd__[1][1] * in.m_c[0]);
__tmp_coord_array_15__[3] += (__x_xpd__[1][2] * in.m_c[0]);
__tmp_coord_array_15__[4] += (__x_xpd__[1][3] * in.m_c[0]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_15__[5] += (-1.0f * __x_xpd__[2][0] * in.m_c[0]);
__tmp_coord_array_15__[6] += (-1.0f * __x_xpd__[2][1] * in.m_c[0]);
__tmp_coord_array_15__[7] += (-1.0f * __x_xpd__[2][2] * in.m_c[0]);
__tmp_coord_array_15__[8] += (-1.0f * __x_xpd__[2][3] * in.m_c[0]);
__tmp_coord_array_15__[9] += (-1.0f * __x_xpd__[2][4] * in.m_c[0]);
__tmp_coord_array_15__[10] += (-1.0f * __x_xpd__[2][5] * in.m_c[0]);

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_15__[11] += (-1.0f * __x_xpd__[3][0] * in.m_c[0]);
__tmp_coord_array_15__[12] += (-1.0f * __x_xpd__[3][1] * in.m_c[0]);
__tmp_coord_array_15__[13] += (-1.0f * __x_xpd__[3][2] * in.m_c[0]);
__tmp_coord_array_15__[14] += (-1.0f * __x_xpd__[3][3] * in.m_c[0]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_15__[15] += (__x_xpd__[4][0] * in.m_c[0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_15__);
return __temp_var_1__;
}
mv __temp_var_1__;
float __tmp_coord_array_16__[16] ;
mv_zero(__tmp_coord_array_16__, 16);
const float* __x_xpd__[5] ;
x.expand(__x_xpd__, true);
if (((x.m_gu & 1) != 0)) {
__tmp_coord_array_16__[0] += __x_xpd__[0][0];

}
if (((x.m_gu & 2) != 0)) {
__tmp_coord_array_16__[1] += (-1.0f * __x_xpd__[1][0]);
__tmp_coord_array_16__[2] += (-1.0f * __x_xpd__[1][1]);
__tmp_coord_array_16__[3] += (-1.0f * __x_xpd__[1][2]);
__tmp_coord_array_16__[4] += (-1.0f * __x_xpd__[1][3]);

}
if (((x.m_gu & 4) != 0)) {
__tmp_coord_array_16__[5] += __x_xpd__[2][0];
__tmp_coord_array_16__[6] += __x_xpd__[2][1];
__tmp_coord_array_16__[7] += __x_xpd__[2][2];
__tmp_coord_array_16__[8] += __x_xpd__[2][3];
__tmp_coord_array_16__[9] += __x_xpd__[2][4];
__tmp_coord_array_16__[10] += __x_xpd__[2][5];

}
if (((x.m_gu & 8) != 0)) {
__tmp_coord_array_16__[11] += (-1.0f * __x_xpd__[3][0]);
__tmp_coord_array_16__[12] += (-1.0f * __x_xpd__[3][1]);
__tmp_coord_array_16__[13] += (-1.0f * __x_xpd__[3][2]);
__tmp_coord_array_16__[14] += (-1.0f * __x_xpd__[3][3]);

}
if (((x.m_gu & 16) != 0)) {
__tmp_coord_array_16__[15] += __x_xpd__[4][0];

}
__temp_var_1__ = mv_compress(__tmp_coord_array_16__);
return __temp_var_1__;
}

// G2 functions:
mv apply_om(const om& x, const mv& y) {
mv __temp_var_1__;
float __tmp_coord_array_17__[16] ;
mv_zero(__tmp_coord_array_17__, 16);
const float* __y_xpd__[5] ;
y.expand(__y_xpd__, true);
if (((y.m_gu & 2) != 0)) {
__tmp_coord_array_17__[1] += ((x.m_c[1] * __y_xpd__[1][1]) + (x.m_c[0] * __y_xpd__[1][0]) + (x.m_c[3] * __y_xpd__[1][3]) + (x.m_c[2] * __y_xpd__[1][2]));
__tmp_coord_array_17__[2] += ((x.m_c[4] * __y_xpd__[1][0]) + (x.m_c[6] * __y_xpd__[1][2]) + (x.m_c[7] * __y_xpd__[1][3]) + (x.m_c[5] * __y_xpd__[1][1]));
__tmp_coord_array_17__[3] += ((x.m_c[8] * __y_xpd__[1][0]) + (x.m_c[10] * __y_xpd__[1][2]) + (x.m_c[9] * __y_xpd__[1][1]) + (x.m_c[11] * __y_xpd__[1][3]));
__tmp_coord_array_17__[4] += ((x.m_c[13] * __y_xpd__[1][1]) + (x.m_c[14] * __y_xpd__[1][2]) + (x.m_c[15] * __y_xpd__[1][3]) + (x.m_c[12] * __y_xpd__[1][0]));

}
if (((y.m_gu & 4) != 0)) {
__tmp_coord_array_17__[5] += ((x.m_c[17] * __y_xpd__[2][1]) + (x.m_c[18] * __y_xpd__[2][2]) + (x.m_c[21] * __y_xpd__[2][5]) + (x.m_c[16] * __y_xpd__[2][0]) + (x.m_c[19] * __y_xpd__[2][3]) + (x.m_c[20] * __y_xpd__[2][4]));
__tmp_coord_array_17__[6] += ((x.m_c[27] * __y_xpd__[2][5]) + (x.m_c[25] * __y_xpd__[2][3]) + (x.m_c[26] * __y_xpd__[2][4]) + (x.m_c[23] * __y_xpd__[2][1]) + (x.m_c[22] * __y_xpd__[2][0]) + (x.m_c[24] * __y_xpd__[2][2]));
__tmp_coord_array_17__[7] += ((x.m_c[32] * __y_xpd__[2][4]) + (x.m_c[29] * __y_xpd__[2][1]) + (x.m_c[33] * __y_xpd__[2][5]) + (x.m_c[30] * __y_xpd__[2][2]) + (x.m_c[31] * __y_xpd__[2][3]) + (x.m_c[28] * __y_xpd__[2][0]));
__tmp_coord_array_17__[8] += ((x.m_c[35] * __y_xpd__[2][1]) + (x.m_c[38] * __y_xpd__[2][4]) + (x.m_c[36] * __y_xpd__[2][2]) + (x.m_c[34] * __y_xpd__[2][0]) + (x.m_c[37] * __y_xpd__[2][3]) + (x.m_c[39] * __y_xpd__[2][5]));
__tmp_coord_array_17__[9] += ((x.m_c[42] * __y_xpd__[2][2]) + (x.m_c[43] * __y_xpd__[2][3]) + (x.m_c[40] * __y_xpd__[2][0]) + (x.m_c[44] * __y_xpd__[2][4]) + (x.m_c[45] * __y_xpd__[2][5]) + (x.m_c[41] * __y_xpd__[2][1]));
__tmp_coord_array_17__[10] += ((x.m_c[50] * __y_xpd__[2][4]) + (x.m_c[47] * __y_xpd__[2][1]) + (x.m_c[51] * __y_xpd__[2][5]) + (x.m_c[48] * __y_xpd__[2][2]) + (x.m_c[49] * __y_xpd__[2][3]) + (x.m_c[46] * __y_xpd__[2][0]));

}
if (((y.m_gu & 8) != 0)) {
__tmp_coord_array_17__[11] += ((x.m_c[55] * __y_xpd__[3][3]) + (x.m_c[53] * __y_xpd__[3][1]) + (x.m_c[52] * __y_xpd__[3][0]) + (x.m_c[54] * __y_xpd__[3][2]));
__tmp_coord_array_17__[12] += ((x.m_c[56] * __y_xpd__[3][0]) + (x.m_c[58] * __y_xpd__[3][2]) + (x.m_c[57] * __y_xpd__[3][1]) + (x.m_c[59] * __y_xpd__[3][3]));
__tmp_coord_array_17__[13] += ((x.m_c[63] * __y_xpd__[3][3]) + (x.m_c[62] * __y_xpd__[3][2]) + (x.m_c[61] * __y_xpd__[3][1]) + (x.m_c[60] * __y_xpd__[3][0]));
__tmp_coord_array_17__[14] += ((x.m_c[65] * __y_xpd__[3][1]) + (x.m_c[66] * __y_xpd__[3][2]) + (x.m_c[67] * __y_xpd__[3][3]) + (x.m_c[64] * __y_xpd__[3][0]));

}
if (((y.m_gu & 16) != 0)) {
__tmp_coord_array_17__[15] += (x.m_c[68] * __y_xpd__[4][0]);

}
__temp_var_1__ = mv_compress(__tmp_coord_array_17__);
return __temp_var_1__;
}
namespace __G2_GENERATED__ {
void set(om& __x__, const point& __image_of_no__, const point& __image_of_e1__, const point& __image_of_e2__, const point& __image_of_ni__) {
__x__.m_c[0] = __image_of_no__.m_c[0];
__x__.m_c[4] = __image_of_no__.m_c[1];
__x__.m_c[8] = __image_of_no__.m_c[2];
__x__.m_c[12] = __image_of_no__.m_c[3];
__x__.m_c[1] = __image_of_e1__.m_c[0];
__x__.m_c[5] = __image_of_e1__.m_c[1];
__x__.m_c[9] = __image_of_e1__.m_c[2];
__x__.m_c[13] = __image_of_e1__.m_c[3];
__x__.m_c[2] = __image_of_e2__.m_c[0];
__x__.m_c[6] = __image_of_e2__.m_c[1];
__x__.m_c[10] = __image_of_e2__.m_c[2];
__x__.m_c[14] = __image_of_e2__.m_c[3];
__x__.m_c[3] = __image_of_ni__.m_c[0];
__x__.m_c[7] = __image_of_ni__.m_c[1];
__x__.m_c[11] = __image_of_ni__.m_c[2];
__x__.m_c[15] = __image_of_ni__.m_c[3];
__x__.m_c[16] = ((-1.0f * __x__.m_c[1] * __x__.m_c[4]) + (__x__.m_c[5] * __x__.m_c[0]));
__x__.m_c[22] = ((__x__.m_c[9] * __x__.m_c[0]) + (-1.0f * __x__.m_c[1] * __x__.m_c[8]));
__x__.m_c[28] = ((__x__.m_c[9] * __x__.m_c[4]) + (-1.0f * __x__.m_c[5] * __x__.m_c[8]));
__x__.m_c[34] = ((__x__.m_c[13] * __x__.m_c[4]) + (-1.0f * __x__.m_c[5] * __x__.m_c[12]));
__x__.m_c[40] = ((__x__.m_c[13] * __x__.m_c[8]) + (-1.0f * __x__.m_c[9] * __x__.m_c[12]));
__x__.m_c[46] = ((__x__.m_c[13] * __x__.m_c[0]) + (-1.0f * __x__.m_c[1] * __x__.m_c[12]));
__x__.m_c[17] = ((-1.0f * __x__.m_c[2] * __x__.m_c[4]) + (__x__.m_c[6] * __x__.m_c[0]));
__x__.m_c[23] = ((-1.0f * __x__.m_c[2] * __x__.m_c[8]) + (__x__.m_c[10] * __x__.m_c[0]));
__x__.m_c[29] = ((-1.0f * __x__.m_c[6] * __x__.m_c[8]) + (__x__.m_c[10] * __x__.m_c[4]));
__x__.m_c[35] = ((-1.0f * __x__.m_c[6] * __x__.m_c[12]) + (__x__.m_c[14] * __x__.m_c[4]));
__x__.m_c[41] = ((__x__.m_c[14] * __x__.m_c[8]) + (-1.0f * __x__.m_c[10] * __x__.m_c[12]));
__x__.m_c[47] = ((__x__.m_c[14] * __x__.m_c[0]) + (-1.0f * __x__.m_c[2] * __x__.m_c[12]));
__x__.m_c[18] = ((-1.0f * __x__.m_c[2] * __x__.m_c[5]) + (__x__.m_c[6] * __x__.m_c[1]));
__x__.m_c[24] = ((__x__.m_c[10] * __x__.m_c[1]) + (-1.0f * __x__.m_c[2] * __x__.m_c[9]));
__x__.m_c[30] = ((-1.0f * __x__.m_c[6] * __x__.m_c[9]) + (__x__.m_c[10] * __x__.m_c[5]));
__x__.m_c[36] = ((-1.0f * __x__.m_c[6] * __x__.m_c[13]) + (__x__.m_c[14] * __x__.m_c[5]));
__x__.m_c[42] = ((-1.0f * __x__.m_c[10] * __x__.m_c[13]) + (__x__.m_c[14] * __x__.m_c[9]));
__x__.m_c[48] = ((-1.0f * __x__.m_c[2] * __x__.m_c[13]) + (__x__.m_c[14] * __x__.m_c[1]));
__x__.m_c[19] = ((-1.0f * __x__.m_c[3] * __x__.m_c[5]) + (__x__.m_c[7] * __x__.m_c[1]));
__x__.m_c[25] = ((__x__.m_c[11] * __x__.m_c[1]) + (-1.0f * __x__.m_c[3] * __x__.m_c[9]));
__x__.m_c[31] = ((__x__.m_c[11] * __x__.m_c[5]) + (-1.0f * __x__.m_c[7] * __x__.m_c[9]));
__x__.m_c[37] = ((-1.0f * __x__.m_c[7] * __x__.m_c[13]) + (__x__.m_c[15] * __x__.m_c[5]));
__x__.m_c[43] = ((__x__.m_c[15] * __x__.m_c[9]) + (-1.0f * __x__.m_c[11] * __x__.m_c[13]));
__x__.m_c[49] = ((-1.0f * __x__.m_c[3] * __x__.m_c[13]) + (__x__.m_c[15] * __x__.m_c[1]));
__x__.m_c[20] = ((-1.0f * __x__.m_c[3] * __x__.m_c[6]) + (__x__.m_c[7] * __x__.m_c[2]));
__x__.m_c[26] = ((-1.0f * __x__.m_c[3] * __x__.m_c[10]) + (__x__.m_c[11] * __x__.m_c[2]));
__x__.m_c[32] = ((-1.0f * __x__.m_c[7] * __x__.m_c[10]) + (__x__.m_c[11] * __x__.m_c[6]));
__x__.m_c[38] = ((-1.0f * __x__.m_c[7] * __x__.m_c[14]) + (__x__.m_c[15] * __x__.m_c[6]));
__x__.m_c[44] = ((-1.0f * __x__.m_c[11] * __x__.m_c[14]) + (__x__.m_c[15] * __x__.m_c[10]));
__x__.m_c[50] = ((-1.0f * __x__.m_c[3] * __x__.m_c[14]) + (__x__.m_c[15] * __x__.m_c[2]));
__x__.m_c[21] = ((__x__.m_c[7] * __x__.m_c[0]) + (-1.0f * __x__.m_c[3] * __x__.m_c[4]));
__x__.m_c[27] = ((-1.0f * __x__.m_c[3] * __x__.m_c[8]) + (__x__.m_c[11] * __x__.m_c[0]));
__x__.m_c[33] = ((__x__.m_c[11] * __x__.m_c[4]) + (-1.0f * __x__.m_c[7] * __x__.m_c[8]));
__x__.m_c[39] = ((__x__.m_c[15] * __x__.m_c[4]) + (-1.0f * __x__.m_c[7] * __x__.m_c[12]));
__x__.m_c[45] = ((-1.0f * __x__.m_c[11] * __x__.m_c[12]) + (__x__.m_c[15] * __x__.m_c[8]));
__x__.m_c[51] = ((-1.0f * __x__.m_c[3] * __x__.m_c[12]) + (__x__.m_c[15] * __x__.m_c[0]));
__x__.m_c[52] = ((-1.0f * __x__.m_c[38] * __x__.m_c[9]) + (__x__.m_c[32] * __x__.m_c[13]) + (__x__.m_c[44] * __x__.m_c[5]));
__x__.m_c[56] = ((-1.0f * __x__.m_c[50] * __x__.m_c[5]) + (__x__.m_c[38] * __x__.m_c[1]) + (__x__.m_c[20] * __x__.m_c[13]));
__x__.m_c[60] = ((__x__.m_c[44] * __x__.m_c[1]) + (-1.0f * __x__.m_c[50] * __x__.m_c[9]) + (__x__.m_c[26] * __x__.m_c[13]));
__x__.m_c[64] = ((__x__.m_c[20] * __x__.m_c[9]) + (-1.0f * __x__.m_c[26] * __x__.m_c[5]) + (__x__.m_c[32] * __x__.m_c[1]));
__x__.m_c[53] = ((-1.0f * __x__.m_c[45] * __x__.m_c[5]) + (__x__.m_c[39] * __x__.m_c[9]) + (-1.0f * __x__.m_c[33] * __x__.m_c[13]));
__x__.m_c[57] = ((-1.0f * __x__.m_c[39] * __x__.m_c[1]) + (-1.0f * __x__.m_c[21] * __x__.m_c[13]) + (__x__.m_c[51] * __x__.m_c[5]));
__x__.m_c[61] = ((-1.0f * __x__.m_c[27] * __x__.m_c[13]) + (-1.0f * __x__.m_c[45] * __x__.m_c[1]) + (__x__.m_c[51] * __x__.m_c[9]));
__x__.m_c[65] = ((-1.0f * __x__.m_c[33] * __x__.m_c[1]) + (__x__.m_c[27] * __x__.m_c[5]) + (-1.0f * __x__.m_c[21] * __x__.m_c[9]));
__x__.m_c[54] = ((-1.0f * __x__.m_c[33] * __x__.m_c[14]) + (__x__.m_c[39] * __x__.m_c[10]) + (-1.0f * __x__.m_c[45] * __x__.m_c[6]));
__x__.m_c[58] = ((-1.0f * __x__.m_c[39] * __x__.m_c[2]) + (-1.0f * __x__.m_c[21] * __x__.m_c[14]) + (__x__.m_c[51] * __x__.m_c[6]));
__x__.m_c[62] = ((__x__.m_c[51] * __x__.m_c[10]) + (-1.0f * __x__.m_c[27] * __x__.m_c[14]) + (-1.0f * __x__.m_c[45] * __x__.m_c[2]));
__x__.m_c[66] = ((-1.0f * __x__.m_c[33] * __x__.m_c[2]) + (-1.0f * __x__.m_c[21] * __x__.m_c[10]) + (__x__.m_c[27] * __x__.m_c[6]));
__x__.m_c[55] = ((__x__.m_c[42] * __x__.m_c[4]) + (-1.0f * __x__.m_c[36] * __x__.m_c[8]) + (__x__.m_c[30] * __x__.m_c[12]));
__x__.m_c[59] = ((__x__.m_c[18] * __x__.m_c[12]) + (-1.0f * __x__.m_c[48] * __x__.m_c[4]) + (__x__.m_c[36] * __x__.m_c[0]));
__x__.m_c[63] = ((-1.0f * __x__.m_c[48] * __x__.m_c[8]) + (__x__.m_c[24] * __x__.m_c[12]) + (__x__.m_c[42] * __x__.m_c[0]));
__x__.m_c[67] = ((__x__.m_c[18] * __x__.m_c[8]) + (-1.0f * __x__.m_c[24] * __x__.m_c[4]) + (__x__.m_c[30] * __x__.m_c[0]));
__x__.m_c[68] = ((__x__.m_c[67] * __x__.m_c[15]) + (-1.0f * __x__.m_c[59] * __x__.m_c[11]) + (-1.0f * __x__.m_c[55] * __x__.m_c[3]) + (__x__.m_c[63] * __x__.m_c[7]));
}
} /* end of namespace __G2_GENERATED__ */

// algebra / user constants:
__I2_ct__ I2;
__e1ni_ct__ e1ni;
__no_ct__ no;
__I4_ct__ I4;
__e2ni_ct__ e2ni;
__noni_ct__ noni;
__I4i_ct__ I4i;
__ni_ct__ ni;
__e1_ct__ e1;
__e2_ct__ e2;

char *string(const mv & obj, char *str, int maxLength, const char *fp /* = NULL */) {
int stdIdx = 0, l;
char tmpBuf[256], tmpFloatBuf[256];
int i, j, k = 0, bei, ia = 0, s = mv_size[obj.gu()], p = 0, cnt = 0;

// set up the floating point precision
if (fp == NULL) fp = mv_string_fp;

// start the string
l = sprintf(tmpBuf, "%s", mv_string_start);
if (stdIdx + l <= maxLength) {
strcpy(str + stdIdx, tmpBuf);
stdIdx += l;
}
else mv_throw_exception("Buffer supplied to string() is too small", MV_EXCEPTION_ERROR);

// print all coordinates
for (i = 0; i <= 4; i++) {
if (obj.gu() & (1 << i)) {
for (j = 0; j < mv_gradeSize[i]; j++) {
float coord = (float)mv_basisElementSignByIndex[ia] * obj.m_c[k];
/* goal: print [+|-]obj.m_c[k][* basisVector1 ^ ... ^ basisVectorN] */
sprintf(tmpFloatBuf, fp, fabs(coord));
if (atof(tmpFloatBuf) != 0.0) {
l = 0;

// print [+|-]
l += sprintf(tmpBuf + l, "%s", (coord >= 0.0)
? (cnt ? mv_string_plus : "")
: mv_string_minus);
// print obj.m_c[k]
l += sprintf(tmpBuf + l, tmpFloatBuf);

if (i) { // if not grade 0, print [* basisVector1 ^ ... ^ basisVectorN]
l += sprintf(tmpBuf + l, "%s", mv_string_mul);

// print all basis vectors
bei = 0;
while (mv_basisElements[ia][bei] >= 0) {
l += sprintf(tmpBuf + l, "%s%s", (bei) ? mv_string_wedge : "",
mv_basisVectorNames[mv_basisElements[ia][bei]]);
bei++;
}
}

//copy all to 'str'
if (stdIdx + l <= maxLength) {
strcpy(str + stdIdx, tmpBuf);
stdIdx += l;
}
else mv_throw_exception("Buffer supplied to string() is too small", MV_EXCEPTION_ERROR);
cnt++;
}
k++; ia++;
}
}
}

// if no coordinates printed: 0
l = 0;
if (cnt == 0) {
l += sprintf(tmpBuf + l, "0");
}

// end the string
l += sprintf(tmpBuf + l, "%s", mv_string_end);
if (stdIdx + l <= maxLength) {
strcpy(str + stdIdx, tmpBuf);
stdIdx += l;
}
else mv_throw_exception("Buffer supplied to string() is too small", MV_EXCEPTION_ERROR);

return str;
}

// this function should be deprecated (conflicts with C++ stdlib)
char *string(const mv & obj, const char *fp /* = NULL */) {
// not multithreading safe, but not fatal either.
static char str[2048];
return string(obj, str, 2047, fp);
}

char *c_str(const mv & obj, const char *fp /* = NULL */) {
return string(obj, fp);
}

std::string toString(const mv & obj, const char *fp /* = NULL */) {
std::string str;
const int SIZE = 2048;
str.resize(SIZE);
string(obj, &(str[0]), SIZE-1, fp);
str.resize(strlen(&(str[0])));
return str;
}

/** This function is not for external use. It compressed arrays of floats for storage in multivectors. */
void compress(const float *c, float *cc, int &cgu, float epsilon /*= 0.0*/, int gu /*= ...*/) {
int i, j, ia = 0, ib = 0, f, s;
cgu = 0;

for (i = 0; i <= 4; i++) {
// check if grade part has memory use:
if (!(gu & (1 << i))) continue;

// check if abs coordinates of grade part are all < epsilon
j = ia + s;
f = 0;
for (; ia < j; ia++)
if (mv_absLessThan(c[ia], epsilon)) {f = 1; break;}
ia = j;
if (f) {
mv_memcpy(cc + ib, c + ia - s, s);
ib += s;
cgu |= (1 << i);
}
}
}

mv mv_compress(const float *c, float epsilon/*= 0.0*/, int gu /*= ...*/) {
float cc[16];
int cgu;
compress(c, cc, cgu, epsilon, gu);
return mv(cgu, cc);
}

mv compress(const mv & arg1, float epsilon /*= 0.0*/) {
return mv_compress(arg1.m_c, epsilon, arg1.m_gu);
}

void mv::compress(float epsilon /*= 0.0*/) {
float cc[16];
int cgu;
c2ga::compress(m_c, cc, cgu, epsilon, m_gu);
set(cgu, cc);
}

mv mv_compress(int nbBlades, const unsigned int *bitmaps, const mv::Float *coords) {
// convert basis blade compression to regular coordinate array:
mv::Float A[16];
mv_zero(A, 16);

//  int gu = 0;
for (int i = 0; i < nbBlades; i++) {
A[mv_basisElementIndexByBitmap[bitmaps[i]]] = coords[i] * (mv::Float)mv_basisElementSignByBitmap[bitmaps[i]];
//  gu |= (1 << mv_basisElementGradeByBitmap[bitmaps[i]]);
}

return mv_compress(A); //, (mv::Float)0.0, gu);
}

/** This function is not for external use. It decompresses the coordinates stored in this */
void mv::expand(const Float *ptrs[], bool nulls /* = true */) const {
const Float *c(m_c);
const Float *null = (nulls) ? NULL : nullFloats();

if (m_gu & 1) {
ptrs[0] =  c;
c += 1;
}
else ptrs[0] = null;
if (m_gu & 2) {
ptrs[1] =  c;
c += 4;
}
else ptrs[1] = null;
if (m_gu & 4) {
ptrs[2] =  c;
c += 6;
}
else ptrs[2] = null;
if (m_gu & 8) {
ptrs[3] =  c;
c += 4;
}
else ptrs[3] = null;
if (m_gu & 16) {
ptrs[4] =  c;
c += 1;
}
else ptrs[4] = null;
}

void mvType::init(const mv &X, mv::Float epsilon) {
m_type = MULTIVECTOR;

// first of all determine grade usage & parity
mv cX = X;
cX.compress(epsilon);
int cnt[2] = {0,0}; // nb even, odd grade parts in use
{
int cntIdx = 0;
while (gu != 0) {
if ((gu & 1) != 0)
cnt[cntIdx & 1]++;
gu >>= 1;
cntIdx++;
}

if ((cnt[0] == 0) && (cnt[1] == 0)) {
// multivector = zero blade, case closed
m_zero = true;
m_parity = 0;
return;
}
else {
m_zero = false;
// if both even and odd grade parts in use: multivector
if ((cnt[0] != 0) && (cnt[1] != 0)) {
// X = multivector, case closed
m_parity = -1;
return;
}
else // more work to do, but parity is known:
// either a blade, or a versor, TBD below
m_parity = (cnt[1] != 0) ? 1 : 0;
}
}

// first test for versor:
bool useAlgebraMetric = true;
init(X, epsilon, useAlgebraMetric, cnt[0] + cnt[1]);

// Only if metric is not Euclidean:
// If it was not a versor, or blade using the algebra metric, then try again,
// at least, if only one grade part is in use:
if ((m_type == MULTIVECTOR) && ((cnt[0] + cnt[1]) == 1)) {
useAlgebraMetric = false;
init(X, epsilon, useAlgebraMetric, cnt[0] + cnt[1]);
}
}

void mvType::init(const mv &X, mv::Float epsilon, bool useAlgebraMetric, int guCnt) {
mv rX = reverse(X);

// test if null:
mv Sq = (useAlgebraMetric) ? scp(X, rX) : scpEM(X, rX);
Sq.compress(epsilon);
if (_Float(Sq) == 0) {
// X = multivector, case closed
m_type = MULTIVECTOR;
return;
}

// versor inverse must be true inverse:
mv Xvi = (useAlgebraMetric) ? inverse(X) : inverseEM(X);

// check if (Xgi Xvi) is a scalar:
mv XgiXvi = (useAlgebraMetric) ? gp(Xgi, Xvi) : gpEM(Xgi, Xvi);
{
mv tmp = XgiXvi;
tmp.compress(epsilon);
if (tmp.gu() != GRADE_0) { // if not scalar:
// X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}

// check if Xgi Xvi == Xvi Xgi
mv XviXgi = (useAlgebraMetric) ? gp(Xvi, Xgi) : gpEM(Xvi, Xgi);
{
mv tmp = XviXgi - XgiXvi;
tmp.compress(epsilon); // this should result in 0
if (tmp.gu()) {
// if not:
// X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}

// check if grade preserving for all basis vectors:
{
{
// test no
mv tmp = (useAlgebraMetric) ? gp(gp(Xvi, no), Xgi) : gpEM(gpEM(Xvi, no), Xgi);
tmp.compress(epsilon);
if (tmp.gu() != GRADE_1) { // X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}
{
// test e1
mv tmp = (useAlgebraMetric) ? gp(gp(Xvi, e1), Xgi) : gpEM(gpEM(Xvi, e1), Xgi);
tmp.compress(epsilon);
if (tmp.gu() != GRADE_1) { // X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}
{
// test e2
mv tmp = (useAlgebraMetric) ? gp(gp(Xvi, e2), Xgi) : gpEM(gpEM(Xvi, e2), Xgi);
tmp.compress(epsilon);
if (tmp.gu() != GRADE_1) { // X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}
{
// test ni
mv tmp = (useAlgebraMetric) ? gp(gp(Xvi, ni), Xgi) : gpEM(gpEM(Xvi, ni), Xgi);
tmp.compress(epsilon);
if (tmp.gu() != GRADE_1) { // X = multivector, case closed
m_type = MULTIVECTOR;
return;
}
}
}

if (guCnt == 1) m_type = BLADE;
else m_type = VERSOR;
}

std::string mvType::toString() const {
char buf[1024];
(m_type == MULTIVECTOR) ? "multivector" : ((m_type == BLADE) ? "blade" : "versor"),
(m_parity < 0) ? "none" : ((m_parity == 0) ? "even" : "odd"));
return buf;
}

} // end of namespace c2ga
// post_cpp_include

``````