// 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 -d 1 --binary meet outer_product --binary join regressive_product --code m024
#ifndef _ALIAS_PGA3D_H_
#define _ALIAS_PGA3D_H_
// 3 positive dimension(s)
// 0 negative dimension(s)
// 1 deginerate dimension(s)
// 4 total dimension(s)
// 5 total grade(s)
#define ALIAS_PGA3D_EMPTY(...)
#define ALIAS_PGA3D_UNPACK(...) __VA_ARGS__
#define ALIAS_PGA3D_CAT(X, ...) ALIAS_PGA3D_CAT0(X, ## __VA_ARGS__)
#define ALIAS_PGA3D_CAT0(X, ...) X ## __VA_ARGS__
#define ALIAS_PGA3D_CAT3(X, Y, ...) ALIAS_PGA3D_CAT30(X, Y, ## __VA_ARGS__)
#define ALIAS_PGA3D_CAT30(X, Y, ...) X ## Y ## __VA_ARGS__
#define ALIAS_PGA3D_OR(X, Y) ALIAS_PGA3D_CAT3(ALIAS_PGA3D_OR_, X, Y)
#define ALIAS_PGA3D_OR_00 0
#define ALIAS_PGA3D_OR_01 1
#define ALIAS_PGA3D_OR_10 1
#define ALIAS_PGA3D_OR_11 1
#define ALIAS_PGA3D_IFF(X) ALIAS_PGA3D_CAT(ALIAS_PGA3D_IFF_, X)
#define ALIAS_PGA3D_IFF_0(T, F) F
#define ALIAS_PGA3D_IFF_1(T, F) T
#define ALIAS_PGA3D_IF2(X, Y) ALIAS_PGA3D_CAT3(ALIAS_PGA3D_IF2_, X, Y)
#define ALIAS_PGA3D_IF(X) ALIAS_PGA3D_CAT(ALIAS_PGA3D_IF_, X)
#define ALIAS_PGA3D_IF_0(...) ALIAS_PGA3D_UNPACK
#define ALIAS_PGA3D_IF_1(...) __VA_ARGS__ ALIAS_PGA3D_EMPTY
#define ALIAS_PGA3D_IF2(X, Y) ALIAS_PGA3D_CAT3(ALIAS_PGA3D_IF2_, X, Y)
#define ALIAS_PGA3D_IF2_00(...) ALIAS_PGA3D_IF2_000
#define ALIAS_PGA3D_IF2_000(...) ALIAS_PGA3D_IF2_001
#define ALIAS_PGA3D_IF2_001(...) ALIAS_PGA3D_UNPACK
#define ALIAS_PGA3D_IF2_01(...) ALIAS_PGA3D_IF2_010
#define ALIAS_PGA3D_IF2_010(...) ALIAS_PGA3D_IF2_011
#define ALIAS_PGA3D_IF2_011(...) __VA_ARGS__ ALIAS_PGA3D_EMPTY
#define ALIAS_PGA3D_IF2_10(...) ALIAS_PGA3D_IF2_100
#define ALIAS_PGA3D_IF2_100(...) __VA_ARGS__ ALIAS_PGA3D_IF2_101
#define ALIAS_PGA3D_IF2_101(...) ALIAS_PGA3D_EMPTY
#define ALIAS_PGA3D_IF2_11(...) __VA_ARGS__ ALIAS_PGA3D_IF2_110
#define ALIAS_PGA3D_IF2_110(...) ALIAS_PGA3D_IF2_111
#define ALIAS_PGA3D_IF2_111(...) ALIAS_PGA3D_EMPTY
#define ALIAS_PGA3D_PROBE(...) ~,1
#define ALIAS_PGA3D_IS_PROBE(...) ALIAS_PGA3D_IS_PROBE0(__VA_ARGS__, 0, 0)
#define ALIAS_PGA3D_IS_PROBE0(X, Y, ...) Y
#define ALIAS_PGA3D_IS_ZERO(X) ALIAS_PGA3D_IFF(ALIAS_PGA3D_IS_PROBE(ALIAS_PGA3D_PROBE X))(ALIAS_PGA3D_IS_ZERO1, ALIAS_PGA3D_IS_ZERO2)(X)
#define ALIAS_PGA3D_IS_ZERO1(X) 0
#define ALIAS_PGA3D_IS_ZERO2(X) ALIAS_PGA3D_IS_PROBE(ALIAS_PGA3D_CAT(ALIAS_PGA3D_IS_ZERO3_, X)())
#define ALIAS_PGA3D_IS_ZERO3_0 ALIAS_PGA3D_PROBE
#define ALIAS_PGA3D_IS_NONZERO(X) ALIAS_PGA3D_IF(ALIAS_PGA3D_IS_ZERO(X))(0)(1)
#define ALIAS_PGA3D_NEG(X) ALIAS_PGA3D_IF(ALIAS_PGA3D_IS_ZERO(X))( 0 )( (-X) )
#define ALIAS_PGA3D_ADD(X, Y) ALIAS_PGA3D_IF2(ALIAS_PGA3D_IS_ZERO(X), ALIAS_PGA3D_IS_ZERO(Y))( 0 )(   Y  )( X )( X+Y )
#define ALIAS_PGA3D_SUB(X, Y) ALIAS_PGA3D_IF2(ALIAS_PGA3D_IS_ZERO(X), ALIAS_PGA3D_IS_ZERO(Y))( 0 )( (-Y) )( X )( X-Y )
#define ALIAS_PGA3D_ADD_MUL(X, Y) ALIAS_PGA3D_IF(ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_ZERO(X), ALIAS_PGA3D_IS_ZERO(Y)))( )( +(X*Y) )
#define ALIAS_PGA3D_SUB_MUL(X, Y) ALIAS_PGA3D_IF(ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_ZERO(X), ALIAS_PGA3D_IS_ZERO(Y)))( )( -(X*Y) )
// cayley table:
// one    e0     e1     e2     e3     e01    e02    e03    e12    e13    e23    e012   e013   e023   e123   e0123 
// e0     0      e01    e02    e03    0      0      0      e012   e013   e023   0      0      0      e0123  0     
// e1     -e01   one    e12    e13    -e0    -e012  -e013  e2     e3     e123   -e02   -e03   -e0123 e23    -e023 
// e2     -e02   -e12   one    e23    e012   -e0    -e023  -e1    -e123  e3     e01    e0123  -e03   -e13   e013  
// e3     -e03   -e13   -e23   one    e013   e023   -e0    e123   -e1    -e2    -e0123 e01    e02    e12    -e012 
// e01    0      e0     e012   e013   0      0      0      e02    e03    e0123  0      0      0      e023   0     
// e02    0      -e012  e0     e023   0      0      0      -e01   -e0123 e03    0      0      0      -e013  0     
// e03    0      -e013  -e023  e0     0      0      0      e0123  -e01   -e02   0      0      0      e012   0     
// e12    e012   -e2    e1     e123   -e02   e01    e0123  -one   -e23   e13    -e0    -e023  e013   -e3    -e03  
// e13    e013   -e3    -e123  e1     -e03   -e0123 e01    e23    -one   -e12   e023   -e0    -e012  e2     e02   
// e23    e023   e123   -e3    e2     e0123  -e03   e02    -e13   e12    -one   -e013  e012   -e0    -e1    -e01  
// e012   0      -e02   e01    e0123  0      0      0      -e0    -e023  e013   0      0      0      -e03   0     
// e013   0      -e03   -e0123 e01    0      0      0      e023   -e0    -e012  0      0      0      e02    0     
// e023   0      e0123  -e03   e02    0      0      0      -e013  e012   -e0    0      0      0      -e01   0     
// e123   -e0123 e23    -e13   e12    -e023  e013   -e012  -e3    e2     -e1    e03    -e02   e01    -one   e0    
// e0123  0      e023   -e013  e012   0      0      0      -e03   e02    -e01   0      0      0      -e0    0     
typedef struct alias_pga3d_00000 { union { float _; }; } alias_pga3d_00000;
typedef struct alias_pga3d_10000 { union { float _; struct { float one; }; }; } alias_pga3d_10000, alias_pga3d_Scalar;
typedef struct alias_pga3d_01000 { union { float _; struct { float e0, e1, e2, e3; }; }; } alias_pga3d_01000, alias_pga3d_Vector, alias_pga3d_AntiTrivector;
typedef struct alias_pga3d_11000 { union { float _; struct { float one, e0, e1, e2, e3; }; }; } alias_pga3d_11000;
typedef struct alias_pga3d_00100 { union { float _; struct { float e01, e02, e03, e12, e13, e23; }; }; } alias_pga3d_00100, alias_pga3d_Bivector, alias_pga3d_AntiBivector;
typedef struct alias_pga3d_10100 { union { float _; struct { float one, e01, e02, e03, e12, e13, e23; }; }; } alias_pga3d_10100;
typedef struct alias_pga3d_01100 { union { float _; struct { float e0, e1, e2, e3, e01, e02, e03, e12, e13, e23; }; }; } alias_pga3d_01100;
typedef struct alias_pga3d_11100 { union { float _; struct { float one, e0, e1, e2, e3, e01, e02, e03, e12, e13, e23; }; }; } alias_pga3d_11100;
typedef struct alias_pga3d_00010 { union { float _; struct { float e012, e013, e023, e123; }; }; } alias_pga3d_00010, alias_pga3d_Trivector, alias_pga3d_AntiVector;
typedef struct alias_pga3d_10010 { union { float _; struct { float one, e012, e013, e023, e123; }; }; } alias_pga3d_10010;
typedef struct alias_pga3d_01010 { union { float _; struct { float e0, e1, e2, e3, e012, e013, e023, e123; }; }; } alias_pga3d_01010;
typedef struct alias_pga3d_11010 { union { float _; struct { float one, e0, e1, e2, e3, e012, e013, e023, e123; }; }; } alias_pga3d_11010;
typedef struct alias_pga3d_00110 { union { float _; struct { float e01, e02, e03, e12, e13, e23, e012, e013, e023, e123; }; }; } alias_pga3d_00110;
typedef struct alias_pga3d_10110 { union { float _; struct { float one, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123; }; }; } alias_pga3d_10110;
typedef struct alias_pga3d_01110 { union { float _; struct { float e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123; }; }; } alias_pga3d_01110;
typedef struct alias_pga3d_11110 { union { float _; struct { float one, e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123; }; }; } alias_pga3d_11110;
typedef struct alias_pga3d_00001 { union { float _; struct { float e0123; }; }; } alias_pga3d_00001, alias_pga3d_AntiScalar;
typedef struct alias_pga3d_10001 { union { float _; struct { float one, e0123; }; }; } alias_pga3d_10001;
typedef struct alias_pga3d_01001 { union { float _; struct { float e0, e1, e2, e3, e0123; }; }; } alias_pga3d_01001;
typedef struct alias_pga3d_11001 { union { float _; struct { float one, e0, e1, e2, e3, e0123; }; }; } alias_pga3d_11001;
typedef struct alias_pga3d_00101 { union { float _; struct { float e01, e02, e03, e12, e13, e23, e0123; }; }; } alias_pga3d_00101;
typedef struct alias_pga3d_10101 { union { float _; struct { float one, e01, e02, e03, e12, e13, e23, e0123; }; }; } alias_pga3d_10101;
typedef struct alias_pga3d_01101 { union { float _; struct { float e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e0123; }; }; } alias_pga3d_01101;
typedef struct alias_pga3d_11101 { union { float _; struct { float one, e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e0123; }; }; } alias_pga3d_11101;
typedef struct alias_pga3d_00011 { union { float _; struct { float e012, e013, e023, e123, e0123; }; }; } alias_pga3d_00011;
typedef struct alias_pga3d_10011 { union { float _; struct { float one, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_10011;
typedef struct alias_pga3d_01011 { union { float _; struct { float e0, e1, e2, e3, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_01011;
typedef struct alias_pga3d_11011 { union { float _; struct { float one, e0, e1, e2, e3, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_11011;
typedef struct alias_pga3d_00111 { union { float _; struct { float e01, e02, e03, e12, e13, e23, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_00111;
typedef struct alias_pga3d_10111 { union { float _; struct { float one, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_10111;
typedef struct alias_pga3d_01111 { union { float _; struct { float e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_01111;
typedef struct alias_pga3d_11111 { union { float _; struct { float one, e0, e1, e2, e3, e01, e02, e03, e12, e13, e23, e012, e013, e023, e123, e0123; }; }; } alias_pga3d_11111;
#define ALIAS_PGA3D_GRADE(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    ALIAS_PGA3D_IS_NONZERO(Xone) \
  , ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe0), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe1), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe2), ALIAS_PGA3D_IS_NONZERO(Xe3)))) \
  , ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe01), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe02), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe03), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe12), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe13), ALIAS_PGA3D_IS_NONZERO(Xe23)))))) \
  , ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe012), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe013), ALIAS_PGA3D_OR(ALIAS_PGA3D_IS_NONZERO(Xe023), ALIAS_PGA3D_IS_NONZERO(Xe123)))) \
  , ALIAS_PGA3D_IS_NONZERO(Xe0123) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_TYPE(X0,X1,X2,X3,X4) ALIAS_PGA3D_TYPE_(X0,X1,X2,X3,X4)
