// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// generated with alias_gen_geometric_algebra (author Sarah Burns <mystical.unicat@gmail.com>)
// options: -p 3 -n 1 --binary meet outer_product --binary join regressive_product
#ifndef _ALIAS_CGA2D_H_
#define _ALIAS_CGA2D_H_
// 3 positive dimension(s)
// 1 negative dimension(s)
// 0 deginerate dimension(s)
// 4 total dimension(s)
// 5 total grade(s)
#define ALIAS_CGA2D_EMPTY(...)
#define ALIAS_CGA2D_UNPACK(...) __VA_ARGS__
#define ALIAS_CGA2D_CAT(X, ...) ALIAS_CGA2D_CAT0(X, ## __VA_ARGS__)
#define ALIAS_CGA2D_CAT0(X, ...) X ## __VA_ARGS__
#define ALIAS_CGA2D_CAT3(X, Y, ...) ALIAS_CGA2D_CAT30(X, Y, ## __VA_ARGS__)
#define ALIAS_CGA2D_CAT30(X, Y, ...) X ## Y ## __VA_ARGS__
#define ALIAS_CGA2D_OR(X, Y) ALIAS_CGA2D_CAT3(ALIAS_CGA2D_OR_, X, Y)
#define ALIAS_CGA2D_OR_00 0
#define ALIAS_CGA2D_OR_01 1
#define ALIAS_CGA2D_OR_10 1
#define ALIAS_CGA2D_OR_11 1
#define ALIAS_CGA2D_IFF(X) ALIAS_CGA2D_CAT(ALIAS_CGA2D_IFF_, X)
#define ALIAS_CGA2D_IFF_0(T, F) F
#define ALIAS_CGA2D_IFF_1(T, F) T
#define ALIAS_CGA2D_IF2(X, Y) ALIAS_CGA2D_CAT3(ALIAS_CGA2D_IF2_, X, Y)
#define ALIAS_CGA2D_IF(X) ALIAS_CGA2D_CAT(ALIAS_CGA2D_IF_, X)
#define ALIAS_CGA2D_IF_0(...) ALIAS_CGA2D_UNPACK
#define ALIAS_CGA2D_IF_1(...) __VA_ARGS__ ALIAS_CGA2D_EMPTY
#define ALIAS_CGA2D_IF2(X, Y) ALIAS_CGA2D_CAT3(ALIAS_CGA2D_IF2_, X, Y)
#define ALIAS_CGA2D_IF2_00(...) ALIAS_CGA2D_IF2_000
#define ALIAS_CGA2D_IF2_000(...) ALIAS_CGA2D_IF2_001
#define ALIAS_CGA2D_IF2_001(...) ALIAS_CGA2D_UNPACK
#define ALIAS_CGA2D_IF2_01(...) ALIAS_CGA2D_IF2_010
#define ALIAS_CGA2D_IF2_010(...) ALIAS_CGA2D_IF2_011
#define ALIAS_CGA2D_IF2_011(...) __VA_ARGS__ ALIAS_CGA2D_EMPTY
#define ALIAS_CGA2D_IF2_10(...) ALIAS_CGA2D_IF2_100
#define ALIAS_CGA2D_IF2_100(...) __VA_ARGS__ ALIAS_CGA2D_IF2_101
#define ALIAS_CGA2D_IF2_101(...) ALIAS_CGA2D_EMPTY
#define ALIAS_CGA2D_IF2_11(...) __VA_ARGS__ ALIAS_CGA2D_IF2_110
#define ALIAS_CGA2D_IF2_110(...) ALIAS_CGA2D_IF2_111
#define ALIAS_CGA2D_IF2_111(...) ALIAS_CGA2D_EMPTY
#define ALIAS_CGA2D_PROBE(...) ~,1
#define ALIAS_CGA2D_IS_PROBE(...) ALIAS_CGA2D_IS_PROBE0(__VA_ARGS__, 0, 0)
#define ALIAS_CGA2D_IS_PROBE0(X, Y, ...) Y
#define ALIAS_CGA2D_IS_ZERO(X) ALIAS_CGA2D_IFF(ALIAS_CGA2D_IS_PROBE(ALIAS_CGA2D_PROBE X))(ALIAS_CGA2D_IS_ZERO1, ALIAS_CGA2D_IS_ZERO2)(X)
#define ALIAS_CGA2D_IS_ZERO1(X) 0
#define ALIAS_CGA2D_IS_ZERO2(X) ALIAS_CGA2D_IS_PROBE(ALIAS_CGA2D_CAT(ALIAS_CGA2D_IS_ZERO3_, X)())
#define ALIAS_CGA2D_IS_ZERO3_0 ALIAS_CGA2D_PROBE
#define ALIAS_CGA2D_IS_NONZERO(X) ALIAS_CGA2D_IF(ALIAS_CGA2D_IS_ZERO(X))(0)(1)
#define ALIAS_CGA2D_NEG(X) ALIAS_CGA2D_IF(ALIAS_CGA2D_IS_ZERO(X))( 0 )( (-X) )
#define ALIAS_CGA2D_ADD(X, Y) ALIAS_CGA2D_IF2(ALIAS_CGA2D_IS_ZERO(X), ALIAS_CGA2D_IS_ZERO(Y))( 0 )(   Y  )( X )( X+Y )
#define ALIAS_CGA2D_SUB(X, Y) ALIAS_CGA2D_IF2(ALIAS_CGA2D_IS_ZERO(X), ALIAS_CGA2D_IS_ZERO(Y))( 0 )( (-Y) )( X )( X-Y )
#define ALIAS_CGA2D_ADD_MUL(X, Y) ALIAS_CGA2D_IF(ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_ZERO(X), ALIAS_CGA2D_IS_ZERO(Y)))( )( +(X*Y) )
#define ALIAS_CGA2D_SUB_MUL(X, Y) ALIAS_CGA2D_IF(ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_ZERO(X), ALIAS_CGA2D_IS_ZERO(Y)))( )( -(X*Y) )
// cayley table:
// one    e1     e2     e3     e4     e12    e13    e14    e23    e24    e34    e123   e124   e134   e234   e1234 
// e1     one    e12    e13    e14    e2     e3     e4     e123   e124   e134   e23    e24    e34    e1234  e234  
// e2     -e12   one    e23    e24    -e1    -e123  -e124  e3     e4     e234   -e13   -e14   -e1234 e34    -e134 
// e3     -e13   -e23   one    e34    e123   -e1    -e134  -e2    -e234  e4     e12    e1234  -e14   -e24   e124  
// e4     -e14   -e24   -e34   -one   e124   e134   e1     e234   e2     e3     -e1234 -e12   -e13   -e23   e123  
// e12    -e2    e1     e123   e124   -one   -e23   -e24   e13    e14    e1234  -e3    -e4    -e234  e134   -e34  
// e13    -e3    -e123  e1     e134   e23    -one   -e34   -e12   -e1234 e14    e2     e234   -e4    -e124  e24   
// e14    -e4    -e124  -e134  -e1    e24    e34    one    e1234  e12    e13    -e234  -e2    -e3    -e123  e23   
// e23    e123   -e3    e2     e234   -e13   e12    e1234  -one   -e34   e24    -e1    -e134  e124   -e4    -e14  
// e24    e124   -e4    -e234  -e2    -e14   -e1234 -e12   e34    one    e23    e134   e1     e123   -e3    -e13  
// e34    e134   e234   -e4    -e3    e1234  -e14   -e13   -e24   -e23   one    -e124  -e123  e1     e2     e12   
// e123   e23    -e13   e12    e1234  -e3    e2     e234   -e1    -e134  e124   -one   -e34   e24    -e14   -e4   
// e124   e24    -e14   -e1234 -e12   -e4    -e234  -e2    e134   e1     e123   e34    one    e23    -e13   -e3   
// e134   e34    e1234  -e14   -e13   e234   -e4    -e3    -e124  -e123  e1     -e24   -e23   one    e12    e2    
// e234   -e1234 e34    -e24   -e23   -e134  e124   e123   -e4    -e3    e2     e14    e13    -e12   one    -e1   
// e1234  -e234  e134   -e124  -e123  -e34   e24    e23    -e14   -e13   e12    e4     e3     -e2    e1     one   
typedef struct alias_cga2d_00000 { union { float _; }; } alias_cga2d_00000;
typedef struct alias_cga2d_10000 { union { float _; struct { float one; }; }; } alias_cga2d_10000, alias_cga2d_Scalar;
typedef struct alias_cga2d_01000 { union { float _; struct { float e1, e2, e3, e4; }; }; } alias_cga2d_01000, alias_cga2d_Vector, alias_cga2d_AntiTrivector;
typedef struct alias_cga2d_11000 { union { float _; struct { float one, e1, e2, e3, e4; }; }; } alias_cga2d_11000;
typedef struct alias_cga2d_00100 { union { float _; struct { float e12, e13, e14, e23, e24, e34; }; }; } alias_cga2d_00100, alias_cga2d_Bivector, alias_cga2d_AntiBivector;
typedef struct alias_cga2d_10100 { union { float _; struct { float one, e12, e13, e14, e23, e24, e34; }; }; } alias_cga2d_10100;
typedef struct alias_cga2d_01100 { union { float _; struct { float e1, e2, e3, e4, e12, e13, e14, e23, e24, e34; }; }; } alias_cga2d_01100;
typedef struct alias_cga2d_11100 { union { float _; struct { float one, e1, e2, e3, e4, e12, e13, e14, e23, e24, e34; }; }; } alias_cga2d_11100;
typedef struct alias_cga2d_00010 { union { float _; struct { float e123, e124, e134, e234; }; }; } alias_cga2d_00010, alias_cga2d_Trivector, alias_cga2d_AntiVector;
typedef struct alias_cga2d_10010 { union { float _; struct { float one, e123, e124, e134, e234; }; }; } alias_cga2d_10010;
typedef struct alias_cga2d_01010 { union { float _; struct { float e1, e2, e3, e4, e123, e124, e134, e234; }; }; } alias_cga2d_01010;
typedef struct alias_cga2d_11010 { union { float _; struct { float one, e1, e2, e3, e4, e123, e124, e134, e234; }; }; } alias_cga2d_11010;
typedef struct alias_cga2d_00110 { union { float _; struct { float e12, e13, e14, e23, e24, e34, e123, e124, e134, e234; }; }; } alias_cga2d_00110;
typedef struct alias_cga2d_10110 { union { float _; struct { float one, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234; }; }; } alias_cga2d_10110;
typedef struct alias_cga2d_01110 { union { float _; struct { float e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234; }; }; } alias_cga2d_01110;
typedef struct alias_cga2d_11110 { union { float _; struct { float one, e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234; }; }; } alias_cga2d_11110;
typedef struct alias_cga2d_00001 { union { float _; struct { float e1234; }; }; } alias_cga2d_00001, alias_cga2d_AntiScalar;
typedef struct alias_cga2d_10001 { union { float _; struct { float one, e1234; }; }; } alias_cga2d_10001;
typedef struct alias_cga2d_01001 { union { float _; struct { float e1, e2, e3, e4, e1234; }; }; } alias_cga2d_01001;
typedef struct alias_cga2d_11001 { union { float _; struct { float one, e1, e2, e3, e4, e1234; }; }; } alias_cga2d_11001;
typedef struct alias_cga2d_00101 { union { float _; struct { float e12, e13, e14, e23, e24, e34, e1234; }; }; } alias_cga2d_00101;
typedef struct alias_cga2d_10101 { union { float _; struct { float one, e12, e13, e14, e23, e24, e34, e1234; }; }; } alias_cga2d_10101;
typedef struct alias_cga2d_01101 { union { float _; struct { float e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e1234; }; }; } alias_cga2d_01101;
typedef struct alias_cga2d_11101 { union { float _; struct { float one, e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e1234; }; }; } alias_cga2d_11101;
typedef struct alias_cga2d_00011 { union { float _; struct { float e123, e124, e134, e234, e1234; }; }; } alias_cga2d_00011;
typedef struct alias_cga2d_10011 { union { float _; struct { float one, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_10011;
typedef struct alias_cga2d_01011 { union { float _; struct { float e1, e2, e3, e4, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_01011;
typedef struct alias_cga2d_11011 { union { float _; struct { float one, e1, e2, e3, e4, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_11011;
typedef struct alias_cga2d_00111 { union { float _; struct { float e12, e13, e14, e23, e24, e34, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_00111;
typedef struct alias_cga2d_10111 { union { float _; struct { float one, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_10111;
typedef struct alias_cga2d_01111 { union { float _; struct { float e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_01111;
typedef struct alias_cga2d_11111 { union { float _; struct { float one, e1, e2, e3, e4, e12, e13, e14, e23, e24, e34, e123, e124, e134, e234, e1234; }; }; } alias_cga2d_11111;
#define ALIAS_CGA2D_GRADE(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    ALIAS_CGA2D_IS_NONZERO(Xone) \
  , ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe1), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe2), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe3), ALIAS_CGA2D_IS_NONZERO(Xe4)))) \
  , ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe12), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe13), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe14), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe23), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe24), ALIAS_CGA2D_IS_NONZERO(Xe34)))))) \
  , ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe123), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe124), ALIAS_CGA2D_OR(ALIAS_CGA2D_IS_NONZERO(Xe134), ALIAS_CGA2D_IS_NONZERO(Xe234)))) \
  , ALIAS_CGA2D_IS_NONZERO(Xe1234) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_TYPE(X0,X1,X2,X3,X4) ALIAS_CGA2D_TYPE_(X0,X1,X2,X3,X4)
#define ALIAS_CGA2D_TYPE_(X0,X1,X2,X3,X4) alias_cga2d_ ## X0 ## X1 ## X2 ## X3 ## X4
#define ALIAS_CGA2D_UNARY(OP, X) ALIAS_CGA2D_UNARY0(OP, ALIAS_CGA2D_UNPACK X)
#define ALIAS_CGA2D_UNARY0(...) ALIAS_CGA2D_UNARY1(__VA_ARGS__)
#define ALIAS_CGA2D_UNARY1(OP, X0,X1,X2,X3,X4,X) ALIAS_CGA2D_UNARY2( \
    OP \
  , ALIAS_CGA2D_IF(X0)(_x.one)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e1)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e2)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e3)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e4)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e12)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e13)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e14)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e23)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e24)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e34)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e123)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e124)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e134)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e234)(0) \
  , ALIAS_CGA2D_IF(X4)(_x.e1234)(0) \
  , X0,X1,X2,X3,X4,X \
  )
#define ALIAS_CGA2D_UNARY2(OP, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234,X0,X1,X2,X3,X4,X) OP(ALIAS_CGA2D_UNARY3, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, X0,X1,X2,X3,X4,X)
#define ALIAS_CGA2D_UNARY3(Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X) ALIAS_CGA2D_GRADE(ALIAS_CGA2D_UNARY4, Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234, Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X)
#define ALIAS_CGA2D_UNARY4(Z0,Z1,Z2,Z3,Z4,Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X) (Z0,Z1,Z2,Z3,Z4, __extension__ ({ \
  ALIAS_CGA2D_TYPE(X0,X1,X2,X3,X4) _x = X; \
  (ALIAS_CGA2D_TYPE(Z0,Z1,Z2,Z3,Z4)) { \
    ._ = 0 \
    ALIAS_CGA2D_IF(Z0)(, .one = Zone)() \
    ALIAS_CGA2D_IF(Z1)(, .e1 = Ze1)() \
    ALIAS_CGA2D_IF(Z1)(, .e2 = Ze2)() \
    ALIAS_CGA2D_IF(Z1)(, .e3 = Ze3)() \
    ALIAS_CGA2D_IF(Z1)(, .e4 = Ze4)() \
    ALIAS_CGA2D_IF(Z2)(, .e12 = Ze12)() \
    ALIAS_CGA2D_IF(Z2)(, .e13 = Ze13)() \
    ALIAS_CGA2D_IF(Z2)(, .e14 = Ze14)() \
    ALIAS_CGA2D_IF(Z2)(, .e23 = Ze23)() \
    ALIAS_CGA2D_IF(Z2)(, .e24 = Ze24)() \
    ALIAS_CGA2D_IF(Z2)(, .e34 = Ze34)() \
    ALIAS_CGA2D_IF(Z3)(, .e123 = Ze123)() \
    ALIAS_CGA2D_IF(Z3)(, .e124 = Ze124)() \
    ALIAS_CGA2D_IF(Z3)(, .e134 = Ze134)() \
    ALIAS_CGA2D_IF(Z3)(, .e234 = Ze234)() \
    ALIAS_CGA2D_IF(Z4)(, .e1234 = Ze1234)() \
  }; \
}))
#define ALIAS_CGA2D_OP_GRADE_0(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xone \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_GRADE_1(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    0 \
  , Xe1 \
  , Xe2 \
  , Xe3 \
  , Xe4 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_GRADE_2(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe12 \
  , Xe13 \
  , Xe14 \
  , Xe23 \
  , Xe24 \
  , Xe34 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_GRADE_3(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe123 \
  , Xe124 \
  , Xe134 \
  , Xe234 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_GRADE_4(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe1234 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_NEGATE(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    ALIAS_CGA2D_NEG(Xone) \
  , ALIAS_CGA2D_NEG(Xe1) \
  , ALIAS_CGA2D_NEG(Xe2) \
  , ALIAS_CGA2D_NEG(Xe3) \
  , ALIAS_CGA2D_NEG(Xe4) \
  , ALIAS_CGA2D_NEG(Xe12) \
  , ALIAS_CGA2D_NEG(Xe13) \
  , ALIAS_CGA2D_NEG(Xe14) \
  , ALIAS_CGA2D_NEG(Xe23) \
  , ALIAS_CGA2D_NEG(Xe24) \
  , ALIAS_CGA2D_NEG(Xe34) \
  , ALIAS_CGA2D_NEG(Xe123) \
  , ALIAS_CGA2D_NEG(Xe124) \
  , ALIAS_CGA2D_NEG(Xe134) \
  , ALIAS_CGA2D_NEG(Xe234) \
  , ALIAS_CGA2D_NEG(Xe1234) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_DUAL(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xe1234 \
  , Xe234 \
  , ALIAS_CGA2D_NEG(Xe134) \
  , Xe124 \
  , Xe123 \
  , ALIAS_CGA2D_NEG(Xe34) \
  , Xe24 \
  , Xe23 \
  , ALIAS_CGA2D_NEG(Xe14) \
  , ALIAS_CGA2D_NEG(Xe13) \
  , Xe12 \
  , ALIAS_CGA2D_NEG(Xe4) \
  , ALIAS_CGA2D_NEG(Xe3) \
  , Xe2 \
  , ALIAS_CGA2D_NEG(Xe1) \
  , Xone \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_UNDUAL(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xe1234 \
  , ALIAS_CGA2D_NEG(Xe234) \
  , Xe134 \
  , ALIAS_CGA2D_NEG(Xe124) \
  , ALIAS_CGA2D_NEG(Xe123) \
  , Xe34 \
  , ALIAS_CGA2D_NEG(Xe24) \
  , ALIAS_CGA2D_NEG(Xe23) \
  , Xe14 \
  , Xe13 \
  , ALIAS_CGA2D_NEG(Xe12) \
  , Xe4 \
  , Xe3 \
  , ALIAS_CGA2D_NEG(Xe2) \
  , Xe1 \
  , Xone \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_REVERSE(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xone \
  , Xe1 \
  , Xe2 \
  , Xe3 \
  , Xe4 \
  , ALIAS_CGA2D_NEG(Xe12) \
  , ALIAS_CGA2D_NEG(Xe13) \
  , ALIAS_CGA2D_NEG(Xe14) \
  , ALIAS_CGA2D_NEG(Xe23) \
  , ALIAS_CGA2D_NEG(Xe24) \
  , ALIAS_CGA2D_NEG(Xe34) \
  , ALIAS_CGA2D_NEG(Xe123) \
  , ALIAS_CGA2D_NEG(Xe124) \
  , ALIAS_CGA2D_NEG(Xe134) \
  , ALIAS_CGA2D_NEG(Xe234) \
  , Xe1234 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_INVOLUTE(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xone \
  , ALIAS_CGA2D_NEG(Xe1) \
  , ALIAS_CGA2D_NEG(Xe2) \
  , ALIAS_CGA2D_NEG(Xe3) \
  , ALIAS_CGA2D_NEG(Xe4) \
  , Xe12 \
  , Xe13 \
  , Xe14 \
  , Xe23 \
  , Xe24 \
  , Xe34 \
  , ALIAS_CGA2D_NEG(Xe123) \
  , ALIAS_CGA2D_NEG(Xe124) \
  , ALIAS_CGA2D_NEG(Xe134) \
  , ALIAS_CGA2D_NEG(Xe234) \
  , Xe1234 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_CONJUGATE(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, ...) RETURN( \
    Xone \
  , ALIAS_CGA2D_NEG(Xe1) \
  , ALIAS_CGA2D_NEG(Xe2) \
  , ALIAS_CGA2D_NEG(Xe3) \
  , ALIAS_CGA2D_NEG(Xe4) \
  , ALIAS_CGA2D_NEG(Xe12) \
  , ALIAS_CGA2D_NEG(Xe13) \
  , ALIAS_CGA2D_NEG(Xe14) \
  , ALIAS_CGA2D_NEG(Xe23) \
  , ALIAS_CGA2D_NEG(Xe24) \
  , ALIAS_CGA2D_NEG(Xe34) \
  , Xe123 \
  , Xe124 \
  , Xe134 \
  , Xe234 \
  , Xe1234 \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_BINARY(OP, X, Y) ALIAS_CGA2D_BINARY0(OP, ALIAS_CGA2D_UNPACK X, ALIAS_CGA2D_UNPACK Y)
#define ALIAS_CGA2D_BINARY0(...) ALIAS_CGA2D_BINARY1(__VA_ARGS__)
#define ALIAS_CGA2D_BINARY1(OP, X0,X1,X2,X3,X4,X,Y0,Y1,Y2,Y3,Y4,Y) ALIAS_CGA2D_BINARY2( \
    OP \
  , ALIAS_CGA2D_IF(X0)(_x.one)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e1)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e2)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e3)(0) \
  , ALIAS_CGA2D_IF(X1)(_x.e4)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e12)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e13)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e14)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e23)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e24)(0) \
  , ALIAS_CGA2D_IF(X2)(_x.e34)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e123)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e124)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e134)(0) \
  , ALIAS_CGA2D_IF(X3)(_x.e234)(0) \
  , ALIAS_CGA2D_IF(X4)(_x.e1234)(0) \
  , ALIAS_CGA2D_IF(Y0)(_y.one)(0) \
  , ALIAS_CGA2D_IF(Y1)(_y.e1)(0) \
  , ALIAS_CGA2D_IF(Y1)(_y.e2)(0) \
  , ALIAS_CGA2D_IF(Y1)(_y.e3)(0) \
  , ALIAS_CGA2D_IF(Y1)(_y.e4)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e12)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e13)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e14)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e23)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e24)(0) \
  , ALIAS_CGA2D_IF(Y2)(_y.e34)(0) \
  , ALIAS_CGA2D_IF(Y3)(_y.e123)(0) \
  , ALIAS_CGA2D_IF(Y3)(_y.e124)(0) \
  , ALIAS_CGA2D_IF(Y3)(_y.e134)(0) \
  , ALIAS_CGA2D_IF(Y3)(_y.e234)(0) \
  , ALIAS_CGA2D_IF(Y4)(_y.e1234)(0) \
  , X0,X1,X2,X3,X4,X \
  , Y0,Y1,Y2,Y3,Y4,Y \
  )