#define ALIAS_PGA3D_TYPE_(X0,X1,X2,X3,X4) alias_pga3d_ ## X0 ## X1 ## X2 ## X3 ## X4
#define ALIAS_PGA3D_UNARY(OP, X) ALIAS_PGA3D_UNARY0(OP, ALIAS_PGA3D_UNPACK X)
#define ALIAS_PGA3D_UNARY0(...) ALIAS_PGA3D_UNARY1(__VA_ARGS__)
#define ALIAS_PGA3D_UNARY1(OP, X0,X1,X2,X3,X4,X) ALIAS_PGA3D_UNARY2( \
    OP \
  , ALIAS_PGA3D_IF(X0)(_x.one)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e0)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e1)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e2)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e3)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e01)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e02)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e03)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e12)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e13)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e23)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e012)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e013)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e023)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e123)(0) \
  , ALIAS_PGA3D_IF(X4)(_x.e0123)(0) \
  , X0,X1,X2,X3,X4,X \
  )
#define ALIAS_PGA3D_UNARY2(OP, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123,X0,X1,X2,X3,X4,X) OP(ALIAS_PGA3D_UNARY3, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, X0,X1,X2,X3,X4,X)
#define ALIAS_PGA3D_UNARY3(Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X) ALIAS_PGA3D_GRADE(ALIAS_PGA3D_UNARY4, Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123, Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X)
#define ALIAS_PGA3D_UNARY4(Z0,Z1,Z2,Z3,Z4,Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X) (Z0,Z1,Z2,Z3,Z4, __extension__ ({ \
  ALIAS_PGA3D_TYPE(X0,X1,X2,X3,X4) _x = X; \
  (ALIAS_PGA3D_TYPE(Z0,Z1,Z2,Z3,Z4)) { \
    ._ = 0 \
    ALIAS_PGA3D_IF(Z0)(, .one = Zone)() \
    ALIAS_PGA3D_IF(Z1)(, .e0 = Ze0)() \
    ALIAS_PGA3D_IF(Z1)(, .e1 = Ze1)() \
    ALIAS_PGA3D_IF(Z1)(, .e2 = Ze2)() \
    ALIAS_PGA3D_IF(Z1)(, .e3 = Ze3)() \
    ALIAS_PGA3D_IF(Z2)(, .e01 = Ze01)() \
    ALIAS_PGA3D_IF(Z2)(, .e02 = Ze02)() \
    ALIAS_PGA3D_IF(Z2)(, .e03 = Ze03)() \
    ALIAS_PGA3D_IF(Z2)(, .e12 = Ze12)() \
    ALIAS_PGA3D_IF(Z2)(, .e13 = Ze13)() \
    ALIAS_PGA3D_IF(Z2)(, .e23 = Ze23)() \
    ALIAS_PGA3D_IF(Z3)(, .e012 = Ze012)() \
    ALIAS_PGA3D_IF(Z3)(, .e013 = Ze013)() \
    ALIAS_PGA3D_IF(Z3)(, .e023 = Ze023)() \
    ALIAS_PGA3D_IF(Z3)(, .e123 = Ze123)() \
    ALIAS_PGA3D_IF(Z4)(, .e0123 = Ze0123)() \
  }; \
}))
#define ALIAS_PGA3D_OP_GRADE_0(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xone \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_GRADE_1(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    0 \
  , Xe0 \
  , Xe1 \
  , Xe2 \
  , Xe3 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_GRADE_2(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe01 \
  , Xe02 \
  , Xe03 \
  , Xe12 \
  , Xe13 \
  , Xe23 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_GRADE_3(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe012 \
  , Xe013 \
  , Xe023 \
  , Xe123 \
  , 0 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_GRADE_4(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , 0 \
  , Xe0123 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_NEGATE(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    ALIAS_PGA3D_NEG(Xone) \
  , ALIAS_PGA3D_NEG(Xe0) \
  , ALIAS_PGA3D_NEG(Xe1) \
  , ALIAS_PGA3D_NEG(Xe2) \
  , ALIAS_PGA3D_NEG(Xe3) \
  , ALIAS_PGA3D_NEG(Xe01) \
  , ALIAS_PGA3D_NEG(Xe02) \
  , ALIAS_PGA3D_NEG(Xe03) \
  , ALIAS_PGA3D_NEG(Xe12) \
  , ALIAS_PGA3D_NEG(Xe13) \
  , ALIAS_PGA3D_NEG(Xe23) \
  , ALIAS_PGA3D_NEG(Xe012) \
  , ALIAS_PGA3D_NEG(Xe013) \
  , ALIAS_PGA3D_NEG(Xe023) \
  , ALIAS_PGA3D_NEG(Xe123) \
  , ALIAS_PGA3D_NEG(Xe0123) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_DUAL(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xe0123 \
  , Xe123 \
  , ALIAS_PGA3D_NEG(Xe023) \
  , Xe013 \
  , ALIAS_PGA3D_NEG(Xe012) \
  , Xe23 \
  , ALIAS_PGA3D_NEG(Xe13) \
  , Xe12 \
  , Xe03 \
  , ALIAS_PGA3D_NEG(Xe02) \
  , Xe01 \
  , Xe3 \
  , ALIAS_PGA3D_NEG(Xe2) \
  , Xe1 \
  , ALIAS_PGA3D_NEG(Xe0) \
  , Xone \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_UNDUAL(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xe0123 \
  , ALIAS_PGA3D_NEG(Xe123) \
  , Xe023 \
  , ALIAS_PGA3D_NEG(Xe013) \
  , Xe012 \
  , Xe23 \
  , ALIAS_PGA3D_NEG(Xe13) \
  , Xe12 \
  , Xe03 \
  , ALIAS_PGA3D_NEG(Xe02) \
  , Xe01 \
  , ALIAS_PGA3D_NEG(Xe3) \
  , Xe2 \
  , ALIAS_PGA3D_NEG(Xe1) \
  , Xe0 \
  , Xone \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_POLAR(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    0 \
  , Xe0 \
  , 0 \
  , 0 \
  , 0 \
  , ALIAS_PGA3D_NEG(Xe01) \
  , Xe02 \
  , ALIAS_PGA3D_NEG(Xe03) \
  , 0 \
  , 0 \
  , 0 \
  , ALIAS_PGA3D_NEG(Xe012) \
  , Xe013 \
  , ALIAS_PGA3D_NEG(Xe023) \
  , 0 \
  , Xe0123 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_REVERSE(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xone \
  , Xe0 \
  , Xe1 \
  , Xe2 \
  , Xe3 \
  , ALIAS_PGA3D_NEG(Xe01) \
  , ALIAS_PGA3D_NEG(Xe02) \
  , ALIAS_PGA3D_NEG(Xe03) \
  , ALIAS_PGA3D_NEG(Xe12) \
  , ALIAS_PGA3D_NEG(Xe13) \
  , ALIAS_PGA3D_NEG(Xe23) \
  , ALIAS_PGA3D_NEG(Xe012) \
  , ALIAS_PGA3D_NEG(Xe013) \
  , ALIAS_PGA3D_NEG(Xe023) \
  , ALIAS_PGA3D_NEG(Xe123) \
  , Xe0123 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_INVOLUTE(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xone \
  , ALIAS_PGA3D_NEG(Xe0) \
  , ALIAS_PGA3D_NEG(Xe1) \
  , ALIAS_PGA3D_NEG(Xe2) \
  , ALIAS_PGA3D_NEG(Xe3) \
  , Xe01 \
  , Xe02 \
  , Xe03 \
  , Xe12 \
  , Xe13 \
  , Xe23 \
  , ALIAS_PGA3D_NEG(Xe012) \
  , ALIAS_PGA3D_NEG(Xe013) \
  , ALIAS_PGA3D_NEG(Xe023) \
  , ALIAS_PGA3D_NEG(Xe123) \
  , Xe0123 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_CONJUGATE(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, ...) RETURN( \
    Xone \
  , ALIAS_PGA3D_NEG(Xe0) \
  , ALIAS_PGA3D_NEG(Xe1) \
  , ALIAS_PGA3D_NEG(Xe2) \
  , ALIAS_PGA3D_NEG(Xe3) \
  , ALIAS_PGA3D_NEG(Xe01) \
  , ALIAS_PGA3D_NEG(Xe02) \
  , ALIAS_PGA3D_NEG(Xe03) \
  , ALIAS_PGA3D_NEG(Xe12) \
  , ALIAS_PGA3D_NEG(Xe13) \
  , ALIAS_PGA3D_NEG(Xe23) \
  , Xe012 \
  , Xe013 \
  , Xe023 \
  , Xe123 \
  , Xe0123 \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_BINARY(OP, X, Y) ALIAS_PGA3D_BINARY0(OP, ALIAS_PGA3D_UNPACK X, ALIAS_PGA3D_UNPACK Y)
#define ALIAS_PGA3D_BINARY0(...) ALIAS_PGA3D_BINARY1(__VA_ARGS__)
#define ALIAS_PGA3D_BINARY1(OP, X0,X1,X2,X3,X4,X,Y0,Y1,Y2,Y3,Y4,Y) ALIAS_PGA3D_BINARY2( \
    OP \
  , ALIAS_PGA3D_IF(X0)(_x.one)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e0)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e1)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e2)(0) \
  , ALIAS_PGA3D_IF(X1)(_x.e3)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e01)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e02)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e03)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e12)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e13)(0) \
  , ALIAS_PGA3D_IF(X2)(_x.e23)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e012)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e013)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e023)(0) \
  , ALIAS_PGA3D_IF(X3)(_x.e123)(0) \
  , ALIAS_PGA3D_IF(X4)(_x.e0123)(0) \
  , ALIAS_PGA3D_IF(Y0)(_y.one)(0) \
  , ALIAS_PGA3D_IF(Y1)(_y.e0)(0) \
  , ALIAS_PGA3D_IF(Y1)(_y.e1)(0) \
  , ALIAS_PGA3D_IF(Y1)(_y.e2)(0) \
  , ALIAS_PGA3D_IF(Y1)(_y.e3)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e01)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e02)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e03)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e12)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e13)(0) \
  , ALIAS_PGA3D_IF(Y2)(_y.e23)(0) \
  , ALIAS_PGA3D_IF(Y3)(_y.e012)(0) \
  , ALIAS_PGA3D_IF(Y3)(_y.e013)(0) \
  , ALIAS_PGA3D_IF(Y3)(_y.e023)(0) \
  , ALIAS_PGA3D_IF(Y3)(_y.e123)(0) \
  , ALIAS_PGA3D_IF(Y4)(_y.e0123)(0) \
  , X0,X1,X2,X3,X4,X \
  , Y0,Y1,Y2,Y3,Y4,Y \
  )
#define ALIAS_PGA3D_BINARY2(OP, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123,Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) OP(ALIAS_PGA3D_BINARY3, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123,Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y)
#define ALIAS_PGA3D_BINARY3(Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) ALIAS_PGA3D_GRADE(ALIAS_PGA3D_BINARY4, Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123, Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y)
#define ALIAS_PGA3D_BINARY4(Z0,Z1,Z2,Z3,Z4,Zone,Ze0,Ze1,Ze2,Ze3,Ze01,Ze02,Ze03,Ze12,Ze13,Ze23,Ze012,Ze013,Ze023,Ze123,Ze0123,X0,X1,X2,X3,X4,X, Y0,Y1,Y2,Y3,Y4,Y) (Z0,Z1,Z2,Z3,Z4, __extension__ ({ \
  ALIAS_PGA3D_TYPE(X0,X1,X2,X3,X4) _x = X; \
  ALIAS_PGA3D_TYPE(Y0,Y1,Y2,Y3,Y4) _y = Y; \
  (ALIAS_PGA3D_TYPE(Z0,Z1,Z2,Z3,Z4)) { \
    ._ = 0 \
    ALIAS_PGA3D_IF(Z0)(, .one = Zone)() \
    ALIAS_PGA3D_IF(Z1)(, .e0 = Ze0)() \
    ALIAS_PGA3D_IF(Z1)(, .e1 = Ze1)() \
    ALIAS_PGA3D_IF(Z1)(, .e2 = Ze2)() \
    ALIAS_PGA3D_IF(Z1)(, .e3 = Ze3)() \
    ALIAS_PGA3D_IF(Z2)(, .e01 = Ze01)() \
    ALIAS_PGA3D_IF(Z2)(, .e02 = Ze02)() \
    ALIAS_PGA3D_IF(Z2)(, .e03 = Ze03)() \
    ALIAS_PGA3D_IF(Z2)(, .e12 = Ze12)() \
    ALIAS_PGA3D_IF(Z2)(, .e13 = Ze13)() \
    ALIAS_PGA3D_IF(Z2)(, .e23 = Ze23)() \
    ALIAS_PGA3D_IF(Z3)(, .e012 = Ze012)() \
    ALIAS_PGA3D_IF(Z3)(, .e013 = Ze013)() \
    ALIAS_PGA3D_IF(Z3)(, .e023 = Ze023)() \
    ALIAS_PGA3D_IF(Z3)(, .e123 = Ze123)() \
    ALIAS_PGA3D_IF(Z4)(, .e0123 = Ze0123)() \
  }; \
}))
#define ALIAS_PGA3D_OP_ADD(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    ALIAS_PGA3D_ADD(Xone, Yone) \
  , ALIAS_PGA3D_ADD(Xe0, Ye0) \
  , ALIAS_PGA3D_ADD(Xe1, Ye1) \
  , ALIAS_PGA3D_ADD(Xe2, Ye2) \
  , ALIAS_PGA3D_ADD(Xe3, Ye3) \
  , ALIAS_PGA3D_ADD(Xe01, Ye01) \
  , ALIAS_PGA3D_ADD(Xe02, Ye02) \
  , ALIAS_PGA3D_ADD(Xe03, Ye03) \
  , ALIAS_PGA3D_ADD(Xe12, Ye12) \
  , ALIAS_PGA3D_ADD(Xe13, Ye13) \
  , ALIAS_PGA3D_ADD(Xe23, Ye23) \
  , ALIAS_PGA3D_ADD(Xe012, Ye012) \
  , ALIAS_PGA3D_ADD(Xe013, Ye013) \
  , ALIAS_PGA3D_ADD(Xe023, Ye023) \
  , ALIAS_PGA3D_ADD(Xe123, Ye123) \
  , ALIAS_PGA3D_ADD(Xe0123, Ye0123) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_SUBTRACT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    ALIAS_PGA3D_SUB(Xone, Yone) \
  , ALIAS_PGA3D_SUB(Xe0, Ye0) \
  , ALIAS_PGA3D_SUB(Xe1, Ye1) \
  , ALIAS_PGA3D_SUB(Xe2, Ye2) \
  , ALIAS_PGA3D_SUB(Xe3, Ye3) \
  , ALIAS_PGA3D_SUB(Xe01, Ye01) \
  , ALIAS_PGA3D_SUB(Xe02, Ye02) \
  , ALIAS_PGA3D_SUB(Xe03, Ye03) \
  , ALIAS_PGA3D_SUB(Xe12, Ye12) \
  , ALIAS_PGA3D_SUB(Xe13, Ye13) \
  , ALIAS_PGA3D_SUB(Xe23, Ye23) \
  , ALIAS_PGA3D_SUB(Xe012, Ye012) \
  , ALIAS_PGA3D_SUB(Xe013, Ye013) \
  , ALIAS_PGA3D_SUB(Xe023, Ye023) \
  , ALIAS_PGA3D_SUB(Xe123, Ye123) \
  , ALIAS_PGA3D_SUB(Xe0123, Ye0123) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_GEOMETRIC_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 ALIAS_PGA3D_ADD_MUL(Xone,Yone) ALIAS_PGA3D_ADD_MUL(Xe1,Ye1) ALIAS_PGA3D_ADD_MUL(Xe2,Ye2) ALIAS_PGA3D_ADD_MUL(Xe3,Ye3) ALIAS_PGA3D_SUB_MUL(Xe12,Ye12) ALIAS_PGA3D_SUB_MUL(Xe13,Ye13) ALIAS_PGA3D_SUB_MUL(Xe23,Ye23) ALIAS_PGA3D_SUB_MUL(Xe123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0,Yone) ALIAS_PGA3D_SUB_MUL(Xe1,Ye01) ALIAS_PGA3D_SUB_MUL(Xe2,Ye02) ALIAS_PGA3D_SUB_MUL(Xe3,Ye03) ALIAS_PGA3D_ADD_MUL(Xe01,Ye1) ALIAS_PGA3D_ADD_MUL(Xe02,Ye2) ALIAS_PGA3D_ADD_MUL(Xe03,Ye3) ALIAS_PGA3D_SUB_MUL(Xe12,Ye012) ALIAS_PGA3D_SUB_MUL(Xe13,Ye013) ALIAS_PGA3D_SUB_MUL(Xe23,Ye023) ALIAS_PGA3D_SUB_MUL(Xe012,Ye12) ALIAS_PGA3D_SUB_MUL(Xe013,Ye13) ALIAS_PGA3D_SUB_MUL(Xe023,Ye23) ALIAS_PGA3D_ADD_MUL(Xe123,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye1) ALIAS_PGA3D_ADD_MUL(Xe1,Yone) ALIAS_PGA3D_SUB_MUL(Xe2,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye13) ALIAS_PGA3D_ADD_MUL(Xe12,Ye2) ALIAS_PGA3D_ADD_MUL(Xe13,Ye3) ALIAS_PGA3D_SUB_MUL(Xe23,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye23) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye2) ALIAS_PGA3D_ADD_MUL(Xe1,Ye12) ALIAS_PGA3D_ADD_MUL(Xe2,Yone) ALIAS_PGA3D_SUB_MUL(Xe3,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye1) ALIAS_PGA3D_ADD_MUL(Xe13,Ye123) ALIAS_PGA3D_ADD_MUL(Xe23,Ye3) ALIAS_PGA3D_ADD_MUL(Xe123,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye3) ALIAS_PGA3D_ADD_MUL(Xe1,Ye13) ALIAS_PGA3D_ADD_MUL(Xe2,Ye23) ALIAS_PGA3D_ADD_MUL(Xe3,Yone) ALIAS_PGA3D_SUB_MUL(Xe12,Ye123) ALIAS_PGA3D_SUB_MUL(Xe13,Ye1) ALIAS_PGA3D_SUB_MUL(Xe23,Ye2) ALIAS_PGA3D_SUB_MUL(Xe123,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye01) ALIAS_PGA3D_ADD_MUL(Xe0,Ye1) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0) ALIAS_PGA3D_ADD_MUL(Xe2,Ye012) ALIAS_PGA3D_ADD_MUL(Xe3,Ye013) ALIAS_PGA3D_ADD_MUL(Xe01,Yone) ALIAS_PGA3D_SUB_MUL(Xe02,Ye12) ALIAS_PGA3D_SUB_MUL(Xe03,Ye13) ALIAS_PGA3D_ADD_MUL(Xe12,Ye02) ALIAS_PGA3D_ADD_MUL(Xe13,Ye03) ALIAS_PGA3D_SUB_MUL(Xe23,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Ye2) ALIAS_PGA3D_ADD_MUL(Xe013,Ye3) ALIAS_PGA3D_SUB_MUL(Xe023,Ye123) ALIAS_PGA3D_ADD_MUL(Xe123,Ye023) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye23) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye02) ALIAS_PGA3D_ADD_MUL(Xe0,Ye2) ALIAS_PGA3D_SUB_MUL(Xe1,Ye012) ALIAS_PGA3D_SUB_MUL(Xe2,Ye0) ALIAS_PGA3D_ADD_MUL(Xe3,Ye023) ALIAS_PGA3D_ADD_MUL(Xe01,Ye12) ALIAS_PGA3D_ADD_MUL(Xe02,Yone) ALIAS_PGA3D_SUB_MUL(Xe03,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye01) ALIAS_PGA3D_ADD_MUL(Xe13,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe23,Ye03) ALIAS_PGA3D_SUB_MUL(Xe012,Ye1) ALIAS_PGA3D_ADD_MUL(Xe013,Ye123) ALIAS_PGA3D_ADD_MUL(Xe023,Ye3) ALIAS_PGA3D_SUB_MUL(Xe123,Ye013) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye03) ALIAS_PGA3D_ADD_MUL(Xe0,Ye3) ALIAS_PGA3D_SUB_MUL(Xe1,Ye013) ALIAS_PGA3D_SUB_MUL(Xe2,Ye023) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0) ALIAS_PGA3D_ADD_MUL(Xe01,Ye13) ALIAS_PGA3D_ADD_MUL(Xe02,Ye23) ALIAS_PGA3D_ADD_MUL(Xe03,Yone) ALIAS_PGA3D_SUB_MUL(Xe12,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe13,Ye01) ALIAS_PGA3D_SUB_MUL(Xe23,Ye02) ALIAS_PGA3D_SUB_MUL(Xe012,Ye123) ALIAS_PGA3D_SUB_MUL(Xe013,Ye1) ALIAS_PGA3D_SUB_MUL(Xe023,Ye2) ALIAS_PGA3D_ADD_MUL(Xe123,Ye012) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye12) ALIAS_PGA3D_ADD_MUL(Xe1,Ye2) ALIAS_PGA3D_SUB_MUL(Xe2,Ye1) ALIAS_PGA3D_ADD_MUL(Xe3,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Yone) ALIAS_PGA3D_SUB_MUL(Xe13,Ye23) ALIAS_PGA3D_ADD_MUL(Xe23,Ye13) ALIAS_PGA3D_ADD_MUL(Xe123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye13) ALIAS_PGA3D_ADD_MUL(Xe1,Ye3) ALIAS_PGA3D_SUB_MUL(Xe2,Ye123) ALIAS_PGA3D_SUB_MUL(Xe3,Ye1) ALIAS_PGA3D_ADD_MUL(Xe12,Ye23) ALIAS_PGA3D_ADD_MUL(Xe13,Yone) ALIAS_PGA3D_SUB_MUL(Xe23,Ye12) ALIAS_PGA3D_SUB_MUL(Xe123,Ye2) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye23) ALIAS_PGA3D_ADD_MUL(Xe1,Ye123) ALIAS_PGA3D_ADD_MUL(Xe2,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye2) ALIAS_PGA3D_SUB_MUL(Xe12,Ye13) ALIAS_PGA3D_ADD_MUL(Xe13,Ye12) ALIAS_PGA3D_ADD_MUL(Xe23,Yone) ALIAS_PGA3D_ADD_MUL(Xe123,Ye1) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye012) ALIAS_PGA3D_ADD_MUL(Xe0,Ye12) ALIAS_PGA3D_SUB_MUL(Xe1,Ye02) ALIAS_PGA3D_ADD_MUL(Xe2,Ye01) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe01,Ye2) ALIAS_PGA3D_SUB_MUL(Xe02,Ye1) ALIAS_PGA3D_ADD_MUL(Xe03,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Ye0) ALIAS_PGA3D_SUB_MUL(Xe13,Ye023) ALIAS_PGA3D_ADD_MUL(Xe23,Ye013) ALIAS_PGA3D_ADD_MUL(Xe012,Yone) ALIAS_PGA3D_SUB_MUL(Xe013,Ye23) ALIAS_PGA3D_ADD_MUL(Xe023,Ye13) ALIAS_PGA3D_SUB_MUL(Xe123,Ye03) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye013) ALIAS_PGA3D_ADD_MUL(Xe0,Ye13) ALIAS_PGA3D_SUB_MUL(Xe1,Ye03) ALIAS_PGA3D_ADD_MUL(Xe2,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe3,Ye01) ALIAS_PGA3D_ADD_MUL(Xe01,Ye3) ALIAS_PGA3D_SUB_MUL(Xe02,Ye123) ALIAS_PGA3D_SUB_MUL(Xe03,Ye1) ALIAS_PGA3D_ADD_MUL(Xe12,Ye023) ALIAS_PGA3D_ADD_MUL(Xe13,Ye0) ALIAS_PGA3D_SUB_MUL(Xe23,Ye012) ALIAS_PGA3D_ADD_MUL(Xe012,Ye23) ALIAS_PGA3D_ADD_MUL(Xe013,Yone) ALIAS_PGA3D_SUB_MUL(Xe023,Ye12) ALIAS_PGA3D_ADD_MUL(Xe123,Ye02) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye2) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye023) ALIAS_PGA3D_ADD_MUL(Xe0,Ye23) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe2,Ye03) ALIAS_PGA3D_ADD_MUL(Xe3,Ye02) ALIAS_PGA3D_ADD_MUL(Xe01,Ye123) ALIAS_PGA3D_ADD_MUL(Xe02,Ye3) ALIAS_PGA3D_SUB_MUL(Xe03,Ye2) ALIAS_PGA3D_SUB_MUL(Xe12,Ye013) ALIAS_PGA3D_ADD_MUL(Xe13,Ye012) ALIAS_PGA3D_ADD_MUL(Xe23,Ye0) ALIAS_PGA3D_SUB_MUL(Xe012,Ye13) ALIAS_PGA3D_ADD_MUL(Xe013,Ye12) ALIAS_PGA3D_ADD_MUL(Xe023,Yone) ALIAS_PGA3D_SUB_MUL(Xe123,Ye01) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye1) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye123) ALIAS_PGA3D_ADD_MUL(Xe1,Ye23) ALIAS_PGA3D_SUB_MUL(Xe2,Ye13) ALIAS_PGA3D_ADD_MUL(Xe3,Ye12) ALIAS_PGA3D_ADD_MUL(Xe12,Ye3) ALIAS_PGA3D_SUB_MUL(Xe13,Ye2) ALIAS_PGA3D_ADD_MUL(Xe23,Ye1) ALIAS_PGA3D_ADD_MUL(Xe123,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe0,Ye123) ALIAS_PGA3D_SUB_MUL(Xe1,Ye023) ALIAS_PGA3D_ADD_MUL(Xe2,Ye013) ALIAS_PGA3D_SUB_MUL(Xe3,Ye012) ALIAS_PGA3D_ADD_MUL(Xe01,Ye23) ALIAS_PGA3D_SUB_MUL(Xe02,Ye13) ALIAS_PGA3D_ADD_MUL(Xe03,Ye12) ALIAS_PGA3D_ADD_MUL(Xe12,Ye03) ALIAS_PGA3D_SUB_MUL(Xe13,Ye02) ALIAS_PGA3D_ADD_MUL(Xe23,Ye01) ALIAS_PGA3D_ADD_MUL(Xe012,Ye3) ALIAS_PGA3D_SUB_MUL(Xe013,Ye2) ALIAS_PGA3D_ADD_MUL(Xe023,Ye1) ALIAS_PGA3D_SUB_MUL(Xe123,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0123,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_OUTER_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 ALIAS_PGA3D_ADD_MUL(Xone,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye1) ALIAS_PGA3D_ADD_MUL(Xe1,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye2) ALIAS_PGA3D_ADD_MUL(Xe2,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye3) ALIAS_PGA3D_ADD_MUL(Xe3,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye01) ALIAS_PGA3D_ADD_MUL(Xe0,Ye1) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0) ALIAS_PGA3D_ADD_MUL(Xe01,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye02) ALIAS_PGA3D_ADD_MUL(Xe0,Ye2) ALIAS_PGA3D_SUB_MUL(Xe2,Ye0) ALIAS_PGA3D_ADD_MUL(Xe02,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye03) ALIAS_PGA3D_ADD_MUL(Xe0,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0) ALIAS_PGA3D_ADD_MUL(Xe03,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye12) ALIAS_PGA3D_ADD_MUL(Xe1,Ye2) ALIAS_PGA3D_SUB_MUL(Xe2,Ye1) ALIAS_PGA3D_ADD_MUL(Xe12,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye13) ALIAS_PGA3D_ADD_MUL(Xe1,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye1) ALIAS_PGA3D_ADD_MUL(Xe13,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye23) ALIAS_PGA3D_ADD_MUL(Xe2,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye2) ALIAS_PGA3D_ADD_MUL(Xe23,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye012) ALIAS_PGA3D_ADD_MUL(Xe0,Ye12) ALIAS_PGA3D_SUB_MUL(Xe1,Ye02) ALIAS_PGA3D_ADD_MUL(Xe2,Ye01) ALIAS_PGA3D_ADD_MUL(Xe01,Ye2) ALIAS_PGA3D_SUB_MUL(Xe02,Ye1) ALIAS_PGA3D_ADD_MUL(Xe12,Ye0) ALIAS_PGA3D_ADD_MUL(Xe012,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye013) ALIAS_PGA3D_ADD_MUL(Xe0,Ye13) ALIAS_PGA3D_SUB_MUL(Xe1,Ye03) ALIAS_PGA3D_ADD_MUL(Xe3,Ye01) ALIAS_PGA3D_ADD_MUL(Xe01,Ye3) ALIAS_PGA3D_SUB_MUL(Xe03,Ye1) ALIAS_PGA3D_ADD_MUL(Xe13,Ye0) ALIAS_PGA3D_ADD_MUL(Xe013,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye023) ALIAS_PGA3D_ADD_MUL(Xe0,Ye23) ALIAS_PGA3D_SUB_MUL(Xe2,Ye03) ALIAS_PGA3D_ADD_MUL(Xe3,Ye02) ALIAS_PGA3D_ADD_MUL(Xe02,Ye3) ALIAS_PGA3D_SUB_MUL(Xe03,Ye2) ALIAS_PGA3D_ADD_MUL(Xe23,Ye0) ALIAS_PGA3D_ADD_MUL(Xe023,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye123) ALIAS_PGA3D_ADD_MUL(Xe1,Ye23) ALIAS_PGA3D_SUB_MUL(Xe2,Ye13) ALIAS_PGA3D_ADD_MUL(Xe3,Ye12) ALIAS_PGA3D_ADD_MUL(Xe12,Ye3) ALIAS_PGA3D_SUB_MUL(Xe13,Ye2) ALIAS_PGA3D_ADD_MUL(Xe23,Ye1) ALIAS_PGA3D_ADD_MUL(Xe123,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe0,Ye123) ALIAS_PGA3D_SUB_MUL(Xe1,Ye023) ALIAS_PGA3D_ADD_MUL(Xe2,Ye013) ALIAS_PGA3D_SUB_MUL(Xe3,Ye012) ALIAS_PGA3D_ADD_MUL(Xe01,Ye23) ALIAS_PGA3D_SUB_MUL(Xe02,Ye13) ALIAS_PGA3D_ADD_MUL(Xe03,Ye12) ALIAS_PGA3D_ADD_MUL(Xe12,Ye03) ALIAS_PGA3D_SUB_MUL(Xe13,Ye02) ALIAS_PGA3D_ADD_MUL(Xe23,Ye01) ALIAS_PGA3D_ADD_MUL(Xe012,Ye3) ALIAS_PGA3D_SUB_MUL(Xe013,Ye2) ALIAS_PGA3D_ADD_MUL(Xe023,Ye1) ALIAS_PGA3D_SUB_MUL(Xe123,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0123,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_REGRESSIVE_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe0,Ye123) ALIAS_PGA3D_SUB_MUL(Xe1,Ye023) ALIAS_PGA3D_ADD_MUL(Xe2,Ye013) ALIAS_PGA3D_SUB_MUL(Xe3,Ye012) ALIAS_PGA3D_ADD_MUL(Xe01,Ye23) ALIAS_PGA3D_SUB_MUL(Xe02,Ye13) ALIAS_PGA3D_ADD_MUL(Xe03,Ye12) ALIAS_PGA3D_ADD_MUL(Xe12,Ye03) ALIAS_PGA3D_SUB_MUL(Xe13,Ye02) ALIAS_PGA3D_ADD_MUL(Xe23,Ye01) ALIAS_PGA3D_ADD_MUL(Xe012,Ye3) ALIAS_PGA3D_SUB_MUL(Xe013,Ye2) ALIAS_PGA3D_ADD_MUL(Xe023,Ye1) ALIAS_PGA3D_SUB_MUL(Xe123,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0123,Yone) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe0,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe01,Ye023) ALIAS_PGA3D_ADD_MUL(Xe02,Ye013) ALIAS_PGA3D_SUB_MUL(Xe03,Ye012) ALIAS_PGA3D_SUB_MUL(Xe012,Ye03) ALIAS_PGA3D_ADD_MUL(Xe013,Ye02) ALIAS_PGA3D_SUB_MUL(Xe023,Ye01) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye0) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe1,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe01,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Ye013) ALIAS_PGA3D_SUB_MUL(Xe13,Ye012) ALIAS_PGA3D_SUB_MUL(Xe012,Ye13) ALIAS_PGA3D_ADD_MUL(Xe013,Ye12) ALIAS_PGA3D_SUB_MUL(Xe123,Ye01) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye1) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe2,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe02,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Ye023) ALIAS_PGA3D_SUB_MUL(Xe23,Ye012) ALIAS_PGA3D_SUB_MUL(Xe012,Ye23) ALIAS_PGA3D_ADD_MUL(Xe023,Ye12) ALIAS_PGA3D_SUB_MUL(Xe123,Ye02) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye2) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe3,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe03,Ye123) ALIAS_PGA3D_ADD_MUL(Xe13,Ye023) ALIAS_PGA3D_SUB_MUL(Xe23,Ye013) ALIAS_PGA3D_SUB_MUL(Xe013,Ye23) ALIAS_PGA3D_ADD_MUL(Xe023,Ye13) ALIAS_PGA3D_SUB_MUL(Xe123,Ye03) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe01,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Ye013) ALIAS_PGA3D_SUB_MUL(Xe013,Ye012) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye01) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe02,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Ye023) ALIAS_PGA3D_SUB_MUL(Xe023,Ye012) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye02) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe03,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe013,Ye023) ALIAS_PGA3D_SUB_MUL(Xe023,Ye013) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye03) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe12,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye012) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe13,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe013,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye013) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe23,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe023,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye023) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye23) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe012,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye012) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe013,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye013) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe023,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye023) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe123,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe0123,Ye0123) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_COMMUTATOR_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe1,Ye01) ALIAS_PGA3D_SUB_MUL(Xe2,Ye02) ALIAS_PGA3D_SUB_MUL(Xe3,Ye03) ALIAS_PGA3D_ADD_MUL(Xe01,Ye1) ALIAS_PGA3D_ADD_MUL(Xe02,Ye2) ALIAS_PGA3D_ADD_MUL(Xe03,Ye3) ALIAS_PGA3D_ADD_MUL(Xe123,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye123) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe2,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye13) ALIAS_PGA3D_ADD_MUL(Xe12,Ye2) ALIAS_PGA3D_ADD_MUL(Xe13,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe1,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye1) ALIAS_PGA3D_ADD_MUL(Xe23,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe1,Ye13) ALIAS_PGA3D_ADD_MUL(Xe2,Ye23) ALIAS_PGA3D_SUB_MUL(Xe13,Ye1) ALIAS_PGA3D_SUB_MUL(Xe23,Ye2) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe0,Ye1) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0) ALIAS_PGA3D_SUB_MUL(Xe02,Ye12) ALIAS_PGA3D_SUB_MUL(Xe03,Ye13) ALIAS_PGA3D_ADD_MUL(Xe12,Ye02) ALIAS_PGA3D_ADD_MUL(Xe13,Ye03) ALIAS_PGA3D_SUB_MUL(Xe023,Ye123) ALIAS_PGA3D_ADD_MUL(Xe123,Ye023) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe0,Ye2) ALIAS_PGA3D_SUB_MUL(Xe2,Ye0) ALIAS_PGA3D_ADD_MUL(Xe01,Ye12) ALIAS_PGA3D_SUB_MUL(Xe03,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye01) ALIAS_PGA3D_ADD_MUL(Xe23,Ye03) ALIAS_PGA3D_ADD_MUL(Xe013,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye013) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe0,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0) ALIAS_PGA3D_ADD_MUL(Xe01,Ye13) ALIAS_PGA3D_ADD_MUL(Xe02,Ye23) ALIAS_PGA3D_SUB_MUL(Xe13,Ye01) ALIAS_PGA3D_SUB_MUL(Xe23,Ye02) ALIAS_PGA3D_SUB_MUL(Xe012,Ye123) ALIAS_PGA3D_ADD_MUL(Xe123,Ye012) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe1,Ye2) ALIAS_PGA3D_SUB_MUL(Xe2,Ye1) ALIAS_PGA3D_SUB_MUL(Xe13,Ye23) ALIAS_PGA3D_ADD_MUL(Xe23,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe1,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye1) ALIAS_PGA3D_ADD_MUL(Xe12,Ye23) ALIAS_PGA3D_SUB_MUL(Xe23,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe2,Ye3) ALIAS_PGA3D_SUB_MUL(Xe3,Ye2) ALIAS_PGA3D_SUB_MUL(Xe12,Ye13) ALIAS_PGA3D_ADD_MUL(Xe13,Ye12) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe3,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe03,Ye123) ALIAS_PGA3D_SUB_MUL(Xe13,Ye023) ALIAS_PGA3D_ADD_MUL(Xe23,Ye013) ALIAS_PGA3D_SUB_MUL(Xe013,Ye23) ALIAS_PGA3D_ADD_MUL(Xe023,Ye13) ALIAS_PGA3D_SUB_MUL(Xe123,Ye03) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe2,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe02,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Ye023) ALIAS_PGA3D_SUB_MUL(Xe23,Ye012) ALIAS_PGA3D_ADD_MUL(Xe012,Ye23) ALIAS_PGA3D_SUB_MUL(Xe023,Ye12) ALIAS_PGA3D_ADD_MUL(Xe123,Ye02) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye2) \
  , 0 ALIAS_PGA3D_SUB_MUL(Xe1,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe01,Ye123) ALIAS_PGA3D_SUB_MUL(Xe12,Ye013) ALIAS_PGA3D_ADD_MUL(Xe13,Ye012) ALIAS_PGA3D_SUB_MUL(Xe012,Ye13) ALIAS_PGA3D_ADD_MUL(Xe013,Ye12) ALIAS_PGA3D_SUB_MUL(Xe123,Ye01) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye1) \
  , 0 \
  , 0 ALIAS_PGA3D_ADD_MUL(Xe0,Ye123) ALIAS_PGA3D_SUB_MUL(Xe1,Ye023) ALIAS_PGA3D_ADD_MUL(Xe2,Ye013) ALIAS_PGA3D_SUB_MUL(Xe3,Ye012) ALIAS_PGA3D_ADD_MUL(Xe012,Ye3) ALIAS_PGA3D_SUB_MUL(Xe013,Ye2) ALIAS_PGA3D_ADD_MUL(Xe023,Ye1) ALIAS_PGA3D_SUB_MUL(Xe123,Ye0) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_INNER_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 ALIAS_PGA3D_ADD_MUL(Xone,Yone) ALIAS_PGA3D_ADD_MUL(Xe1,Ye1) ALIAS_PGA3D_ADD_MUL(Xe2,Ye2) ALIAS_PGA3D_ADD_MUL(Xe3,Ye3) ALIAS_PGA3D_SUB_MUL(Xe12,Ye12) ALIAS_PGA3D_SUB_MUL(Xe13,Ye13) ALIAS_PGA3D_SUB_MUL(Xe23,Ye23) ALIAS_PGA3D_SUB_MUL(Xe123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0) ALIAS_PGA3D_ADD_MUL(Xe0,Yone) ALIAS_PGA3D_SUB_MUL(Xe1,Ye01) ALIAS_PGA3D_SUB_MUL(Xe2,Ye02) ALIAS_PGA3D_SUB_MUL(Xe3,Ye03) ALIAS_PGA3D_ADD_MUL(Xe01,Ye1) ALIAS_PGA3D_ADD_MUL(Xe02,Ye2) ALIAS_PGA3D_ADD_MUL(Xe03,Ye3) ALIAS_PGA3D_SUB_MUL(Xe12,Ye012) ALIAS_PGA3D_SUB_MUL(Xe13,Ye013) ALIAS_PGA3D_SUB_MUL(Xe23,Ye023) ALIAS_PGA3D_SUB_MUL(Xe012,Ye12) ALIAS_PGA3D_SUB_MUL(Xe013,Ye13) ALIAS_PGA3D_SUB_MUL(Xe023,Ye23) ALIAS_PGA3D_ADD_MUL(Xe123,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye1) ALIAS_PGA3D_ADD_MUL(Xe1,Yone) ALIAS_PGA3D_SUB_MUL(Xe2,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye13) ALIAS_PGA3D_ADD_MUL(Xe12,Ye2) ALIAS_PGA3D_ADD_MUL(Xe13,Ye3) ALIAS_PGA3D_SUB_MUL(Xe23,Ye123) ALIAS_PGA3D_SUB_MUL(Xe123,Ye23) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye2) ALIAS_PGA3D_ADD_MUL(Xe1,Ye12) ALIAS_PGA3D_ADD_MUL(Xe2,Yone) ALIAS_PGA3D_SUB_MUL(Xe3,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye1) ALIAS_PGA3D_ADD_MUL(Xe13,Ye123) ALIAS_PGA3D_ADD_MUL(Xe23,Ye3) ALIAS_PGA3D_ADD_MUL(Xe123,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye3) ALIAS_PGA3D_ADD_MUL(Xe1,Ye13) ALIAS_PGA3D_ADD_MUL(Xe2,Ye23) ALIAS_PGA3D_ADD_MUL(Xe3,Yone) ALIAS_PGA3D_SUB_MUL(Xe12,Ye123) ALIAS_PGA3D_SUB_MUL(Xe13,Ye1) ALIAS_PGA3D_SUB_MUL(Xe23,Ye2) ALIAS_PGA3D_SUB_MUL(Xe123,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye01) ALIAS_PGA3D_ADD_MUL(Xe2,Ye012) ALIAS_PGA3D_ADD_MUL(Xe3,Ye013) ALIAS_PGA3D_ADD_MUL(Xe01,Yone) ALIAS_PGA3D_SUB_MUL(Xe23,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Ye2) ALIAS_PGA3D_ADD_MUL(Xe013,Ye3) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye23) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye02) ALIAS_PGA3D_SUB_MUL(Xe1,Ye012) ALIAS_PGA3D_ADD_MUL(Xe3,Ye023) ALIAS_PGA3D_ADD_MUL(Xe02,Yone) ALIAS_PGA3D_ADD_MUL(Xe13,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe012,Ye1) ALIAS_PGA3D_ADD_MUL(Xe023,Ye3) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye13) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye03) ALIAS_PGA3D_SUB_MUL(Xe1,Ye013) ALIAS_PGA3D_SUB_MUL(Xe2,Ye023) ALIAS_PGA3D_ADD_MUL(Xe03,Yone) ALIAS_PGA3D_SUB_MUL(Xe12,Ye0123) ALIAS_PGA3D_SUB_MUL(Xe013,Ye1) ALIAS_PGA3D_SUB_MUL(Xe023,Ye2) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye12) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye12) ALIAS_PGA3D_ADD_MUL(Xe3,Ye123) ALIAS_PGA3D_ADD_MUL(Xe12,Yone) ALIAS_PGA3D_ADD_MUL(Xe123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye13) ALIAS_PGA3D_SUB_MUL(Xe2,Ye123) ALIAS_PGA3D_ADD_MUL(Xe13,Yone) ALIAS_PGA3D_SUB_MUL(Xe123,Ye2) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye23) ALIAS_PGA3D_ADD_MUL(Xe1,Ye123) ALIAS_PGA3D_ADD_MUL(Xe23,Yone) ALIAS_PGA3D_ADD_MUL(Xe123,Ye1) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye012) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe012,Yone) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye3) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye013) ALIAS_PGA3D_ADD_MUL(Xe2,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe013,Yone) ALIAS_PGA3D_SUB_MUL(Xe0123,Ye2) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye023) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe023,Yone) ALIAS_PGA3D_ADD_MUL(Xe0123,Ye1) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye123) ALIAS_PGA3D_ADD_MUL(Xe123,Yone) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0123) ALIAS_PGA3D_ADD_MUL(Xe0123,Yone) \
  , ## __VA_ARGS__)