#define ALIAS_CGA2D_BINARY2(OP, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234,Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) OP(ALIAS_CGA2D_BINARY3, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234,Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y)
#define ALIAS_CGA2D_BINARY3(Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) ALIAS_CGA2D_GRADE(ALIAS_CGA2D_BINARY4, Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234, Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y)
#define ALIAS_CGA2D_BINARY4(Z0,Z1,Z2,Z3,Z4,Zone,Ze1,Ze2,Ze3,Ze4,Ze12,Ze13,Ze14,Ze23,Ze24,Ze34,Ze123,Ze124,Ze134,Ze234,Ze1234,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) (Z0,Z1,Z2,Z3,Z4, __extension__ ({ \
  ALIAS_CGA2D_TYPE(X0,X1,X2,X3,X4) _x = X; \
  ALIAS_CGA2D_TYPE(Y0,Y1,Y2,Y3,Y4) _y = Y; \
  (ALIAS_CGA2D_TYPE(Z0,Z1,Z2,Z3,Z4)) { \
    ._ = 0 \
    ALIAS_CGA2D_IF(Z0)(, .one = Zone)() \
    ALIAS_CGA2D_IF(Z1)(, .e1 = Ze1)() \
    ALIAS_CGA2D_IF(Z1)(, .e2 = Ze2)() \
    ALIAS_CGA2D_IF(Z1)(, .e3 = Ze3)() \
    ALIAS_CGA2D_IF(Z1)(, .e4 = Ze4)() \
    ALIAS_CGA2D_IF(Z2)(, .e12 = Ze12)() \
    ALIAS_CGA2D_IF(Z2)(, .e13 = Ze13)() \
    ALIAS_CGA2D_IF(Z2)(, .e14 = Ze14)() \
    ALIAS_CGA2D_IF(Z2)(, .e23 = Ze23)() \
    ALIAS_CGA2D_IF(Z2)(, .e24 = Ze24)() \
    ALIAS_CGA2D_IF(Z2)(, .e34 = Ze34)() \
    ALIAS_CGA2D_IF(Z3)(, .e123 = Ze123)() \
    ALIAS_CGA2D_IF(Z3)(, .e124 = Ze124)() \
    ALIAS_CGA2D_IF(Z3)(, .e134 = Ze134)() \
    ALIAS_CGA2D_IF(Z3)(, .e234 = Ze234)() \
    ALIAS_CGA2D_IF(Z4)(, .e1234 = Ze1234)() \
  }; \
}))
#define ALIAS_CGA2D_OP_ADD(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    ALIAS_CGA2D_ADD(Xone, Yone) \
  , ALIAS_CGA2D_ADD(Xe1, Ye1) \
  , ALIAS_CGA2D_ADD(Xe2, Ye2) \
  , ALIAS_CGA2D_ADD(Xe3, Ye3) \
  , ALIAS_CGA2D_ADD(Xe4, Ye4) \
  , ALIAS_CGA2D_ADD(Xe12, Ye12) \
  , ALIAS_CGA2D_ADD(Xe13, Ye13) \
  , ALIAS_CGA2D_ADD(Xe14, Ye14) \
  , ALIAS_CGA2D_ADD(Xe23, Ye23) \
  , ALIAS_CGA2D_ADD(Xe24, Ye24) \
  , ALIAS_CGA2D_ADD(Xe34, Ye34) \
  , ALIAS_CGA2D_ADD(Xe123, Ye123) \
  , ALIAS_CGA2D_ADD(Xe124, Ye124) \
  , ALIAS_CGA2D_ADD(Xe134, Ye134) \
  , ALIAS_CGA2D_ADD(Xe234, Ye234) \
  , ALIAS_CGA2D_ADD(Xe1234, Ye1234) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_SUBTRACT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    ALIAS_CGA2D_SUB(Xone, Yone) \
  , ALIAS_CGA2D_SUB(Xe1, Ye1) \
  , ALIAS_CGA2D_SUB(Xe2, Ye2) \
  , ALIAS_CGA2D_SUB(Xe3, Ye3) \
  , ALIAS_CGA2D_SUB(Xe4, Ye4) \
  , ALIAS_CGA2D_SUB(Xe12, Ye12) \
  , ALIAS_CGA2D_SUB(Xe13, Ye13) \
  , ALIAS_CGA2D_SUB(Xe14, Ye14) \
  , ALIAS_CGA2D_SUB(Xe23, Ye23) \
  , ALIAS_CGA2D_SUB(Xe24, Ye24) \
  , ALIAS_CGA2D_SUB(Xe34, Ye34) \
  , ALIAS_CGA2D_SUB(Xe123, Ye123) \
  , ALIAS_CGA2D_SUB(Xe124, Ye124) \
  , ALIAS_CGA2D_SUB(Xe134, Ye134) \
  , ALIAS_CGA2D_SUB(Xe234, Ye234) \
  , ALIAS_CGA2D_SUB(Xe1234, Ye1234) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_GEOMETRIC_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 ALIAS_CGA2D_ADD_MUL(Xone,Yone) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1) ALIAS_CGA2D_ADD_MUL(Xe2,Ye2) ALIAS_CGA2D_ADD_MUL(Xe3,Ye3) ALIAS_CGA2D_SUB_MUL(Xe4,Ye4) ALIAS_CGA2D_SUB_MUL(Xe12,Ye12) ALIAS_CGA2D_SUB_MUL(Xe13,Ye13) ALIAS_CGA2D_ADD_MUL(Xe14,Ye14) ALIAS_CGA2D_SUB_MUL(Xe23,Ye23) ALIAS_CGA2D_ADD_MUL(Xe24,Ye24) ALIAS_CGA2D_ADD_MUL(Xe34,Ye34) ALIAS_CGA2D_SUB_MUL(Xe123,Ye123) ALIAS_CGA2D_ADD_MUL(Xe124,Ye124) ALIAS_CGA2D_ADD_MUL(Xe134,Ye134) ALIAS_CGA2D_ADD_MUL(Xe234,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1,Yone) ALIAS_CGA2D_SUB_MUL(Xe2,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye13) ALIAS_CGA2D_ADD_MUL(Xe4,Ye14) ALIAS_CGA2D_ADD_MUL(Xe12,Ye2) ALIAS_CGA2D_ADD_MUL(Xe13,Ye3) ALIAS_CGA2D_SUB_MUL(Xe14,Ye4) ALIAS_CGA2D_SUB_MUL(Xe23,Ye123) ALIAS_CGA2D_ADD_MUL(Xe24,Ye124) ALIAS_CGA2D_ADD_MUL(Xe34,Ye134) ALIAS_CGA2D_SUB_MUL(Xe123,Ye23) ALIAS_CGA2D_ADD_MUL(Xe124,Ye24) ALIAS_CGA2D_ADD_MUL(Xe134,Ye34) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye2) ALIAS_CGA2D_ADD_MUL(Xe1,Ye12) ALIAS_CGA2D_ADD_MUL(Xe2,Yone) ALIAS_CGA2D_SUB_MUL(Xe3,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye24) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1) ALIAS_CGA2D_ADD_MUL(Xe13,Ye123) ALIAS_CGA2D_SUB_MUL(Xe14,Ye124) ALIAS_CGA2D_ADD_MUL(Xe23,Ye3) ALIAS_CGA2D_SUB_MUL(Xe24,Ye4) ALIAS_CGA2D_ADD_MUL(Xe34,Ye234) ALIAS_CGA2D_ADD_MUL(Xe123,Ye13) ALIAS_CGA2D_SUB_MUL(Xe124,Ye14) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye34) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye134) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye3) ALIAS_CGA2D_ADD_MUL(Xe1,Ye13) ALIAS_CGA2D_ADD_MUL(Xe2,Ye23) ALIAS_CGA2D_ADD_MUL(Xe3,Yone) ALIAS_CGA2D_ADD_MUL(Xe4,Ye34) ALIAS_CGA2D_SUB_MUL(Xe12,Ye123) ALIAS_CGA2D_SUB_MUL(Xe13,Ye1) ALIAS_CGA2D_SUB_MUL(Xe14,Ye134) ALIAS_CGA2D_SUB_MUL(Xe23,Ye2) ALIAS_CGA2D_SUB_MUL(Xe24,Ye234) ALIAS_CGA2D_SUB_MUL(Xe34,Ye4) ALIAS_CGA2D_SUB_MUL(Xe123,Ye12) ALIAS_CGA2D_SUB_MUL(Xe124,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe134,Ye14) ALIAS_CGA2D_SUB_MUL(Xe234,Ye24) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye124) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1,Ye14) ALIAS_CGA2D_ADD_MUL(Xe2,Ye24) ALIAS_CGA2D_ADD_MUL(Xe3,Ye34) ALIAS_CGA2D_ADD_MUL(Xe4,Yone) ALIAS_CGA2D_SUB_MUL(Xe12,Ye124) ALIAS_CGA2D_SUB_MUL(Xe13,Ye134) ALIAS_CGA2D_SUB_MUL(Xe14,Ye1) ALIAS_CGA2D_SUB_MUL(Xe23,Ye234) ALIAS_CGA2D_SUB_MUL(Xe24,Ye2) ALIAS_CGA2D_SUB_MUL(Xe34,Ye3) ALIAS_CGA2D_SUB_MUL(Xe123,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye12) ALIAS_CGA2D_SUB_MUL(Xe134,Ye13) ALIAS_CGA2D_SUB_MUL(Xe234,Ye23) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye12) ALIAS_CGA2D_ADD_MUL(Xe1,Ye2) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1) ALIAS_CGA2D_ADD_MUL(Xe3,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye124) ALIAS_CGA2D_ADD_MUL(Xe12,Yone) ALIAS_CGA2D_SUB_MUL(Xe13,Ye23) ALIAS_CGA2D_ADD_MUL(Xe14,Ye24) ALIAS_CGA2D_ADD_MUL(Xe23,Ye13) ALIAS_CGA2D_SUB_MUL(Xe24,Ye14) ALIAS_CGA2D_ADD_MUL(Xe34,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe123,Ye3) ALIAS_CGA2D_SUB_MUL(Xe124,Ye4) ALIAS_CGA2D_ADD_MUL(Xe134,Ye234) ALIAS_CGA2D_SUB_MUL(Xe234,Ye134) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye34) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye13) ALIAS_CGA2D_ADD_MUL(Xe1,Ye3) ALIAS_CGA2D_SUB_MUL(Xe2,Ye123) ALIAS_CGA2D_SUB_MUL(Xe3,Ye1) ALIAS_CGA2D_SUB_MUL(Xe4,Ye134) ALIAS_CGA2D_ADD_MUL(Xe12,Ye23) ALIAS_CGA2D_ADD_MUL(Xe13,Yone) ALIAS_CGA2D_ADD_MUL(Xe14,Ye34) ALIAS_CGA2D_SUB_MUL(Xe23,Ye12) ALIAS_CGA2D_SUB_MUL(Xe24,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe34,Ye14) ALIAS_CGA2D_SUB_MUL(Xe123,Ye2) ALIAS_CGA2D_SUB_MUL(Xe124,Ye234) ALIAS_CGA2D_SUB_MUL(Xe134,Ye4) ALIAS_CGA2D_ADD_MUL(Xe234,Ye124) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye24) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye14) ALIAS_CGA2D_ADD_MUL(Xe1,Ye4) ALIAS_CGA2D_SUB_MUL(Xe2,Ye124) ALIAS_CGA2D_SUB_MUL(Xe3,Ye134) ALIAS_CGA2D_SUB_MUL(Xe4,Ye1) ALIAS_CGA2D_ADD_MUL(Xe12,Ye24) ALIAS_CGA2D_ADD_MUL(Xe13,Ye34) ALIAS_CGA2D_ADD_MUL(Xe14,Yone) ALIAS_CGA2D_SUB_MUL(Xe23,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe24,Ye12) ALIAS_CGA2D_SUB_MUL(Xe34,Ye13) ALIAS_CGA2D_SUB_MUL(Xe123,Ye234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye2) ALIAS_CGA2D_SUB_MUL(Xe134,Ye3) ALIAS_CGA2D_ADD_MUL(Xe234,Ye123) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye23) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye23) ALIAS_CGA2D_ADD_MUL(Xe1,Ye123) ALIAS_CGA2D_ADD_MUL(Xe2,Ye3) ALIAS_CGA2D_SUB_MUL(Xe3,Ye2) ALIAS_CGA2D_SUB_MUL(Xe4,Ye234) ALIAS_CGA2D_SUB_MUL(Xe12,Ye13) ALIAS_CGA2D_ADD_MUL(Xe13,Ye12) ALIAS_CGA2D_ADD_MUL(Xe14,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe23,Yone) ALIAS_CGA2D_ADD_MUL(Xe24,Ye34) ALIAS_CGA2D_SUB_MUL(Xe34,Ye24) ALIAS_CGA2D_ADD_MUL(Xe123,Ye1) ALIAS_CGA2D_ADD_MUL(Xe124,Ye134) ALIAS_CGA2D_SUB_MUL(Xe134,Ye124) ALIAS_CGA2D_SUB_MUL(Xe234,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye14) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye24) ALIAS_CGA2D_ADD_MUL(Xe1,Ye124) ALIAS_CGA2D_ADD_MUL(Xe2,Ye4) ALIAS_CGA2D_SUB_MUL(Xe3,Ye234) ALIAS_CGA2D_SUB_MUL(Xe4,Ye2) ALIAS_CGA2D_SUB_MUL(Xe12,Ye14) ALIAS_CGA2D_ADD_MUL(Xe13,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe14,Ye12) ALIAS_CGA2D_ADD_MUL(Xe23,Ye34) ALIAS_CGA2D_ADD_MUL(Xe24,Yone) ALIAS_CGA2D_SUB_MUL(Xe34,Ye23) ALIAS_CGA2D_ADD_MUL(Xe123,Ye134) ALIAS_CGA2D_ADD_MUL(Xe124,Ye1) ALIAS_CGA2D_SUB_MUL(Xe134,Ye123) ALIAS_CGA2D_SUB_MUL(Xe234,Ye3) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye13) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye34) ALIAS_CGA2D_ADD_MUL(Xe1,Ye134) ALIAS_CGA2D_ADD_MUL(Xe2,Ye234) ALIAS_CGA2D_ADD_MUL(Xe3,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye3) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe13,Ye14) ALIAS_CGA2D_ADD_MUL(Xe14,Ye13) ALIAS_CGA2D_SUB_MUL(Xe23,Ye24) ALIAS_CGA2D_ADD_MUL(Xe24,Ye23) ALIAS_CGA2D_ADD_MUL(Xe34,Yone) ALIAS_CGA2D_SUB_MUL(Xe123,Ye124) ALIAS_CGA2D_ADD_MUL(Xe124,Ye123) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1) ALIAS_CGA2D_ADD_MUL(Xe234,Ye2) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye12) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye123) ALIAS_CGA2D_ADD_MUL(Xe1,Ye23) ALIAS_CGA2D_SUB_MUL(Xe2,Ye13) ALIAS_CGA2D_ADD_MUL(Xe3,Ye12) ALIAS_CGA2D_ADD_MUL(Xe4,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe12,Ye3) ALIAS_CGA2D_SUB_MUL(Xe13,Ye2) ALIAS_CGA2D_SUB_MUL(Xe14,Ye234) ALIAS_CGA2D_ADD_MUL(Xe23,Ye1) ALIAS_CGA2D_ADD_MUL(Xe24,Ye134) ALIAS_CGA2D_SUB_MUL(Xe34,Ye124) ALIAS_CGA2D_ADD_MUL(Xe123,Yone) ALIAS_CGA2D_ADD_MUL(Xe124,Ye34) ALIAS_CGA2D_SUB_MUL(Xe134,Ye24) ALIAS_CGA2D_ADD_MUL(Xe234,Ye14) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye4) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye124) ALIAS_CGA2D_ADD_MUL(Xe1,Ye24) ALIAS_CGA2D_SUB_MUL(Xe2,Ye14) ALIAS_CGA2D_ADD_MUL(Xe3,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe4,Ye12) ALIAS_CGA2D_ADD_MUL(Xe12,Ye4) ALIAS_CGA2D_SUB_MUL(Xe13,Ye234) ALIAS_CGA2D_SUB_MUL(Xe14,Ye2) ALIAS_CGA2D_ADD_MUL(Xe23,Ye134) ALIAS_CGA2D_ADD_MUL(Xe24,Ye1) ALIAS_CGA2D_SUB_MUL(Xe34,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye34) ALIAS_CGA2D_ADD_MUL(Xe124,Yone) ALIAS_CGA2D_SUB_MUL(Xe134,Ye23) ALIAS_CGA2D_ADD_MUL(Xe234,Ye13) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye3) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye134) ALIAS_CGA2D_ADD_MUL(Xe1,Ye34) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe3,Ye14) ALIAS_CGA2D_ADD_MUL(Xe4,Ye13) ALIAS_CGA2D_ADD_MUL(Xe12,Ye234) ALIAS_CGA2D_ADD_MUL(Xe13,Ye4) ALIAS_CGA2D_SUB_MUL(Xe14,Ye3) ALIAS_CGA2D_SUB_MUL(Xe23,Ye124) ALIAS_CGA2D_ADD_MUL(Xe24,Ye123) ALIAS_CGA2D_ADD_MUL(Xe34,Ye1) ALIAS_CGA2D_SUB_MUL(Xe123,Ye24) ALIAS_CGA2D_ADD_MUL(Xe124,Ye23) ALIAS_CGA2D_ADD_MUL(Xe134,Yone) ALIAS_CGA2D_SUB_MUL(Xe234,Ye12) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye2) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe2,Ye34) ALIAS_CGA2D_SUB_MUL(Xe3,Ye24) ALIAS_CGA2D_ADD_MUL(Xe4,Ye23) ALIAS_CGA2D_SUB_MUL(Xe12,Ye134) ALIAS_CGA2D_ADD_MUL(Xe13,Ye124) ALIAS_CGA2D_SUB_MUL(Xe14,Ye123) ALIAS_CGA2D_ADD_MUL(Xe23,Ye4) ALIAS_CGA2D_SUB_MUL(Xe24,Ye3) ALIAS_CGA2D_ADD_MUL(Xe34,Ye2) ALIAS_CGA2D_ADD_MUL(Xe123,Ye14) ALIAS_CGA2D_SUB_MUL(Xe124,Ye13) ALIAS_CGA2D_ADD_MUL(Xe134,Ye12) ALIAS_CGA2D_ADD_MUL(Xe234,Yone) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye1) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1,Ye234) ALIAS_CGA2D_SUB_MUL(Xe2,Ye134) ALIAS_CGA2D_ADD_MUL(Xe3,Ye124) ALIAS_CGA2D_SUB_MUL(Xe4,Ye123) ALIAS_CGA2D_ADD_MUL(Xe12,Ye34) ALIAS_CGA2D_SUB_MUL(Xe13,Ye24) ALIAS_CGA2D_ADD_MUL(Xe14,Ye23) ALIAS_CGA2D_ADD_MUL(Xe23,Ye14) ALIAS_CGA2D_SUB_MUL(Xe24,Ye13) ALIAS_CGA2D_ADD_MUL(Xe34,Ye12) ALIAS_CGA2D_ADD_MUL(Xe123,Ye4) ALIAS_CGA2D_SUB_MUL(Xe124,Ye3) ALIAS_CGA2D_ADD_MUL(Xe134,Ye2) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1234,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_OUTER_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 ALIAS_CGA2D_ADD_MUL(Xone,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye2) ALIAS_CGA2D_ADD_MUL(Xe2,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye3) ALIAS_CGA2D_ADD_MUL(Xe3,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye4) ALIAS_CGA2D_ADD_MUL(Xe4,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye12) ALIAS_CGA2D_ADD_MUL(Xe1,Ye2) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1) ALIAS_CGA2D_ADD_MUL(Xe12,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye13) ALIAS_CGA2D_ADD_MUL(Xe1,Ye3) ALIAS_CGA2D_SUB_MUL(Xe3,Ye1) ALIAS_CGA2D_ADD_MUL(Xe13,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye14) ALIAS_CGA2D_ADD_MUL(Xe1,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye1) ALIAS_CGA2D_ADD_MUL(Xe14,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye23) ALIAS_CGA2D_ADD_MUL(Xe2,Ye3) ALIAS_CGA2D_SUB_MUL(Xe3,Ye2) ALIAS_CGA2D_ADD_MUL(Xe23,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye24) ALIAS_CGA2D_ADD_MUL(Xe2,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye2) ALIAS_CGA2D_ADD_MUL(Xe24,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye34) ALIAS_CGA2D_ADD_MUL(Xe3,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye3) ALIAS_CGA2D_ADD_MUL(Xe34,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye123) ALIAS_CGA2D_ADD_MUL(Xe1,Ye23) ALIAS_CGA2D_SUB_MUL(Xe2,Ye13) ALIAS_CGA2D_ADD_MUL(Xe3,Ye12) ALIAS_CGA2D_ADD_MUL(Xe12,Ye3) ALIAS_CGA2D_SUB_MUL(Xe13,Ye2) ALIAS_CGA2D_ADD_MUL(Xe23,Ye1) ALIAS_CGA2D_ADD_MUL(Xe123,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye124) ALIAS_CGA2D_ADD_MUL(Xe1,Ye24) ALIAS_CGA2D_SUB_MUL(Xe2,Ye14) ALIAS_CGA2D_ADD_MUL(Xe4,Ye12) ALIAS_CGA2D_ADD_MUL(Xe12,Ye4) ALIAS_CGA2D_SUB_MUL(Xe14,Ye2) ALIAS_CGA2D_ADD_MUL(Xe24,Ye1) ALIAS_CGA2D_ADD_MUL(Xe124,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye134) ALIAS_CGA2D_ADD_MUL(Xe1,Ye34) ALIAS_CGA2D_SUB_MUL(Xe3,Ye14) ALIAS_CGA2D_ADD_MUL(Xe4,Ye13) ALIAS_CGA2D_ADD_MUL(Xe13,Ye4) ALIAS_CGA2D_SUB_MUL(Xe14,Ye3) ALIAS_CGA2D_ADD_MUL(Xe34,Ye1) ALIAS_CGA2D_ADD_MUL(Xe134,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye234) ALIAS_CGA2D_ADD_MUL(Xe2,Ye34) ALIAS_CGA2D_SUB_MUL(Xe3,Ye24) ALIAS_CGA2D_ADD_MUL(Xe4,Ye23) ALIAS_CGA2D_ADD_MUL(Xe23,Ye4) ALIAS_CGA2D_SUB_MUL(Xe24,Ye3) ALIAS_CGA2D_ADD_MUL(Xe34,Ye2) ALIAS_CGA2D_ADD_MUL(Xe234,Yone) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1,Ye234) ALIAS_CGA2D_SUB_MUL(Xe2,Ye134) ALIAS_CGA2D_ADD_MUL(Xe3,Ye124) ALIAS_CGA2D_SUB_MUL(Xe4,Ye123) ALIAS_CGA2D_ADD_MUL(Xe12,Ye34) ALIAS_CGA2D_SUB_MUL(Xe13,Ye24) ALIAS_CGA2D_ADD_MUL(Xe14,Ye23) ALIAS_CGA2D_ADD_MUL(Xe23,Ye14) ALIAS_CGA2D_SUB_MUL(Xe24,Ye13) ALIAS_CGA2D_ADD_MUL(Xe34,Ye12) ALIAS_CGA2D_ADD_MUL(Xe123,Ye4) ALIAS_CGA2D_SUB_MUL(Xe124,Ye3) ALIAS_CGA2D_ADD_MUL(Xe134,Ye2) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1234,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_REGRESSIVE_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1,Ye234) ALIAS_CGA2D_SUB_MUL(Xe2,Ye134) ALIAS_CGA2D_SUB_MUL(Xe3,Ye124) ALIAS_CGA2D_SUB_MUL(Xe4,Ye123) ALIAS_CGA2D_SUB_MUL(Xe12,Ye34) ALIAS_CGA2D_SUB_MUL(Xe13,Ye24) ALIAS_CGA2D_SUB_MUL(Xe14,Ye23) ALIAS_CGA2D_SUB_MUL(Xe23,Ye14) ALIAS_CGA2D_SUB_MUL(Xe24,Ye13) ALIAS_CGA2D_SUB_MUL(Xe34,Ye12) ALIAS_CGA2D_SUB_MUL(Xe123,Ye4) ALIAS_CGA2D_SUB_MUL(Xe124,Ye3) ALIAS_CGA2D_SUB_MUL(Xe134,Ye2) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1234,Yone) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe1,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe12,Ye134) ALIAS_CGA2D_SUB_MUL(Xe13,Ye124) ALIAS_CGA2D_ADD_MUL(Xe14,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye14) ALIAS_CGA2D_SUB_MUL(Xe124,Ye13) ALIAS_CGA2D_ADD_MUL(Xe134,Ye12) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye1) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe2,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe12,Ye234) ALIAS_CGA2D_SUB_MUL(Xe23,Ye124) ALIAS_CGA2D_ADD_MUL(Xe24,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye24) ALIAS_CGA2D_SUB_MUL(Xe124,Ye23) ALIAS_CGA2D_ADD_MUL(Xe234,Ye12) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye2) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe3,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe13,Ye234) ALIAS_CGA2D_SUB_MUL(Xe23,Ye134) ALIAS_CGA2D_ADD_MUL(Xe34,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye34) ALIAS_CGA2D_SUB_MUL(Xe134,Ye23) ALIAS_CGA2D_ADD_MUL(Xe234,Ye13) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye3) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe4,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe14,Ye234) ALIAS_CGA2D_SUB_MUL(Xe24,Ye134) ALIAS_CGA2D_ADD_MUL(Xe34,Ye124) ALIAS_CGA2D_ADD_MUL(Xe124,Ye34) ALIAS_CGA2D_SUB_MUL(Xe134,Ye24) ALIAS_CGA2D_ADD_MUL(Xe234,Ye14) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye4) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe12,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe123,Ye124) ALIAS_CGA2D_ADD_MUL(Xe124,Ye123) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye12) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe13,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe123,Ye134) ALIAS_CGA2D_ADD_MUL(Xe134,Ye123) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye13) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe14,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye134) ALIAS_CGA2D_ADD_MUL(Xe134,Ye124) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye14) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe23,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe123,Ye234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye123) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye23) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe24,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye124) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye24) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe34,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe134,Ye234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye134) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye34) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe123,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye123) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe124,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye124) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe134,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye134) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe234,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1234,Ye1234) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_COMMUTATOR_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe2,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye13) ALIAS_CGA2D_ADD_MUL(Xe4,Ye14) ALIAS_CGA2D_ADD_MUL(Xe12,Ye2) ALIAS_CGA2D_ADD_MUL(Xe13,Ye3) ALIAS_CGA2D_SUB_MUL(Xe14,Ye4) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye24) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1) ALIAS_CGA2D_ADD_MUL(Xe23,Ye3) ALIAS_CGA2D_SUB_MUL(Xe24,Ye4) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye134) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye13) ALIAS_CGA2D_ADD_MUL(Xe2,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye34) ALIAS_CGA2D_SUB_MUL(Xe13,Ye1) ALIAS_CGA2D_SUB_MUL(Xe23,Ye2) ALIAS_CGA2D_SUB_MUL(Xe34,Ye4) ALIAS_CGA2D_SUB_MUL(Xe124,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye124) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye14) ALIAS_CGA2D_ADD_MUL(Xe2,Ye24) ALIAS_CGA2D_ADD_MUL(Xe3,Ye34) ALIAS_CGA2D_SUB_MUL(Xe14,Ye1) ALIAS_CGA2D_SUB_MUL(Xe24,Ye2) ALIAS_CGA2D_SUB_MUL(Xe34,Ye3) ALIAS_CGA2D_SUB_MUL(Xe123,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye2) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1) ALIAS_CGA2D_SUB_MUL(Xe13,Ye23) ALIAS_CGA2D_ADD_MUL(Xe14,Ye24) ALIAS_CGA2D_ADD_MUL(Xe23,Ye13) ALIAS_CGA2D_SUB_MUL(Xe24,Ye14) ALIAS_CGA2D_ADD_MUL(Xe134,Ye234) ALIAS_CGA2D_SUB_MUL(Xe234,Ye134) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye3) ALIAS_CGA2D_SUB_MUL(Xe3,Ye1) ALIAS_CGA2D_ADD_MUL(Xe12,Ye23) ALIAS_CGA2D_ADD_MUL(Xe14,Ye34) ALIAS_CGA2D_SUB_MUL(Xe23,Ye12) ALIAS_CGA2D_SUB_MUL(Xe34,Ye14) ALIAS_CGA2D_SUB_MUL(Xe124,Ye234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye124) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye1) ALIAS_CGA2D_ADD_MUL(Xe12,Ye24) ALIAS_CGA2D_ADD_MUL(Xe13,Ye34) ALIAS_CGA2D_SUB_MUL(Xe24,Ye12) ALIAS_CGA2D_SUB_MUL(Xe34,Ye13) ALIAS_CGA2D_SUB_MUL(Xe123,Ye234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe2,Ye3) ALIAS_CGA2D_SUB_MUL(Xe3,Ye2) ALIAS_CGA2D_SUB_MUL(Xe12,Ye13) ALIAS_CGA2D_ADD_MUL(Xe13,Ye12) ALIAS_CGA2D_ADD_MUL(Xe24,Ye34) ALIAS_CGA2D_SUB_MUL(Xe34,Ye24) ALIAS_CGA2D_ADD_MUL(Xe124,Ye134) ALIAS_CGA2D_SUB_MUL(Xe134,Ye124) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe2,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye2) ALIAS_CGA2D_SUB_MUL(Xe12,Ye14) ALIAS_CGA2D_ADD_MUL(Xe14,Ye12) ALIAS_CGA2D_ADD_MUL(Xe23,Ye34) ALIAS_CGA2D_SUB_MUL(Xe34,Ye23) ALIAS_CGA2D_ADD_MUL(Xe123,Ye134) ALIAS_CGA2D_SUB_MUL(Xe134,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe3,Ye4) ALIAS_CGA2D_SUB_MUL(Xe4,Ye3) ALIAS_CGA2D_SUB_MUL(Xe13,Ye14) ALIAS_CGA2D_ADD_MUL(Xe14,Ye13) ALIAS_CGA2D_SUB_MUL(Xe23,Ye24) ALIAS_CGA2D_ADD_MUL(Xe24,Ye23) ALIAS_CGA2D_SUB_MUL(Xe123,Ye124) ALIAS_CGA2D_ADD_MUL(Xe124,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe4,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe14,Ye234) ALIAS_CGA2D_ADD_MUL(Xe24,Ye134) ALIAS_CGA2D_SUB_MUL(Xe34,Ye124) ALIAS_CGA2D_ADD_MUL(Xe124,Ye34) ALIAS_CGA2D_SUB_MUL(Xe134,Ye24) ALIAS_CGA2D_ADD_MUL(Xe234,Ye14) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye4) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe3,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe13,Ye234) ALIAS_CGA2D_ADD_MUL(Xe23,Ye134) ALIAS_CGA2D_SUB_MUL(Xe34,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye34) ALIAS_CGA2D_SUB_MUL(Xe134,Ye23) ALIAS_CGA2D_ADD_MUL(Xe234,Ye13) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye3) \
  , 0 ALIAS_CGA2D_SUB_MUL(Xe2,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe12,Ye234) ALIAS_CGA2D_SUB_MUL(Xe23,Ye124) ALIAS_CGA2D_ADD_MUL(Xe24,Ye123) ALIAS_CGA2D_SUB_MUL(Xe123,Ye24) ALIAS_CGA2D_ADD_MUL(Xe124,Ye23) ALIAS_CGA2D_SUB_MUL(Xe234,Ye12) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye2) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe12,Ye134) ALIAS_CGA2D_ADD_MUL(Xe13,Ye124) ALIAS_CGA2D_SUB_MUL(Xe14,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye14) ALIAS_CGA2D_SUB_MUL(Xe124,Ye13) ALIAS_CGA2D_ADD_MUL(Xe134,Ye12) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye1) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xe1,Ye234) ALIAS_CGA2D_SUB_MUL(Xe2,Ye134) ALIAS_CGA2D_ADD_MUL(Xe3,Ye124) ALIAS_CGA2D_SUB_MUL(Xe4,Ye123) ALIAS_CGA2D_ADD_MUL(Xe123,Ye4) ALIAS_CGA2D_SUB_MUL(Xe124,Ye3) ALIAS_CGA2D_ADD_MUL(Xe134,Ye2) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_INNER_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 ALIAS_CGA2D_ADD_MUL(Xone,Yone) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1) ALIAS_CGA2D_ADD_MUL(Xe2,Ye2) ALIAS_CGA2D_ADD_MUL(Xe3,Ye3) ALIAS_CGA2D_SUB_MUL(Xe4,Ye4) ALIAS_CGA2D_SUB_MUL(Xe12,Ye12) ALIAS_CGA2D_SUB_MUL(Xe13,Ye13) ALIAS_CGA2D_ADD_MUL(Xe14,Ye14) ALIAS_CGA2D_SUB_MUL(Xe23,Ye23) ALIAS_CGA2D_ADD_MUL(Xe24,Ye24) ALIAS_CGA2D_ADD_MUL(Xe34,Ye34) ALIAS_CGA2D_SUB_MUL(Xe123,Ye123) ALIAS_CGA2D_ADD_MUL(Xe124,Ye124) ALIAS_CGA2D_ADD_MUL(Xe134,Ye134) ALIAS_CGA2D_ADD_MUL(Xe234,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1) ALIAS_CGA2D_ADD_MUL(Xe1,Yone) ALIAS_CGA2D_SUB_MUL(Xe2,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye13) ALIAS_CGA2D_ADD_MUL(Xe4,Ye14) ALIAS_CGA2D_ADD_MUL(Xe12,Ye2) ALIAS_CGA2D_ADD_MUL(Xe13,Ye3) ALIAS_CGA2D_SUB_MUL(Xe14,Ye4) ALIAS_CGA2D_SUB_MUL(Xe23,Ye123) ALIAS_CGA2D_ADD_MUL(Xe24,Ye124) ALIAS_CGA2D_ADD_MUL(Xe34,Ye134) ALIAS_CGA2D_SUB_MUL(Xe123,Ye23) ALIAS_CGA2D_ADD_MUL(Xe124,Ye24) ALIAS_CGA2D_ADD_MUL(Xe134,Ye34) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye2) ALIAS_CGA2D_ADD_MUL(Xe1,Ye12) ALIAS_CGA2D_ADD_MUL(Xe2,Yone) ALIAS_CGA2D_SUB_MUL(Xe3,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye24) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1) ALIAS_CGA2D_ADD_MUL(Xe13,Ye123) ALIAS_CGA2D_SUB_MUL(Xe14,Ye124) ALIAS_CGA2D_ADD_MUL(Xe23,Ye3) ALIAS_CGA2D_SUB_MUL(Xe24,Ye4) ALIAS_CGA2D_ADD_MUL(Xe34,Ye234) ALIAS_CGA2D_ADD_MUL(Xe123,Ye13) ALIAS_CGA2D_SUB_MUL(Xe124,Ye14) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe234,Ye34) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye134) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye3) ALIAS_CGA2D_ADD_MUL(Xe1,Ye13) ALIAS_CGA2D_ADD_MUL(Xe2,Ye23) ALIAS_CGA2D_ADD_MUL(Xe3,Yone) ALIAS_CGA2D_ADD_MUL(Xe4,Ye34) ALIAS_CGA2D_SUB_MUL(Xe12,Ye123) ALIAS_CGA2D_SUB_MUL(Xe13,Ye1) ALIAS_CGA2D_SUB_MUL(Xe14,Ye134) ALIAS_CGA2D_SUB_MUL(Xe23,Ye2) ALIAS_CGA2D_SUB_MUL(Xe24,Ye234) ALIAS_CGA2D_SUB_MUL(Xe34,Ye4) ALIAS_CGA2D_SUB_MUL(Xe123,Ye12) ALIAS_CGA2D_SUB_MUL(Xe124,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe134,Ye14) ALIAS_CGA2D_SUB_MUL(Xe234,Ye24) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye124) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1,Ye14) ALIAS_CGA2D_ADD_MUL(Xe2,Ye24) ALIAS_CGA2D_ADD_MUL(Xe3,Ye34) ALIAS_CGA2D_ADD_MUL(Xe4,Yone) ALIAS_CGA2D_SUB_MUL(Xe12,Ye124) ALIAS_CGA2D_SUB_MUL(Xe13,Ye134) ALIAS_CGA2D_SUB_MUL(Xe14,Ye1) ALIAS_CGA2D_SUB_MUL(Xe23,Ye234) ALIAS_CGA2D_SUB_MUL(Xe24,Ye2) ALIAS_CGA2D_SUB_MUL(Xe34,Ye3) ALIAS_CGA2D_SUB_MUL(Xe123,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye12) ALIAS_CGA2D_SUB_MUL(Xe134,Ye13) ALIAS_CGA2D_SUB_MUL(Xe234,Ye23) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye123) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye12) ALIAS_CGA2D_ADD_MUL(Xe3,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye124) ALIAS_CGA2D_ADD_MUL(Xe12,Yone) ALIAS_CGA2D_ADD_MUL(Xe34,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe123,Ye3) ALIAS_CGA2D_SUB_MUL(Xe124,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye34) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye13) ALIAS_CGA2D_SUB_MUL(Xe2,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye134) ALIAS_CGA2D_ADD_MUL(Xe13,Yone) ALIAS_CGA2D_SUB_MUL(Xe24,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe123,Ye2) ALIAS_CGA2D_SUB_MUL(Xe134,Ye4) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye24) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye14) ALIAS_CGA2D_SUB_MUL(Xe2,Ye124) ALIAS_CGA2D_SUB_MUL(Xe3,Ye134) ALIAS_CGA2D_ADD_MUL(Xe14,Yone) ALIAS_CGA2D_SUB_MUL(Xe23,Ye1234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye2) ALIAS_CGA2D_SUB_MUL(Xe134,Ye3) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye23) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye23) ALIAS_CGA2D_ADD_MUL(Xe1,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye234) ALIAS_CGA2D_ADD_MUL(Xe14,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe23,Yone) ALIAS_CGA2D_ADD_MUL(Xe123,Ye1) ALIAS_CGA2D_SUB_MUL(Xe234,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye14) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye24) ALIAS_CGA2D_ADD_MUL(Xe1,Ye124) ALIAS_CGA2D_SUB_MUL(Xe3,Ye234) ALIAS_CGA2D_ADD_MUL(Xe13,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe24,Yone) ALIAS_CGA2D_ADD_MUL(Xe124,Ye1) ALIAS_CGA2D_SUB_MUL(Xe234,Ye3) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye13) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye34) ALIAS_CGA2D_ADD_MUL(Xe1,Ye134) ALIAS_CGA2D_ADD_MUL(Xe2,Ye234) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe34,Yone) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1) ALIAS_CGA2D_ADD_MUL(Xe234,Ye2) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye12) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye123) ALIAS_CGA2D_ADD_MUL(Xe4,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe123,Yone) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye4) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye124) ALIAS_CGA2D_ADD_MUL(Xe3,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe124,Yone) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye3) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye134) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe134,Yone) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye2) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe234,Yone) ALIAS_CGA2D_SUB_MUL(Xe1234,Ye1) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1234) ALIAS_CGA2D_ADD_MUL(Xe1234,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_CGA2D_OP_LEFT_DOT_PRODUCT(RETURN, Xone,Xe1,Xe2,Xe3,Xe4,Xe12,Xe13,Xe14,Xe23,Xe24,Xe34,Xe123,Xe124,Xe134,Xe234,Xe1234, Yone,Ye1,Ye2,Ye3,Ye4,Ye12,Ye13,Ye14,Ye23,Ye24,Ye34,Ye123,Ye124,Ye134,Ye234,Ye1234, ...) RETURN( \
    0 ALIAS_CGA2D_ADD_MUL(Xone,Yone) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1) ALIAS_CGA2D_ADD_MUL(Xe2,Ye2) ALIAS_CGA2D_ADD_MUL(Xe3,Ye3) ALIAS_CGA2D_SUB_MUL(Xe4,Ye4) ALIAS_CGA2D_SUB_MUL(Xe12,Ye12) ALIAS_CGA2D_SUB_MUL(Xe13,Ye13) ALIAS_CGA2D_ADD_MUL(Xe14,Ye14) ALIAS_CGA2D_SUB_MUL(Xe23,Ye23) ALIAS_CGA2D_ADD_MUL(Xe24,Ye24) ALIAS_CGA2D_ADD_MUL(Xe34,Ye34) ALIAS_CGA2D_SUB_MUL(Xe123,Ye123) ALIAS_CGA2D_ADD_MUL(Xe124,Ye124) ALIAS_CGA2D_ADD_MUL(Xe134,Ye134) ALIAS_CGA2D_ADD_MUL(Xe234,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1234,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1) ALIAS_CGA2D_SUB_MUL(Xe2,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye13) ALIAS_CGA2D_ADD_MUL(Xe4,Ye14) ALIAS_CGA2D_SUB_MUL(Xe23,Ye123) ALIAS_CGA2D_ADD_MUL(Xe24,Ye124) ALIAS_CGA2D_ADD_MUL(Xe34,Ye134) ALIAS_CGA2D_SUB_MUL(Xe234,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye2) ALIAS_CGA2D_ADD_MUL(Xe1,Ye12) ALIAS_CGA2D_SUB_MUL(Xe3,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye24) ALIAS_CGA2D_ADD_MUL(Xe13,Ye123) ALIAS_CGA2D_SUB_MUL(Xe14,Ye124) ALIAS_CGA2D_ADD_MUL(Xe34,Ye234) ALIAS_CGA2D_ADD_MUL(Xe134,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye3) ALIAS_CGA2D_ADD_MUL(Xe1,Ye13) ALIAS_CGA2D_ADD_MUL(Xe2,Ye23) ALIAS_CGA2D_ADD_MUL(Xe4,Ye34) ALIAS_CGA2D_SUB_MUL(Xe12,Ye123) ALIAS_CGA2D_SUB_MUL(Xe14,Ye134) ALIAS_CGA2D_SUB_MUL(Xe24,Ye234) ALIAS_CGA2D_SUB_MUL(Xe124,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye4) ALIAS_CGA2D_ADD_MUL(Xe1,Ye14) ALIAS_CGA2D_ADD_MUL(Xe2,Ye24) ALIAS_CGA2D_ADD_MUL(Xe3,Ye34) ALIAS_CGA2D_SUB_MUL(Xe12,Ye124) ALIAS_CGA2D_SUB_MUL(Xe13,Ye134) ALIAS_CGA2D_SUB_MUL(Xe23,Ye234) ALIAS_CGA2D_SUB_MUL(Xe123,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye12) ALIAS_CGA2D_ADD_MUL(Xe3,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye124) ALIAS_CGA2D_ADD_MUL(Xe34,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye13) ALIAS_CGA2D_SUB_MUL(Xe2,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye134) ALIAS_CGA2D_SUB_MUL(Xe24,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye14) ALIAS_CGA2D_SUB_MUL(Xe2,Ye124) ALIAS_CGA2D_SUB_MUL(Xe3,Ye134) ALIAS_CGA2D_SUB_MUL(Xe23,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye23) ALIAS_CGA2D_ADD_MUL(Xe1,Ye123) ALIAS_CGA2D_SUB_MUL(Xe4,Ye234) ALIAS_CGA2D_ADD_MUL(Xe14,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye24) ALIAS_CGA2D_ADD_MUL(Xe1,Ye124) ALIAS_CGA2D_SUB_MUL(Xe3,Ye234) ALIAS_CGA2D_ADD_MUL(Xe13,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye34) ALIAS_CGA2D_ADD_MUL(Xe1,Ye134) ALIAS_CGA2D_ADD_MUL(Xe2,Ye234) ALIAS_CGA2D_SUB_MUL(Xe12,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye123) ALIAS_CGA2D_ADD_MUL(Xe4,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye124) ALIAS_CGA2D_ADD_MUL(Xe3,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye134) ALIAS_CGA2D_SUB_MUL(Xe2,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye234) ALIAS_CGA2D_ADD_MUL(Xe1,Ye1234) \
  , 0 ALIAS_CGA2D_ADD_MUL(Xone,Ye1234) \
  , ## __VA_ARGS__)
#define alias_cga2d_s(X) (1,0,0,0,0,_Generic((X), alias_cga2d_Scalar: X, default: ((alias_cga2d_Scalar){ .one = (float)X })))
#define alias_cga2d_v(X) (0,1,0,0,0,X)
#define alias_cga2d_b(X) (0,0,1,0,0,X)
#define alias_cga2d_t(X) (0,0,0,1,0,X)
#define alias_cga2d_S(X) (0,0,0,0,1,X)
#define alias_cga2d_grade_0(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_GRADE_0, X)
#define alias_cga2d_grade_1(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_GRADE_1, X)
#define alias_cga2d_grade_2(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_GRADE_2, X)
#define alias_cga2d_grade_3(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_GRADE_3, X)
#define alias_cga2d_grade_4(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_GRADE_4, X)
#define alias_cga2d_negate(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_NEGATE, X)
#define alias_cga2d_negate_s(X) alias_cga2d_negate(alias_cga2d_s(X))
#define alias_cga2d_negate_v(X) alias_cga2d_negate(alias_cga2d_v(X))
#define alias_cga2d_negate_b(X) alias_cga2d_negate(alias_cga2d_b(X))
#define alias_cga2d_negate_t(X) alias_cga2d_negate(alias_cga2d_t(X))
#define alias_cga2d_negate_S(X) alias_cga2d_negate(alias_cga2d_S(X))
#define alias_cga2d_dual(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_DUAL, X)
#define alias_cga2d_dual_s(X) alias_cga2d_dual(alias_cga2d_s(X))
#define alias_cga2d_dual_v(X) alias_cga2d_dual(alias_cga2d_v(X))
#define alias_cga2d_dual_b(X) alias_cga2d_dual(alias_cga2d_b(X))
#define alias_cga2d_dual_t(X) alias_cga2d_dual(alias_cga2d_t(X))
#define alias_cga2d_dual_S(X) alias_cga2d_dual(alias_cga2d_S(X))
#define alias_cga2d_polar(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_POLAR, X)
#define alias_cga2d_polar_s(X) alias_cga2d_polar(alias_cga2d_s(X))
#define alias_cga2d_polar_v(X) alias_cga2d_polar(alias_cga2d_v(X))
#define alias_cga2d_polar_b(X) alias_cga2d_polar(alias_cga2d_b(X))
#define alias_cga2d_polar_t(X) alias_cga2d_polar(alias_cga2d_t(X))
#define alias_cga2d_polar_S(X) alias_cga2d_polar(alias_cga2d_S(X))
#define alias_cga2d_reverse(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_REVERSE, X)
#define alias_cga2d_reverse_s(X) alias_cga2d_reverse(alias_cga2d_s(X))
#define alias_cga2d_reverse_v(X) alias_cga2d_reverse(alias_cga2d_v(X))
#define alias_cga2d_reverse_b(X) alias_cga2d_reverse(alias_cga2d_b(X))
#define alias_cga2d_reverse_t(X) alias_cga2d_reverse(alias_cga2d_t(X))
#define alias_cga2d_reverse_S(X) alias_cga2d_reverse(alias_cga2d_S(X))
#define alias_cga2d_involute(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_INVOLUTE, X)
#define alias_cga2d_involute_s(X) alias_cga2d_involute(alias_cga2d_s(X))
#define alias_cga2d_involute_v(X) alias_cga2d_involute(alias_cga2d_v(X))
#define alias_cga2d_involute_b(X) alias_cga2d_involute(alias_cga2d_b(X))
#define alias_cga2d_involute_t(X) alias_cga2d_involute(alias_cga2d_t(X))
#define alias_cga2d_involute_S(X) alias_cga2d_involute(alias_cga2d_S(X))
#define alias_cga2d_conjugate(X) ALIAS_CGA2D_UNARY(ALIAS_CGA2D_OP_CONJUGATE, X)
#define alias_cga2d_conjugate_s(X) alias_cga2d_conjugate(alias_cga2d_s(X))
#define alias_cga2d_conjugate_v(X) alias_cga2d_conjugate(alias_cga2d_v(X))
#define alias_cga2d_conjugate_b(X) alias_cga2d_conjugate(alias_cga2d_b(X))
#define alias_cga2d_conjugate_t(X) alias_cga2d_conjugate(alias_cga2d_t(X))
#define alias_cga2d_conjugate_S(X) alias_cga2d_conjugate(alias_cga2d_S(X))
#define alias_cga2d_add(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_ADD, X, Y)
#define alias_cga2d_add_ss(X, Y) alias_cga2d_add(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_add_sv(X, Y) alias_cga2d_add(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_add_sb(X, Y) alias_cga2d_add(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_add_st(X, Y) alias_cga2d_add(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_add_sS(X, Y) alias_cga2d_add(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_add_vs(X, Y) alias_cga2d_add(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_add_vv(X, Y) alias_cga2d_add(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_add_vb(X, Y) alias_cga2d_add(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_add_vt(X, Y) alias_cga2d_add(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_add_vS(X, Y) alias_cga2d_add(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_add_bs(X, Y) alias_cga2d_add(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_add_bv(X, Y) alias_cga2d_add(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_add_bb(X, Y) alias_cga2d_add(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_add_bt(X, Y) alias_cga2d_add(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_add_bS(X, Y) alias_cga2d_add(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_add_ts(X, Y) alias_cga2d_add(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_add_tv(X, Y) alias_cga2d_add(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_add_tb(X, Y) alias_cga2d_add(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_add_tt(X, Y) alias_cga2d_add(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_add_tS(X, Y) alias_cga2d_add(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_add_Ss(X, Y) alias_cga2d_add(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_add_Sv(X, Y) alias_cga2d_add(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_add_Sb(X, Y) alias_cga2d_add(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_add_St(X, Y) alias_cga2d_add(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_add_SS(X, Y) alias_cga2d_add(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_subtract(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_SUBTRACT, X, Y)
#define alias_cga2d_subtract_ss(X, Y) alias_cga2d_subtract(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_subtract_sv(X, Y) alias_cga2d_subtract(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_subtract_sb(X, Y) alias_cga2d_subtract(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_subtract_st(X, Y) alias_cga2d_subtract(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_subtract_sS(X, Y) alias_cga2d_subtract(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_subtract_vs(X, Y) alias_cga2d_subtract(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_subtract_vv(X, Y) alias_cga2d_subtract(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_subtract_vb(X, Y) alias_cga2d_subtract(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_subtract_vt(X, Y) alias_cga2d_subtract(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_subtract_vS(X, Y) alias_cga2d_subtract(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_subtract_bs(X, Y) alias_cga2d_subtract(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_subtract_bv(X, Y) alias_cga2d_subtract(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_subtract_bb(X, Y) alias_cga2d_subtract(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_subtract_bt(X, Y) alias_cga2d_subtract(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_subtract_bS(X, Y) alias_cga2d_subtract(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_subtract_ts(X, Y) alias_cga2d_subtract(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_subtract_tv(X, Y) alias_cga2d_subtract(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_subtract_tb(X, Y) alias_cga2d_subtract(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_subtract_tt(X, Y) alias_cga2d_subtract(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_subtract_tS(X, Y) alias_cga2d_subtract(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_subtract_Ss(X, Y) alias_cga2d_subtract(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_subtract_Sv(X, Y) alias_cga2d_subtract(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_subtract_Sb(X, Y) alias_cga2d_subtract(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_subtract_St(X, Y) alias_cga2d_subtract(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_subtract_SS(X, Y) alias_cga2d_subtract(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_geometric_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_GEOMETRIC_PRODUCT, X, Y)
#define alias_cga2d_geometric_product_ss(X, Y) alias_cga2d_geometric_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_geometric_product_sv(X, Y) alias_cga2d_geometric_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_geometric_product_sb(X, Y) alias_cga2d_geometric_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_geometric_product_st(X, Y) alias_cga2d_geometric_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_geometric_product_sS(X, Y) alias_cga2d_geometric_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_geometric_product_vs(X, Y) alias_cga2d_geometric_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_geometric_product_vv(X, Y) alias_cga2d_geometric_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_geometric_product_vb(X, Y) alias_cga2d_geometric_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_geometric_product_vt(X, Y) alias_cga2d_geometric_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_geometric_product_vS(X, Y) alias_cga2d_geometric_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_geometric_product_bs(X, Y) alias_cga2d_geometric_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_geometric_product_bv(X, Y) alias_cga2d_geometric_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_geometric_product_bb(X, Y) alias_cga2d_geometric_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_geometric_product_bt(X, Y) alias_cga2d_geometric_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_geometric_product_bS(X, Y) alias_cga2d_geometric_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_geometric_product_ts(X, Y) alias_cga2d_geometric_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_geometric_product_tv(X, Y) alias_cga2d_geometric_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_geometric_product_tb(X, Y) alias_cga2d_geometric_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_geometric_product_tt(X, Y) alias_cga2d_geometric_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_geometric_product_tS(X, Y) alias_cga2d_geometric_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_geometric_product_Ss(X, Y) alias_cga2d_geometric_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_geometric_product_Sv(X, Y) alias_cga2d_geometric_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_geometric_product_Sb(X, Y) alias_cga2d_geometric_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_geometric_product_St(X, Y) alias_cga2d_geometric_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_geometric_product_SS(X, Y) alias_cga2d_geometric_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_outer_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_OUTER_PRODUCT, X, Y)
#define alias_cga2d_outer_product_ss(X, Y) alias_cga2d_outer_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_outer_product_sv(X, Y) alias_cga2d_outer_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_outer_product_sb(X, Y) alias_cga2d_outer_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_outer_product_st(X, Y) alias_cga2d_outer_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_outer_product_sS(X, Y) alias_cga2d_outer_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_outer_product_vs(X, Y) alias_cga2d_outer_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_outer_product_vv(X, Y) alias_cga2d_outer_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_outer_product_vb(X, Y) alias_cga2d_outer_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_outer_product_vt(X, Y) alias_cga2d_outer_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_outer_product_vS(X, Y) alias_cga2d_outer_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_outer_product_bs(X, Y) alias_cga2d_outer_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_outer_product_bv(X, Y) alias_cga2d_outer_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_outer_product_bb(X, Y) alias_cga2d_outer_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_outer_product_bt(X, Y) alias_cga2d_outer_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_outer_product_bS(X, Y) alias_cga2d_outer_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_outer_product_ts(X, Y) alias_cga2d_outer_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_outer_product_tv(X, Y) alias_cga2d_outer_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_outer_product_tb(X, Y) alias_cga2d_outer_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_outer_product_tt(X, Y) alias_cga2d_outer_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_outer_product_tS(X, Y) alias_cga2d_outer_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_outer_product_Ss(X, Y) alias_cga2d_outer_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_outer_product_Sv(X, Y) alias_cga2d_outer_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_outer_product_Sb(X, Y) alias_cga2d_outer_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_outer_product_St(X, Y) alias_cga2d_outer_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_outer_product_SS(X, Y) alias_cga2d_outer_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_regressive_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_REGRESSIVE_PRODUCT, X, Y)
#define alias_cga2d_regressive_product_ss(X, Y) alias_cga2d_regressive_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_regressive_product_sv(X, Y) alias_cga2d_regressive_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_regressive_product_sb(X, Y) alias_cga2d_regressive_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_regressive_product_st(X, Y) alias_cga2d_regressive_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_regressive_product_sS(X, Y) alias_cga2d_regressive_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_regressive_product_vs(X, Y) alias_cga2d_regressive_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_regressive_product_vv(X, Y) alias_cga2d_regressive_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_regressive_product_vb(X, Y) alias_cga2d_regressive_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_regressive_product_vt(X, Y) alias_cga2d_regressive_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_regressive_product_vS(X, Y) alias_cga2d_regressive_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_regressive_product_bs(X, Y) alias_cga2d_regressive_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_regressive_product_bv(X, Y) alias_cga2d_regressive_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_regressive_product_bb(X, Y) alias_cga2d_regressive_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_regressive_product_bt(X, Y) alias_cga2d_regressive_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_regressive_product_bS(X, Y) alias_cga2d_regressive_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_regressive_product_ts(X, Y) alias_cga2d_regressive_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_regressive_product_tv(X, Y) alias_cga2d_regressive_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_regressive_product_tb(X, Y) alias_cga2d_regressive_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_regressive_product_tt(X, Y) alias_cga2d_regressive_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_regressive_product_tS(X, Y) alias_cga2d_regressive_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_regressive_product_Ss(X, Y) alias_cga2d_regressive_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_regressive_product_Sv(X, Y) alias_cga2d_regressive_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_regressive_product_Sb(X, Y) alias_cga2d_regressive_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_regressive_product_St(X, Y) alias_cga2d_regressive_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_regressive_product_SS(X, Y) alias_cga2d_regressive_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_commutator_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_COMMUTATOR_PRODUCT, X, Y)
#define alias_cga2d_commutator_product_ss(X, Y) alias_cga2d_commutator_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_commutator_product_sv(X, Y) alias_cga2d_commutator_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_commutator_product_sb(X, Y) alias_cga2d_commutator_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_commutator_product_st(X, Y) alias_cga2d_commutator_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_commutator_product_sS(X, Y) alias_cga2d_commutator_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_commutator_product_vs(X, Y) alias_cga2d_commutator_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_commutator_product_vv(X, Y) alias_cga2d_commutator_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_commutator_product_vb(X, Y) alias_cga2d_commutator_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_commutator_product_vt(X, Y) alias_cga2d_commutator_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_commutator_product_vS(X, Y) alias_cga2d_commutator_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_commutator_product_bs(X, Y) alias_cga2d_commutator_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_commutator_product_bv(X, Y) alias_cga2d_commutator_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_commutator_product_bb(X, Y) alias_cga2d_commutator_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_commutator_product_bt(X, Y) alias_cga2d_commutator_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_commutator_product_bS(X, Y) alias_cga2d_commutator_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_commutator_product_ts(X, Y) alias_cga2d_commutator_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_commutator_product_tv(X, Y) alias_cga2d_commutator_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_commutator_product_tb(X, Y) alias_cga2d_commutator_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_commutator_product_tt(X, Y) alias_cga2d_commutator_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_commutator_product_tS(X, Y) alias_cga2d_commutator_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_commutator_product_Ss(X, Y) alias_cga2d_commutator_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_commutator_product_Sv(X, Y) alias_cga2d_commutator_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_commutator_product_Sb(X, Y) alias_cga2d_commutator_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_commutator_product_St(X, Y) alias_cga2d_commutator_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_commutator_product_SS(X, Y) alias_cga2d_commutator_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_inner_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_INNER_PRODUCT, X, Y)
#define alias_cga2d_inner_product_ss(X, Y) alias_cga2d_inner_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_inner_product_sv(X, Y) alias_cga2d_inner_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_inner_product_sb(X, Y) alias_cga2d_inner_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_inner_product_st(X, Y) alias_cga2d_inner_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_inner_product_sS(X, Y) alias_cga2d_inner_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_inner_product_vs(X, Y) alias_cga2d_inner_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_inner_product_vv(X, Y) alias_cga2d_inner_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_inner_product_vb(X, Y) alias_cga2d_inner_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_inner_product_vt(X, Y) alias_cga2d_inner_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_inner_product_vS(X, Y) alias_cga2d_inner_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_inner_product_bs(X, Y) alias_cga2d_inner_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_inner_product_bv(X, Y) alias_cga2d_inner_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_inner_product_bb(X, Y) alias_cga2d_inner_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_inner_product_bt(X, Y) alias_cga2d_inner_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_inner_product_bS(X, Y) alias_cga2d_inner_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_inner_product_ts(X, Y) alias_cga2d_inner_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_inner_product_tv(X, Y) alias_cga2d_inner_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_inner_product_tb(X, Y) alias_cga2d_inner_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_inner_product_tt(X, Y) alias_cga2d_inner_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_inner_product_tS(X, Y) alias_cga2d_inner_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_inner_product_Ss(X, Y) alias_cga2d_inner_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_inner_product_Sv(X, Y) alias_cga2d_inner_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_inner_product_Sb(X, Y) alias_cga2d_inner_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_inner_product_St(X, Y) alias_cga2d_inner_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_inner_product_SS(X, Y) alias_cga2d_inner_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_left_dot_product(X, Y) ALIAS_CGA2D_BINARY(ALIAS_CGA2D_OP_LEFT_DOT_PRODUCT, X, Y)
#define alias_cga2d_left_dot_product_ss(X, Y) alias_cga2d_left_dot_product(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_left_dot_product_sv(X, Y) alias_cga2d_left_dot_product(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_left_dot_product_sb(X, Y) alias_cga2d_left_dot_product(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_left_dot_product_st(X, Y) alias_cga2d_left_dot_product(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_left_dot_product_sS(X, Y) alias_cga2d_left_dot_product(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_left_dot_product_vs(X, Y) alias_cga2d_left_dot_product(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_left_dot_product_vv(X, Y) alias_cga2d_left_dot_product(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_left_dot_product_vb(X, Y) alias_cga2d_left_dot_product(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_left_dot_product_vt(X, Y) alias_cga2d_left_dot_product(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_left_dot_product_vS(X, Y) alias_cga2d_left_dot_product(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_left_dot_product_bs(X, Y) alias_cga2d_left_dot_product(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_left_dot_product_bv(X, Y) alias_cga2d_left_dot_product(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_left_dot_product_bb(X, Y) alias_cga2d_left_dot_product(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_left_dot_product_bt(X, Y) alias_cga2d_left_dot_product(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_left_dot_product_bS(X, Y) alias_cga2d_left_dot_product(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_left_dot_product_ts(X, Y) alias_cga2d_left_dot_product(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_left_dot_product_tv(X, Y) alias_cga2d_left_dot_product(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_left_dot_product_tb(X, Y) alias_cga2d_left_dot_product(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_left_dot_product_tt(X, Y) alias_cga2d_left_dot_product(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_left_dot_product_tS(X, Y) alias_cga2d_left_dot_product(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_left_dot_product_Ss(X, Y) alias_cga2d_left_dot_product(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_left_dot_product_Sv(X, Y) alias_cga2d_left_dot_product(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_left_dot_product_Sb(X, Y) alias_cga2d_left_dot_product(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_left_dot_product_St(X, Y) alias_cga2d_left_dot_product(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_left_dot_product_SS(X, Y) alias_cga2d_left_dot_product(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_meet(X, Y) alias_cga2d_outer_product(X, Y)
#define alias_cga2d_meet_ss(X, Y) alias_cga2d_meet(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_meet_sv(X, Y) alias_cga2d_meet(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_meet_sb(X, Y) alias_cga2d_meet(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_meet_st(X, Y) alias_cga2d_meet(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_meet_sS(X, Y) alias_cga2d_meet(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_meet_vs(X, Y) alias_cga2d_meet(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_meet_vv(X, Y) alias_cga2d_meet(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_meet_vb(X, Y) alias_cga2d_meet(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_meet_vt(X, Y) alias_cga2d_meet(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_meet_vS(X, Y) alias_cga2d_meet(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_meet_bs(X, Y) alias_cga2d_meet(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_meet_bv(X, Y) alias_cga2d_meet(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_meet_bb(X, Y) alias_cga2d_meet(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_meet_bt(X, Y) alias_cga2d_meet(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_meet_bS(X, Y) alias_cga2d_meet(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_meet_ts(X, Y) alias_cga2d_meet(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_meet_tv(X, Y) alias_cga2d_meet(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_meet_tb(X, Y) alias_cga2d_meet(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_meet_tt(X, Y) alias_cga2d_meet(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_meet_tS(X, Y) alias_cga2d_meet(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_meet_Ss(X, Y) alias_cga2d_meet(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_meet_Sv(X, Y) alias_cga2d_meet(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_meet_Sb(X, Y) alias_cga2d_meet(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_meet_St(X, Y) alias_cga2d_meet(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_meet_SS(X, Y) alias_cga2d_meet(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_join(X, Y) alias_cga2d_regressive_product(X, Y)
#define alias_cga2d_join_ss(X, Y) alias_cga2d_join(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_join_sv(X, Y) alias_cga2d_join(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_join_sb(X, Y) alias_cga2d_join(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_join_st(X, Y) alias_cga2d_join(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_join_sS(X, Y) alias_cga2d_join(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_join_vs(X, Y) alias_cga2d_join(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_join_vv(X, Y) alias_cga2d_join(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_join_vb(X, Y) alias_cga2d_join(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_join_vt(X, Y) alias_cga2d_join(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_join_vS(X, Y) alias_cga2d_join(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_join_bs(X, Y) alias_cga2d_join(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_join_bv(X, Y) alias_cga2d_join(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_join_bb(X, Y) alias_cga2d_join(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_join_bt(X, Y) alias_cga2d_join(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_join_bS(X, Y) alias_cga2d_join(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_join_ts(X, Y) alias_cga2d_join(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_join_tv(X, Y) alias_cga2d_join(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_join_tb(X, Y) alias_cga2d_join(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_join_tt(X, Y) alias_cga2d_join(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_join_tS(X, Y) alias_cga2d_join(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_join_Ss(X, Y) alias_cga2d_join(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_join_Sv(X, Y) alias_cga2d_join(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_join_Sb(X, Y) alias_cga2d_join(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_join_St(X, Y) alias_cga2d_join(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_join_SS(X, Y) alias_cga2d_join(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_neg(X) alias_cga2d_negate(X)
#define alias_cga2d_neg_s(X) alias_cga2d_neg(alias_cga2d_s(X))
#define alias_cga2d_neg_v(X) alias_cga2d_neg(alias_cga2d_v(X))
#define alias_cga2d_neg_b(X) alias_cga2d_neg(alias_cga2d_b(X))
#define alias_cga2d_neg_t(X) alias_cga2d_neg(alias_cga2d_t(X))
#define alias_cga2d_neg_S(X) alias_cga2d_neg(alias_cga2d_S(X))
#define alias_cga2d_sub(X, Y) alias_cga2d_subtract(X, Y)
#define alias_cga2d_sub_ss(X, Y) alias_cga2d_sub(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_sub_sv(X, Y) alias_cga2d_sub(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_sub_sb(X, Y) alias_cga2d_sub(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_sub_st(X, Y) alias_cga2d_sub(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_sub_sS(X, Y) alias_cga2d_sub(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_sub_vs(X, Y) alias_cga2d_sub(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_sub_vv(X, Y) alias_cga2d_sub(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_sub_vb(X, Y) alias_cga2d_sub(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_sub_vt(X, Y) alias_cga2d_sub(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_sub_vS(X, Y) alias_cga2d_sub(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_sub_bs(X, Y) alias_cga2d_sub(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_sub_bv(X, Y) alias_cga2d_sub(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_sub_bb(X, Y) alias_cga2d_sub(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_sub_bt(X, Y) alias_cga2d_sub(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_sub_bS(X, Y) alias_cga2d_sub(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_sub_ts(X, Y) alias_cga2d_sub(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_sub_tv(X, Y) alias_cga2d_sub(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_sub_tb(X, Y) alias_cga2d_sub(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_sub_tt(X, Y) alias_cga2d_sub(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_sub_tS(X, Y) alias_cga2d_sub(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_sub_Ss(X, Y) alias_cga2d_sub(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_sub_Sv(X, Y) alias_cga2d_sub(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_sub_Sb(X, Y) alias_cga2d_sub(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_sub_St(X, Y) alias_cga2d_sub(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_sub_SS(X, Y) alias_cga2d_sub(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_mul(X, Y) alias_cga2d_geometric_product(X, Y)
#define alias_cga2d_mul_ss(X, Y) alias_cga2d_mul(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_mul_sv(X, Y) alias_cga2d_mul(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_mul_sb(X, Y) alias_cga2d_mul(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_mul_st(X, Y) alias_cga2d_mul(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_mul_sS(X, Y) alias_cga2d_mul(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_mul_vs(X, Y) alias_cga2d_mul(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_mul_vv(X, Y) alias_cga2d_mul(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_mul_vb(X, Y) alias_cga2d_mul(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_mul_vt(X, Y) alias_cga2d_mul(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_mul_vS(X, Y) alias_cga2d_mul(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_mul_bs(X, Y) alias_cga2d_mul(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_mul_bv(X, Y) alias_cga2d_mul(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_mul_bb(X, Y) alias_cga2d_mul(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_mul_bt(X, Y) alias_cga2d_mul(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_mul_bS(X, Y) alias_cga2d_mul(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_mul_ts(X, Y) alias_cga2d_mul(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_mul_tv(X, Y) alias_cga2d_mul(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_mul_tb(X, Y) alias_cga2d_mul(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_mul_tt(X, Y) alias_cga2d_mul(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_mul_tS(X, Y) alias_cga2d_mul(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_mul_Ss(X, Y) alias_cga2d_mul(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_mul_Sv(X, Y) alias_cga2d_mul(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_mul_Sb(X, Y) alias_cga2d_mul(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_mul_St(X, Y) alias_cga2d_mul(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_mul_SS(X, Y) alias_cga2d_mul(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_weg(X, Y) alias_cga2d_outer_product(X, Y)
#define alias_cga2d_weg_ss(X, Y) alias_cga2d_weg(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_weg_sv(X, Y) alias_cga2d_weg(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_weg_sb(X, Y) alias_cga2d_weg(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_weg_st(X, Y) alias_cga2d_weg(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_weg_sS(X, Y) alias_cga2d_weg(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_weg_vs(X, Y) alias_cga2d_weg(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_weg_vv(X, Y) alias_cga2d_weg(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_weg_vb(X, Y) alias_cga2d_weg(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_weg_vt(X, Y) alias_cga2d_weg(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_weg_vS(X, Y) alias_cga2d_weg(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_weg_bs(X, Y) alias_cga2d_weg(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_weg_bv(X, Y) alias_cga2d_weg(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_weg_bb(X, Y) alias_cga2d_weg(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_weg_bt(X, Y) alias_cga2d_weg(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_weg_bS(X, Y) alias_cga2d_weg(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_weg_ts(X, Y) alias_cga2d_weg(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_weg_tv(X, Y) alias_cga2d_weg(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_weg_tb(X, Y) alias_cga2d_weg(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_weg_tt(X, Y) alias_cga2d_weg(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_weg_tS(X, Y) alias_cga2d_weg(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_weg_Ss(X, Y) alias_cga2d_weg(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_weg_Sv(X, Y) alias_cga2d_weg(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_weg_Sb(X, Y) alias_cga2d_weg(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_weg_St(X, Y) alias_cga2d_weg(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_weg_SS(X, Y) alias_cga2d_weg(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_vee(X, Y) alias_cga2d_regressive_product(X, Y)
#define alias_cga2d_vee_ss(X, Y) alias_cga2d_vee(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_vee_sv(X, Y) alias_cga2d_vee(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_vee_sb(X, Y) alias_cga2d_vee(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_vee_st(X, Y) alias_cga2d_vee(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_vee_sS(X, Y) alias_cga2d_vee(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_vee_vs(X, Y) alias_cga2d_vee(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_vee_vv(X, Y) alias_cga2d_vee(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_vee_vb(X, Y) alias_cga2d_vee(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_vee_vt(X, Y) alias_cga2d_vee(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_vee_vS(X, Y) alias_cga2d_vee(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_vee_bs(X, Y) alias_cga2d_vee(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_vee_bv(X, Y) alias_cga2d_vee(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_vee_bb(X, Y) alias_cga2d_vee(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_vee_bt(X, Y) alias_cga2d_vee(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_vee_bS(X, Y) alias_cga2d_vee(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_vee_ts(X, Y) alias_cga2d_vee(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_vee_tv(X, Y) alias_cga2d_vee(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_vee_tb(X, Y) alias_cga2d_vee(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_vee_tt(X, Y) alias_cga2d_vee(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_vee_tS(X, Y) alias_cga2d_vee(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_vee_Ss(X, Y) alias_cga2d_vee(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_vee_Sv(X, Y) alias_cga2d_vee(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_vee_Sb(X, Y) alias_cga2d_vee(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_vee_St(X, Y) alias_cga2d_vee(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_vee_SS(X, Y) alias_cga2d_vee(alias_cga2d_S(X), alias_cga2d_S(Y))
#define alias_cga2d_dot(X, Y) alias_cga2d_inner_product(X, Y)
#define alias_cga2d_dot_ss(X, Y) alias_cga2d_dot(alias_cga2d_s(X), alias_cga2d_s(Y))
#define alias_cga2d_dot_sv(X, Y) alias_cga2d_dot(alias_cga2d_s(X), alias_cga2d_v(Y))
#define alias_cga2d_dot_sb(X, Y) alias_cga2d_dot(alias_cga2d_s(X), alias_cga2d_b(Y))
#define alias_cga2d_dot_st(X, Y) alias_cga2d_dot(alias_cga2d_s(X), alias_cga2d_t(Y))
#define alias_cga2d_dot_sS(X, Y) alias_cga2d_dot(alias_cga2d_s(X), alias_cga2d_S(Y))
#define alias_cga2d_dot_vs(X, Y) alias_cga2d_dot(alias_cga2d_v(X), alias_cga2d_s(Y))
#define alias_cga2d_dot_vv(X, Y) alias_cga2d_dot(alias_cga2d_v(X), alias_cga2d_v(Y))
#define alias_cga2d_dot_vb(X, Y) alias_cga2d_dot(alias_cga2d_v(X), alias_cga2d_b(Y))
#define alias_cga2d_dot_vt(X, Y) alias_cga2d_dot(alias_cga2d_v(X), alias_cga2d_t(Y))
#define alias_cga2d_dot_vS(X, Y) alias_cga2d_dot(alias_cga2d_v(X), alias_cga2d_S(Y))
#define alias_cga2d_dot_bs(X, Y) alias_cga2d_dot(alias_cga2d_b(X), alias_cga2d_s(Y))
#define alias_cga2d_dot_bv(X, Y) alias_cga2d_dot(alias_cga2d_b(X), alias_cga2d_v(Y))
#define alias_cga2d_dot_bb(X, Y) alias_cga2d_dot(alias_cga2d_b(X), alias_cga2d_b(Y))
#define alias_cga2d_dot_bt(X, Y) alias_cga2d_dot(alias_cga2d_b(X), alias_cga2d_t(Y))
#define alias_cga2d_dot_bS(X, Y) alias_cga2d_dot(alias_cga2d_b(X), alias_cga2d_S(Y))
#define alias_cga2d_dot_ts(X, Y) alias_cga2d_dot(alias_cga2d_t(X), alias_cga2d_s(Y))
#define alias_cga2d_dot_tv(X, Y) alias_cga2d_dot(alias_cga2d_t(X), alias_cga2d_v(Y))
#define alias_cga2d_dot_tb(X, Y) alias_cga2d_dot(alias_cga2d_t(X), alias_cga2d_b(Y))
#define alias_cga2d_dot_tt(X, Y) alias_cga2d_dot(alias_cga2d_t(X), alias_cga2d_t(Y))
#define alias_cga2d_dot_tS(X, Y) alias_cga2d_dot(alias_cga2d_t(X), alias_cga2d_S(Y))
#define alias_cga2d_dot_Ss(X, Y) alias_cga2d_dot(alias_cga2d_S(X), alias_cga2d_s(Y))
#define alias_cga2d_dot_Sv(X, Y) alias_cga2d_dot(alias_cga2d_S(X), alias_cga2d_v(Y))
#define alias_cga2d_dot_Sb(X, Y) alias_cga2d_dot(alias_cga2d_S(X), alias_cga2d_b(Y))
#define alias_cga2d_dot_St(X, Y) alias_cga2d_dot(alias_cga2d_S(X), alias_cga2d_t(Y))
#define alias_cga2d_dot_SS(X, Y) alias_cga2d_dot(alias_cga2d_S(X), alias_cga2d_S(Y))
#endif // _ALIAS_CGA2D_H_