#define ALIAS_PGA3D_OP_LEFT_DOT_PRODUCT(RETURN, Xone,Xe0,Xe1,Xe2,Xe3,Xe01,Xe02,Xe03,Xe12,Xe13,Xe23,Xe012,Xe013,Xe023,Xe123,Xe0123, Yone,Ye0,Ye1,Ye2,Ye3,Ye01,Ye02,Ye03,Ye12,Ye13,Ye23,Ye012,Ye013,Ye023,Ye123,Ye0123, ...) RETURN( \
    0 ALIAS_PGA3D_ADD_MUL(Xone,Yone) ALIAS_PGA3D_ADD_MUL(Xe1,Ye1) ALIAS_PGA3D_ADD_MUL(Xe2,Ye2) ALIAS_PGA3D_ADD_MUL(Xe3,Ye3) ALIAS_PGA3D_SUB_MUL(Xe12,Ye12) ALIAS_PGA3D_SUB_MUL(Xe13,Ye13) ALIAS_PGA3D_SUB_MUL(Xe23,Ye23) ALIAS_PGA3D_SUB_MUL(Xe123,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0) ALIAS_PGA3D_SUB_MUL(Xe1,Ye01) ALIAS_PGA3D_SUB_MUL(Xe2,Ye02) ALIAS_PGA3D_SUB_MUL(Xe3,Ye03) ALIAS_PGA3D_SUB_MUL(Xe12,Ye012) ALIAS_PGA3D_SUB_MUL(Xe13,Ye013) ALIAS_PGA3D_SUB_MUL(Xe23,Ye023) ALIAS_PGA3D_ADD_MUL(Xe123,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye1) ALIAS_PGA3D_SUB_MUL(Xe2,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye13) ALIAS_PGA3D_SUB_MUL(Xe23,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye2) ALIAS_PGA3D_ADD_MUL(Xe1,Ye12) ALIAS_PGA3D_SUB_MUL(Xe3,Ye23) ALIAS_PGA3D_ADD_MUL(Xe13,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye3) ALIAS_PGA3D_ADD_MUL(Xe1,Ye13) ALIAS_PGA3D_ADD_MUL(Xe2,Ye23) ALIAS_PGA3D_SUB_MUL(Xe12,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye01) ALIAS_PGA3D_ADD_MUL(Xe2,Ye012) ALIAS_PGA3D_ADD_MUL(Xe3,Ye013) ALIAS_PGA3D_SUB_MUL(Xe23,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye02) ALIAS_PGA3D_SUB_MUL(Xe1,Ye012) ALIAS_PGA3D_ADD_MUL(Xe3,Ye023) ALIAS_PGA3D_ADD_MUL(Xe13,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye03) ALIAS_PGA3D_SUB_MUL(Xe1,Ye013) ALIAS_PGA3D_SUB_MUL(Xe2,Ye023) ALIAS_PGA3D_SUB_MUL(Xe12,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye12) ALIAS_PGA3D_ADD_MUL(Xe3,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye13) ALIAS_PGA3D_SUB_MUL(Xe2,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye23) ALIAS_PGA3D_ADD_MUL(Xe1,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye012) ALIAS_PGA3D_SUB_MUL(Xe3,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye013) ALIAS_PGA3D_ADD_MUL(Xe2,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye023) ALIAS_PGA3D_SUB_MUL(Xe1,Ye0123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye123) \
  , 0 ALIAS_PGA3D_ADD_MUL(Xone,Ye0123) \
  , ## __VA_ARGS__)
#define alias_pga3d_m(X) (1,0,1,0,1,X)
#define alias_pga3d_s(X) (1,0,0,0,0,_Generic((X), alias_pga3d_Scalar: X, default: ((alias_pga3d_Scalar){ .one = (float)X })))
#define alias_pga3d_v(X) (0,1,0,0,0,X)
#define alias_pga3d_b(X) (0,0,1,0,0,X)
#define alias_pga3d_t(X) (0,0,0,1,0,X)
#define alias_pga3d_S(X) (0,0,0,0,1,X)
#define alias_pga3d_grade_0(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_GRADE_0, X)
#define alias_pga3d_grade_1(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_GRADE_1, X)
#define alias_pga3d_grade_2(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_GRADE_2, X)
#define alias_pga3d_grade_3(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_GRADE_3, X)
#define alias_pga3d_grade_4(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_GRADE_4, X)
#define alias_pga3d_negate(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_NEGATE, X)
#define alias_pga3d_negate_m(X) alias_pga3d_negate(alias_pga3d_m(X))
#define alias_pga3d_negate_s(X) alias_pga3d_negate(alias_pga3d_s(X))
#define alias_pga3d_negate_v(X) alias_pga3d_negate(alias_pga3d_v(X))
#define alias_pga3d_negate_b(X) alias_pga3d_negate(alias_pga3d_b(X))
#define alias_pga3d_negate_t(X) alias_pga3d_negate(alias_pga3d_t(X))
#define alias_pga3d_negate_S(X) alias_pga3d_negate(alias_pga3d_S(X))
#define alias_pga3d_dual(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_DUAL, X)
#define alias_pga3d_dual_m(X) alias_pga3d_dual(alias_pga3d_m(X))
#define alias_pga3d_dual_s(X) alias_pga3d_dual(alias_pga3d_s(X))
#define alias_pga3d_dual_v(X) alias_pga3d_dual(alias_pga3d_v(X))
#define alias_pga3d_dual_b(X) alias_pga3d_dual(alias_pga3d_b(X))
#define alias_pga3d_dual_t(X) alias_pga3d_dual(alias_pga3d_t(X))
#define alias_pga3d_dual_S(X) alias_pga3d_dual(alias_pga3d_S(X))
#define alias_pga3d_undual(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_UNDUAL, X)
#define alias_pga3d_undual_m(X) alias_pga3d_undual(alias_pga3d_m(X))
#define alias_pga3d_undual_s(X) alias_pga3d_undual(alias_pga3d_s(X))
#define alias_pga3d_undual_v(X) alias_pga3d_undual(alias_pga3d_v(X))
#define alias_pga3d_undual_b(X) alias_pga3d_undual(alias_pga3d_b(X))
#define alias_pga3d_undual_t(X) alias_pga3d_undual(alias_pga3d_t(X))
#define alias_pga3d_undual_S(X) alias_pga3d_undual(alias_pga3d_S(X))
#define alias_pga3d_polar(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_POLAR, X)
#define alias_pga3d_polar_m(X) alias_pga3d_polar(alias_pga3d_m(X))
#define alias_pga3d_polar_s(X) alias_pga3d_polar(alias_pga3d_s(X))
#define alias_pga3d_polar_v(X) alias_pga3d_polar(alias_pga3d_v(X))
#define alias_pga3d_polar_b(X) alias_pga3d_polar(alias_pga3d_b(X))
#define alias_pga3d_polar_t(X) alias_pga3d_polar(alias_pga3d_t(X))
#define alias_pga3d_polar_S(X) alias_pga3d_polar(alias_pga3d_S(X))
#define alias_pga3d_reverse(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_REVERSE, X)
#define alias_pga3d_reverse_m(X) alias_pga3d_reverse(alias_pga3d_m(X))
#define alias_pga3d_reverse_s(X) alias_pga3d_reverse(alias_pga3d_s(X))
#define alias_pga3d_reverse_v(X) alias_pga3d_reverse(alias_pga3d_v(X))
#define alias_pga3d_reverse_b(X) alias_pga3d_reverse(alias_pga3d_b(X))
#define alias_pga3d_reverse_t(X) alias_pga3d_reverse(alias_pga3d_t(X))
#define alias_pga3d_reverse_S(X) alias_pga3d_reverse(alias_pga3d_S(X))
#define alias_pga3d_involute(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_INVOLUTE, X)
#define alias_pga3d_involute_m(X) alias_pga3d_involute(alias_pga3d_m(X))
#define alias_pga3d_involute_s(X) alias_pga3d_involute(alias_pga3d_s(X))
#define alias_pga3d_involute_v(X) alias_pga3d_involute(alias_pga3d_v(X))
#define alias_pga3d_involute_b(X) alias_pga3d_involute(alias_pga3d_b(X))
#define alias_pga3d_involute_t(X) alias_pga3d_involute(alias_pga3d_t(X))
#define alias_pga3d_involute_S(X) alias_pga3d_involute(alias_pga3d_S(X))
#define alias_pga3d_conjugate(X) ALIAS_PGA3D_UNARY(ALIAS_PGA3D_OP_CONJUGATE, X)
#define alias_pga3d_conjugate_m(X) alias_pga3d_conjugate(alias_pga3d_m(X))
#define alias_pga3d_conjugate_s(X) alias_pga3d_conjugate(alias_pga3d_s(X))
#define alias_pga3d_conjugate_v(X) alias_pga3d_conjugate(alias_pga3d_v(X))
#define alias_pga3d_conjugate_b(X) alias_pga3d_conjugate(alias_pga3d_b(X))
#define alias_pga3d_conjugate_t(X) alias_pga3d_conjugate(alias_pga3d_t(X))
#define alias_pga3d_conjugate_S(X) alias_pga3d_conjugate(alias_pga3d_S(X))
#define alias_pga3d_add(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_ADD, X, Y)
#define alias_pga3d_add_mm(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_add_ms(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_add_mv(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_add_mb(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_add_mt(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_add_mS(X, Y) alias_pga3d_add(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_add_sm(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_add_ss(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_add_sv(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_add_sb(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_add_st(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_add_sS(X, Y) alias_pga3d_add(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_add_vm(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_add_vs(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_add_vv(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_add_vb(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_add_vt(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_add_vS(X, Y) alias_pga3d_add(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_add_bm(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_add_bs(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_add_bv(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_add_bb(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_add_bt(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_add_bS(X, Y) alias_pga3d_add(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_add_tm(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_add_ts(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_add_tv(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_add_tb(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_add_tt(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_add_tS(X, Y) alias_pga3d_add(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_add_Sm(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_add_Ss(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_add_Sv(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_add_Sb(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_add_St(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_add_SS(X, Y) alias_pga3d_add(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_SUBTRACT, X, Y)
#define alias_pga3d_subtract_mm(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_ms(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_mv(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_mb(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_mt(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_mS(X, Y) alias_pga3d_subtract(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract_sm(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_ss(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_sv(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_sb(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_st(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_sS(X, Y) alias_pga3d_subtract(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract_vm(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_vs(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_vv(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_vb(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_vt(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_vS(X, Y) alias_pga3d_subtract(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract_bm(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_bs(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_bv(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_bb(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_bt(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_bS(X, Y) alias_pga3d_subtract(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract_tm(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_ts(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_tv(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_tb(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_tt(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_tS(X, Y) alias_pga3d_subtract(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_subtract_Sm(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_subtract_Ss(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_subtract_Sv(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_subtract_Sb(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_subtract_St(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_subtract_SS(X, Y) alias_pga3d_subtract(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_GEOMETRIC_PRODUCT, X, Y)
#define alias_pga3d_geometric_product_mm(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_ms(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_mv(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_mb(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_mt(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_mS(X, Y) alias_pga3d_geometric_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product_sm(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_ss(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_sv(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_sb(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_st(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_sS(X, Y) alias_pga3d_geometric_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product_vm(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_vs(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_vv(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_vb(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_vt(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_vS(X, Y) alias_pga3d_geometric_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product_bm(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_bs(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_bv(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_bb(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_bt(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_bS(X, Y) alias_pga3d_geometric_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product_tm(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_ts(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_tv(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_tb(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_tt(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_tS(X, Y) alias_pga3d_geometric_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_geometric_product_Sm(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_geometric_product_Ss(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_geometric_product_Sv(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_geometric_product_Sb(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_geometric_product_St(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_geometric_product_SS(X, Y) alias_pga3d_geometric_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_OUTER_PRODUCT, X, Y)
#define alias_pga3d_outer_product_mm(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_ms(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_mv(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_mb(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_mt(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_mS(X, Y) alias_pga3d_outer_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product_sm(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_ss(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_sv(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_sb(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_st(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_sS(X, Y) alias_pga3d_outer_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product_vm(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_vs(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_vv(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_vb(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_vt(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_vS(X, Y) alias_pga3d_outer_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product_bm(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_bs(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_bv(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_bb(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_bt(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_bS(X, Y) alias_pga3d_outer_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product_tm(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_ts(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_tv(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_tb(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_tt(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_tS(X, Y) alias_pga3d_outer_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_outer_product_Sm(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_outer_product_Ss(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_outer_product_Sv(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_outer_product_Sb(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_outer_product_St(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_outer_product_SS(X, Y) alias_pga3d_outer_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_REGRESSIVE_PRODUCT, X, Y)
#define alias_pga3d_regressive_product_mm(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_ms(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_mv(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_mb(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_mt(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_mS(X, Y) alias_pga3d_regressive_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product_sm(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_ss(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_sv(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_sb(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_st(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_sS(X, Y) alias_pga3d_regressive_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product_vm(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_vs(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_vv(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_vb(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_vt(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_vS(X, Y) alias_pga3d_regressive_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product_bm(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_bs(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_bv(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_bb(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_bt(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_bS(X, Y) alias_pga3d_regressive_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product_tm(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_ts(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_tv(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_tb(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_tt(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_tS(X, Y) alias_pga3d_regressive_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_regressive_product_Sm(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_regressive_product_Ss(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_regressive_product_Sv(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_regressive_product_Sb(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_regressive_product_St(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_regressive_product_SS(X, Y) alias_pga3d_regressive_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_COMMUTATOR_PRODUCT, X, Y)
#define alias_pga3d_commutator_product_mm(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_ms(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_mv(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_mb(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_mt(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_mS(X, Y) alias_pga3d_commutator_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product_sm(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_ss(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_sv(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_sb(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_st(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_sS(X, Y) alias_pga3d_commutator_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product_vm(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_vs(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_vv(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_vb(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_vt(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_vS(X, Y) alias_pga3d_commutator_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product_bm(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_bs(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_bv(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_bb(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_bt(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_bS(X, Y) alias_pga3d_commutator_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product_tm(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_ts(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_tv(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_tb(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_tt(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_tS(X, Y) alias_pga3d_commutator_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_commutator_product_Sm(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_commutator_product_Ss(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_commutator_product_Sv(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_commutator_product_Sb(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_commutator_product_St(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_commutator_product_SS(X, Y) alias_pga3d_commutator_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_INNER_PRODUCT, X, Y)
#define alias_pga3d_inner_product_mm(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_ms(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_mv(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_mb(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_mt(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_mS(X, Y) alias_pga3d_inner_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product_sm(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_ss(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_sv(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_sb(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_st(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_sS(X, Y) alias_pga3d_inner_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product_vm(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_vs(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_vv(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_vb(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_vt(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_vS(X, Y) alias_pga3d_inner_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product_bm(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_bs(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_bv(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_bb(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_bt(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_bS(X, Y) alias_pga3d_inner_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product_tm(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_ts(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_tv(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_tb(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_tt(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_tS(X, Y) alias_pga3d_inner_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_inner_product_Sm(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_inner_product_Ss(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_inner_product_Sv(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_inner_product_Sb(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_inner_product_St(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_inner_product_SS(X, Y) alias_pga3d_inner_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product(X, Y) ALIAS_PGA3D_BINARY(ALIAS_PGA3D_OP_LEFT_DOT_PRODUCT, X, Y)
#define alias_pga3d_left_dot_product_mm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_ms(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_mv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_mb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_mt(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_mS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product_sm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_ss(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_sv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_sb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_st(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_sS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product_vm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_vs(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_vv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_vb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_vt(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_vS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product_bm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_bs(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_bv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_bb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_bt(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_bS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product_tm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_ts(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_tv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_tb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_tt(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_tS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_left_dot_product_Sm(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_left_dot_product_Ss(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_left_dot_product_Sv(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_left_dot_product_Sb(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_left_dot_product_St(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_left_dot_product_SS(X, Y) alias_pga3d_left_dot_product(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_meet(X, Y) alias_pga3d_outer_product(X, Y)
#define alias_pga3d_meet_mm(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_ms(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_mv(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_mb(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_mt(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_mS(X, Y) alias_pga3d_meet(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_meet_sm(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_ss(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_sv(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_sb(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_st(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_sS(X, Y) alias_pga3d_meet(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_meet_vm(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_vs(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_vv(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_vb(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_vt(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_vS(X, Y) alias_pga3d_meet(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_meet_bm(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_bs(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_bv(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_bb(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_bt(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_bS(X, Y) alias_pga3d_meet(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_meet_tm(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_ts(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_tv(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_tb(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_tt(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_tS(X, Y) alias_pga3d_meet(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_meet_Sm(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_meet_Ss(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_meet_Sv(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_meet_Sb(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_meet_St(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_meet_SS(X, Y) alias_pga3d_meet(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_join(X, Y) alias_pga3d_regressive_product(X, Y)
#define alias_pga3d_join_mm(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_join_ms(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_join_mv(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_join_mb(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_join_mt(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_join_mS(X, Y) alias_pga3d_join(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_join_sm(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_join_ss(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_join_sv(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_join_sb(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_join_st(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_join_sS(X, Y) alias_pga3d_join(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_join_vm(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_join_vs(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_join_vv(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_join_vb(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_join_vt(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_join_vS(X, Y) alias_pga3d_join(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_join_bm(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_join_bs(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_join_bv(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_join_bb(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_join_bt(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_join_bS(X, Y) alias_pga3d_join(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_join_tm(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_join_ts(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_join_tv(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_join_tb(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_join_tt(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_join_tS(X, Y) alias_pga3d_join(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_join_Sm(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_join_Ss(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_join_Sv(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_join_Sb(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_join_St(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_join_SS(X, Y) alias_pga3d_join(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_neg(X) alias_pga3d_negate(X)
#define alias_pga3d_neg_m(X) alias_pga3d_neg(alias_pga3d_m(X))
#define alias_pga3d_neg_s(X) alias_pga3d_neg(alias_pga3d_s(X))
#define alias_pga3d_neg_v(X) alias_pga3d_neg(alias_pga3d_v(X))
#define alias_pga3d_neg_b(X) alias_pga3d_neg(alias_pga3d_b(X))
#define alias_pga3d_neg_t(X) alias_pga3d_neg(alias_pga3d_t(X))
#define alias_pga3d_neg_S(X) alias_pga3d_neg(alias_pga3d_S(X))
#define alias_pga3d_sub(X, Y) alias_pga3d_subtract(X, Y)
#define alias_pga3d_sub_mm(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_ms(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_mv(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_mb(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_mt(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_mS(X, Y) alias_pga3d_sub(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_sub_sm(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_ss(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_sv(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_sb(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_st(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_sS(X, Y) alias_pga3d_sub(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_sub_vm(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_vs(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_vv(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_vb(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_vt(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_vS(X, Y) alias_pga3d_sub(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_sub_bm(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_bs(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_bv(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_bb(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_bt(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_bS(X, Y) alias_pga3d_sub(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_sub_tm(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_ts(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_tv(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_tb(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_tt(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_tS(X, Y) alias_pga3d_sub(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_sub_Sm(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_sub_Ss(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_sub_Sv(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_sub_Sb(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_sub_St(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_sub_SS(X, Y) alias_pga3d_sub(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_mul(X, Y) alias_pga3d_geometric_product(X, Y)
#define alias_pga3d_mul_mm(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_ms(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_mv(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_mb(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_mt(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_mS(X, Y) alias_pga3d_mul(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_mul_sm(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_ss(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_sv(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_sb(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_st(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_sS(X, Y) alias_pga3d_mul(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_mul_vm(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_vs(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_vv(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_vb(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_vt(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_vS(X, Y) alias_pga3d_mul(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_mul_bm(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_bs(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_bv(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_bb(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_bt(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_bS(X, Y) alias_pga3d_mul(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_mul_tm(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_ts(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_tv(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_tb(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_tt(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_tS(X, Y) alias_pga3d_mul(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_mul_Sm(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_mul_Ss(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_mul_Sv(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_mul_Sb(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_mul_St(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_mul_SS(X, Y) alias_pga3d_mul(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_weg(X, Y) alias_pga3d_outer_product(X, Y)
#define alias_pga3d_weg_mm(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_ms(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_mv(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_mb(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_mt(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_mS(X, Y) alias_pga3d_weg(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_weg_sm(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_ss(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_sv(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_sb(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_st(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_sS(X, Y) alias_pga3d_weg(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_weg_vm(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_vs(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_vv(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_vb(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_vt(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_vS(X, Y) alias_pga3d_weg(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_weg_bm(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_bs(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_bv(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_bb(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_bt(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_bS(X, Y) alias_pga3d_weg(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_weg_tm(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_ts(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_tv(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_tb(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_tt(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_tS(X, Y) alias_pga3d_weg(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_weg_Sm(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_weg_Ss(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_weg_Sv(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_weg_Sb(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_weg_St(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_weg_SS(X, Y) alias_pga3d_weg(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_vee(X, Y) alias_pga3d_regressive_product(X, Y)
#define alias_pga3d_vee_mm(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_ms(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_mv(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_mb(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_mt(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_mS(X, Y) alias_pga3d_vee(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_vee_sm(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_ss(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_sv(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_sb(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_st(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_sS(X, Y) alias_pga3d_vee(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_vee_vm(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_vs(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_vv(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_vb(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_vt(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_vS(X, Y) alias_pga3d_vee(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_vee_bm(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_bs(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_bv(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_bb(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_bt(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_bS(X, Y) alias_pga3d_vee(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_vee_tm(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_ts(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_tv(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_tb(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_tt(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_tS(X, Y) alias_pga3d_vee(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_vee_Sm(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_vee_Ss(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_vee_Sv(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_vee_Sb(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_vee_St(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_vee_SS(X, Y) alias_pga3d_vee(alias_pga3d_S(X), alias_pga3d_S(Y))
#define alias_pga3d_dot(X, Y) alias_pga3d_inner_product(X, Y)
#define alias_pga3d_dot_mm(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_ms(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_mv(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_mb(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_mt(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_mS(X, Y) alias_pga3d_dot(alias_pga3d_m(X), alias_pga3d_S(Y))
#define alias_pga3d_dot_sm(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_ss(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_sv(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_sb(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_st(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_sS(X, Y) alias_pga3d_dot(alias_pga3d_s(X), alias_pga3d_S(Y))
#define alias_pga3d_dot_vm(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_vs(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_vv(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_vb(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_vt(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_vS(X, Y) alias_pga3d_dot(alias_pga3d_v(X), alias_pga3d_S(Y))
#define alias_pga3d_dot_bm(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_bs(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_bv(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_bb(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_bt(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_bS(X, Y) alias_pga3d_dot(alias_pga3d_b(X), alias_pga3d_S(Y))
#define alias_pga3d_dot_tm(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_ts(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_tv(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_tb(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_tt(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_tS(X, Y) alias_pga3d_dot(alias_pga3d_t(X), alias_pga3d_S(Y))
#define alias_pga3d_dot_Sm(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_m(Y))
#define alias_pga3d_dot_Ss(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_s(Y))
#define alias_pga3d_dot_Sv(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_v(Y))
#define alias_pga3d_dot_Sb(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_b(Y))
#define alias_pga3d_dot_St(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_t(Y))
#define alias_pga3d_dot_SS(X, Y) alias_pga3d_dot(alias_pga3d_S(X), alias_pga3d_S(Y))
#endif // _ALIAS_PGA3D_H_