#include <qpms/groups.h>
const qpms_finite_group_t QPMS_FINITE_GROUP_C2 = {
  "C2", // name
  2, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1,
    1, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 1
  },
  (qpms_gmi_t[]) {1}, // gens
  1, // ngens
  (qpms_permutation_t[]){ // permrep
    "(1)",
    "(0 1)",
  },
  NULL, // elemlabels
  2, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{6.123233995736766e-17+1.0*I, 0.0+0.0*I}, 1},
  },
  2, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "B", //name
      (complex double []) {1, -1} // m
    },
    {
      1, // dim
      "A", //name
      (complex double []) {1, 1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_C2v = {
  "C2v", // name
  4, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3,
    1, 0, 3, 2,
    2, 3, 0, 1,
    3, 2, 1, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 1, 2, 3
  },
  (qpms_gmi_t[]) {1, 3}, // gens
  2, // ngens
  (qpms_permutation_t[]){ // permrep
    "(3)",
    "(0 1)(2 3)",
    "(0 2)(1 3)",
    "(0 3)(1 2)",
  },
  NULL, // elemlabels
  4, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.0+1.0*I}, -1},
   {{0.0+1.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 1.0+0.0*I}, -1},
  },
  4, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A1", //name
      (complex double []) {1, 1, 1, 1} // m
    },
    {
      1, // dim
      "A2", //name
      (complex double []) {1, -1, 1, -1} // m
    },
    {
      1, // dim
      "B2", //name
      (complex double []) {1, -1, -1, 1} // m
    },
    {
      1, // dim
      "B1", //name
      (complex double []) {1, 1, -1, -1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_C4 = {
  "C4", // name
  4, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3,
    1, 2, 3, 0,
    2, 3, 0, 1,
    3, 0, 1, 2,
  },
  (qpms_gmi_t[]) { // invi
    0, 3, 2, 1
  },
  (qpms_gmi_t[]) {1}, // gens
  1, // ngens
  (qpms_permutation_t[]){ // permrep
    "(3)",
    "(0 1 2 3)",
    "(0 2)(1 3)",
    "(0 3 2 1)",
  },
  NULL, // elemlabels
  4, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1},
   {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1},
   {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1},
  },
  4, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "B", //name
      (complex double []) {1, -1, 1, -1} // m
    },
    {
      1, // dim
      "2E", //name
      (complex double []) {1, 1j, (-1+0j), (-0-1j)} // m
    },
    {
      1, // dim
      "A", //name
      (complex double []) {1, 1, 1, 1} // m
    },
    {
      1, // dim
      "1E", //name
      (complex double []) {1, -1j, (-1+0j), 1j} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_C4v = {
  "C4v", // name
  8, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3, 4, 5, 6, 7,
    1, 2, 3, 0, 7, 4, 5, 6,
    2, 3, 0, 1, 6, 7, 4, 5,
    3, 0, 1, 2, 5, 6, 7, 4,
    4, 5, 6, 7, 0, 1, 2, 3,
    5, 6, 7, 4, 3, 0, 1, 2,
    6, 7, 4, 5, 2, 3, 0, 1,
    7, 4, 5, 6, 1, 2, 3, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 3, 2, 1, 4, 5, 6, 7
  },
  (qpms_gmi_t[]) {1, 7}, // gens
  2, // ngens
  (qpms_permutation_t[]){ // permrep
    "(3)",
    "(0 1 2 3)",
    "(0 2)(1 3)",
    "(0 3 2 1)",
    "(3)(0 2)",
    "(0 3)(1 2)",
    "(1 3)",
    "(0 1)(2 3)",
  },
  NULL, // elemlabels
  4, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1},
   {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1},
   {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.7071067811865477-0.7071067811865474*I}, -1},
   {{0.0+0.0*I, 1.0+2.220446049250313e-16*I}, -1},
   {{0.0+0.0*I, 0.7071067811865475+0.7071067811865476*I}, -1},
   {{0.0+0.0*I, 0.0+1.0*I}, -1},
  },
  5, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A1", //name
      (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m
    },
    {
      1, // dim
      "A2", //name
      (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m
    },
    {
      2, // dim
      "E", //name
      (complex double []) {
        // (3)
        1.0, 0.0, 
        0.0, 1.0, 
        // (0 1 2 3)
        0.0, -1.0, 
        1.0, 0.0, 
        // (0 2)(1 3)
        -1.0, 0.0, 
        0.0, -1.0, 
        // (0 3 2 1)
        0.0, 1.0, 
        -1.0, 0.0, 
        // (3)(0 2)
        0.0, 1.0, 
        1.0, 0.0, 
        // (0 3)(1 2)
        1.0, 0.0, 
        0.0, -1.0, 
        // (1 3)
        0.0, -1.0, 
        -1.0, 0.0, 
        // (0 1)(2 3)
        -1.0, 0.0, 
        0.0, 1.0, 
      }
    },
    {
      1, // dim
      "B2", //name
      (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m
    },
    {
      1, // dim
      "B1", //name
      (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_D2h = {
  "D2h", // name
  8, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3, 4, 5, 6, 7,
    1, 0, 3, 2, 5, 4, 7, 6,
    2, 3, 0, 1, 6, 7, 4, 5,
    3, 2, 1, 0, 7, 6, 5, 4,
    4, 5, 6, 7, 0, 1, 2, 3,
    5, 4, 7, 6, 1, 0, 3, 2,
    6, 7, 4, 5, 2, 3, 0, 1,
    7, 6, 5, 4, 3, 2, 1, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 1, 2, 3, 4, 5, 6, 7
  },
  (qpms_gmi_t[]) {1, 3, 7}, // gens
  3, // ngens
  (qpms_permutation_t[]){ // permrep
    "(5)",
    "(5)(0 1)(2 3)",
    "(5)(0 2)(1 3)",
    "(5)(0 3)(1 2)",
    "(0 3)(1 2)(4 5)",
    "(0 2)(1 3)(4 5)",
    "(0 1)(2 3)(4 5)",
    "(4 5)",
  },
  NULL, // elemlabels
  6, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.0+1.0*I}, -1},
   {{0.0+1.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 1.0+0.0*I}, -1},
   {{0.0+0.0*I, 0.0+1.0*I}, 1},
   {{-1.0+0.0*I, 0.0+0.0*I}, -1},
   {{0.0+0.0*I, -1.0+0.0*I}, 1},
   {{0.0+1.0*I, 0.0+0.0*I}, -1},
  },
  8, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A2\'", //name
      (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m
    },
    {
      1, // dim
      "B1\'", //name
      (complex double []) {1, 1, -1, -1, -1, -1, 1, 1} // m
    },
    {
      1, // dim
      "A2\'\'", //name
      (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m
    },
    {
      1, // dim
      "B2\'", //name
      (complex double []) {1, -1, -1, 1, 1, -1, -1, 1} // m
    },
    {
      1, // dim
      "A1\'", //name
      (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m
    },
    {
      1, // dim
      "A1\'\'", //name
      (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m
    },
    {
      1, // dim
      "B2\'\'", //name
      (complex double []) {1, 1, -1, -1, 1, 1, -1, -1} // m
    },
    {
      1, // dim
      "B1\'\'", //name
      (complex double []) {1, -1, -1, 1, -1, 1, 1, -1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_D3h = {
  "D3h", // name
  12, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
    1, 2, 0, 5, 3, 4, 8, 6, 7, 10, 11, 9,
    2, 0, 1, 4, 5, 3, 7, 8, 6, 11, 9, 10,
    3, 4, 5, 0, 1, 2, 10, 11, 9, 8, 6, 7,
    4, 5, 3, 2, 0, 1, 9, 10, 11, 6, 7, 8,
    5, 3, 4, 1, 2, 0, 11, 9, 10, 7, 8, 6,
    6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5,
    7, 8, 6, 11, 9, 10, 2, 0, 1, 4, 5, 3,
    8, 6, 7, 10, 11, 9, 1, 2, 0, 5, 3, 4,
    9, 10, 11, 6, 7, 8, 4, 5, 3, 2, 0, 1,
    10, 11, 9, 8, 6, 7, 3, 4, 5, 0, 1, 2,
    11, 9, 10, 7, 8, 6, 5, 3, 4, 1, 2, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 2, 1, 3, 4, 5, 6, 7, 8, 10, 9, 11
  },
  (qpms_gmi_t[]) {1, 5, 11}, // gens
  3, // ngens
  (qpms_permutation_t[]){ // permrep
    "(4)",
    "(4)(0 1 2)",
    "(4)(0 2 1)",
    "(4)(1 2)",
    "(4)(0 1)",
    "(4)(0 2)",
    "(0 2)(3 4)",
    "(1 2)(3 4)",
    "(0 1)(3 4)",
    "(0 1 2)(3 4)",
    "(0 2 1)(3 4)",
    "(3 4)",
  },
  NULL, // elemlabels
  5, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.5000000000000001+0.8660254037844386*I, 0.0+0.0*I}, 1},
   {{-0.4999999999999998+0.8660254037844388*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.8660254037844388-0.4999999999999998*I}, -1},
   {{0.0+0.0*I, 0.8660254037844386+0.5000000000000002*I}, -1},
   {{0.0+0.0*I, -5.551115123125783e-17+1.0*I}, -1},
   {{0.0+0.0*I, -1.0-5.551115123125783e-17*I}, 1},
   {{0.0+0.0*I, -0.5000000000000001-0.8660254037844386*I}, 1},
   {{0.0+0.0*I, 0.4999999999999998-0.8660254037844388*I}, 1},
   {{0.8660254037844388-0.4999999999999998*I, 0.0+0.0*I}, -1},
   {{0.8660254037844386+0.5000000000000002*I, 0.0+0.0*I}, -1},
   {{-5.551115123125783e-17+1.0*I, 0.0+0.0*I}, -1},
  },
  6, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A2\'", //name
      (complex double []) {1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1} // m
    },
    {
      2, // dim
      "E\'", //name
      (complex double []) {
        // (4)
        1.0, 0.0, 
        0.0, 1.0, 
        // (4)(0 1 2)
        -0.5, -0.8660254037844386, 
        0.8660254037844386, -0.5, 
        // (4)(0 2 1)
        -0.4999999999999999, 0.8660254037844386, 
        -0.8660254037844386, -0.4999999999999999, 
        // (4)(1 2)
        -0.4999999999999999, -0.8660254037844386, 
        -0.8660254037844386, 0.4999999999999999, 
        // (4)(0 1)
        -0.49999999999999994, 0.8660254037844385, 
        0.8660254037844385, 0.49999999999999994, 
        // (4)(0 2)
        0.9999999999999998, 0.0, 
        0.0, -0.9999999999999998, 
        // (0 2)(3 4)
        0.9999999999999998, 0.0, 
        0.0, -0.9999999999999998, 
        // (1 2)(3 4)
        -0.4999999999999999, -0.8660254037844384, 
        -0.8660254037844384, 0.4999999999999999, 
        // (0 1)(3 4)
        -0.4999999999999997, 0.8660254037844384, 
        0.8660254037844384, 0.4999999999999997, 
        // (0 1 2)(3 4)
        -0.4999999999999997, -0.8660254037844384, 
        0.8660254037844384, -0.4999999999999997, 
        // (0 2 1)(3 4)
        -0.4999999999999998, 0.8660254037844383, 
        -0.8660254037844383, -0.4999999999999998, 
        // (3 4)
        0.9999999999999996, 0.0, 
        0.0, 0.9999999999999996, 
      }
    },
    {
      1, // dim
      "A2\'\'", //name
      (complex double []) {1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1} // m
    },
    {
      1, // dim
      "A1\'", //name
      (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m
    },
    {
      1, // dim
      "A1\'\'", //name
      (complex double []) {1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1} // m
    },
    {
      2, // dim
      "E\'\'", //name
      (complex double []) {
        // (4)
        1.0, 0.0, 
        0.0, 1.0, 
        // (4)(0 1 2)
        -0.5, -0.8660254037844386, 
        0.8660254037844386, -0.5, 
        // (4)(0 2 1)
        -0.4999999999999999, 0.8660254037844386, 
        -0.8660254037844386, -0.4999999999999999, 
        // (4)(1 2)
        -0.4999999999999999, -0.8660254037844386, 
        -0.8660254037844386, 0.4999999999999999, 
        // (4)(0 1)
        -0.49999999999999994, 0.8660254037844385, 
        0.8660254037844385, 0.49999999999999994, 
        // (4)(0 2)
        0.9999999999999998, 0.0, 
        0.0, -0.9999999999999998, 
        // (0 2)(3 4)
        -0.9999999999999998, 0.0, 
        0.0, 0.9999999999999998, 
        // (1 2)(3 4)
        0.4999999999999999, 0.8660254037844384, 
        0.8660254037844384, -0.4999999999999999, 
        // (0 1)(3 4)
        0.4999999999999997, -0.8660254037844384, 
        -0.8660254037844384, -0.4999999999999997, 
        // (0 1 2)(3 4)
        0.4999999999999997, 0.8660254037844384, 
        -0.8660254037844384, 0.4999999999999997, 
        // (0 2 1)(3 4)
        0.4999999999999998, -0.8660254037844383, 
        0.8660254037844383, 0.4999999999999998, 
        // (3 4)
        -0.9999999999999996, 0.0, 
        0.0, -0.9999999999999996, 
      }
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_D4h = {
  "D4h", // name
  16, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
    1, 2, 3, 0, 7, 4, 5, 6, 11, 8, 9, 10, 13, 14, 15, 12,
    2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13,
    3, 0, 1, 2, 5, 6, 7, 4, 9, 10, 11, 8, 15, 12, 13, 14,
    4, 5, 6, 7, 0, 1, 2, 3, 14, 15, 12, 13, 10, 11, 8, 9,
    5, 6, 7, 4, 3, 0, 1, 2, 13, 14, 15, 12, 11, 8, 9, 10,
    6, 7, 4, 5, 2, 3, 0, 1, 12, 13, 14, 15, 8, 9, 10, 11,
    7, 4, 5, 6, 1, 2, 3, 0, 15, 12, 13, 14, 9, 10, 11, 8,
    8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7,
    9, 10, 11, 8, 15, 12, 13, 14, 3, 0, 1, 2, 5, 6, 7, 4,
    10, 11, 8, 9, 14, 15, 12, 13, 2, 3, 0, 1, 6, 7, 4, 5,
    11, 8, 9, 10, 13, 14, 15, 12, 1, 2, 3, 0, 7, 4, 5, 6,
    12, 13, 14, 15, 8, 9, 10, 11, 6, 7, 4, 5, 2, 3, 0, 1,
    13, 14, 15, 12, 11, 8, 9, 10, 5, 6, 7, 4, 3, 0, 1, 2,
    14, 15, 12, 13, 10, 11, 8, 9, 4, 5, 6, 7, 0, 1, 2, 3,
    15, 12, 13, 14, 9, 10, 11, 8, 7, 4, 5, 6, 1, 2, 3, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 3, 2, 1, 4, 5, 6, 7, 8, 9, 10, 11, 14, 13, 12, 15
  },
  (qpms_gmi_t[]) {1, 7, 15}, // gens
  3, // ngens
  (qpms_permutation_t[]){ // permrep
    "(5)",
    "(5)(0 1 2 3)",
    "(5)(0 2)(1 3)",
    "(5)(0 3 2 1)",
    "(5)(0 2)",
    "(5)(0 3)(1 2)",
    "(5)(1 3)",
    "(5)(0 1)(2 3)",
    "(0 1)(2 3)(4 5)",
    "(0 2)(4 5)",
    "(0 3)(1 2)(4 5)",
    "(1 3)(4 5)",
    "(0 1 2 3)(4 5)",
    "(0 2)(1 3)(4 5)",
    "(0 3 2 1)(4 5)",
    "(4 5)",
  },
  NULL, // elemlabels
  6, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1},
   {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1},
   {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.7071067811865477-0.7071067811865474*I}, -1},
   {{0.0+0.0*I, 1.0+2.220446049250313e-16*I}, -1},
   {{0.0+0.0*I, 0.7071067811865475+0.7071067811865476*I}, -1},
   {{0.0+0.0*I, 0.0+1.0*I}, -1},
   {{0.0+0.0*I, -1.0+0.0*I}, 1},
   {{0.0+0.0*I, -0.7071067811865476-0.7071067811865475*I}, 1},
   {{0.0+0.0*I, -2.220446049250313e-16-1.0*I}, 1},
   {{0.0+0.0*I, 0.7071067811865474-0.7071067811865477*I}, 1},
   {{0.7071067811865477-0.7071067811865474*I, 0.0+0.0*I}, -1},
   {{1.0+2.220446049250313e-16*I, 0.0+0.0*I}, -1},
   {{0.7071067811865475+0.7071067811865476*I, 0.0+0.0*I}, -1},
   {{0.0+1.0*I, 0.0+0.0*I}, -1},
  },
  10, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A2\'", //name
      (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1} // m
    },
    {
      1, // dim
      "B1\'", //name
      (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1} // m
    },
    {
      2, // dim
      "E\'", //name
      (complex double []) {
        // (5)
        1.0, 0.0, 
        0.0, 1.0, 
        // (5)(0 1 2 3)
        0.0, -1.0, 
        1.0, 0.0, 
        // (5)(0 2)(1 3)
        -1.0, 0.0, 
        0.0, -1.0, 
        // (5)(0 3 2 1)
        0.0, 1.0, 
        -1.0, 0.0, 
        // (5)(0 2)
        0.0, 1.0, 
        1.0, 0.0, 
        // (5)(0 3)(1 2)
        1.0, 0.0, 
        0.0, -1.0, 
        // (5)(1 3)
        0.0, -1.0, 
        -1.0, 0.0, 
        // (5)(0 1)(2 3)
        -1.0, 0.0, 
        0.0, 1.0, 
        // (0 1)(2 3)(4 5)
        -1.0, 0.0, 
        0.0, 1.0, 
        // (0 2)(4 5)
        0.0, 1.0, 
        1.0, 0.0, 
        // (0 3)(1 2)(4 5)
        1.0, 0.0, 
        0.0, -1.0, 
        // (1 3)(4 5)
        0.0, -1.0, 
        -1.0, 0.0, 
        // (0 1 2 3)(4 5)
        0.0, -1.0, 
        1.0, 0.0, 
        // (0 2)(1 3)(4 5)
        -1.0, 0.0, 
        0.0, -1.0, 
        // (0 3 2 1)(4 5)
        0.0, 1.0, 
        -1.0, 0.0, 
        // (4 5)
        1.0, 0.0, 
        0.0, 1.0, 
      }
    },
    {
      1, // dim
      "A2\'\'", //name
      (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} // m
    },
    {
      1, // dim
      "B2\'", //name
      (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1} // m
    },
    {
      1, // dim
      "A1\'", //name
      (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m
    },
    {
      1, // dim
      "A1\'\'", //name
      (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1} // m
    },
    {
      1, // dim
      "B2\'\'", //name
      (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1} // m
    },
    {
      1, // dim
      "B1\'\'", //name
      (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} // m
    },
    {
      2, // dim
      "E\'\'", //name
      (complex double []) {
        // (5)
        1.0, 0.0, 
        0.0, 1.0, 
        // (5)(0 1 2 3)
        0.0, -1.0, 
        1.0, 0.0, 
        // (5)(0 2)(1 3)
        -1.0, 0.0, 
        0.0, -1.0, 
        // (5)(0 3 2 1)
        0.0, 1.0, 
        -1.0, 0.0, 
        // (5)(0 2)
        0.0, 1.0, 
        1.0, 0.0, 
        // (5)(0 3)(1 2)
        1.0, 0.0, 
        0.0, -1.0, 
        // (5)(1 3)
        0.0, -1.0, 
        -1.0, 0.0, 
        // (5)(0 1)(2 3)
        -1.0, 0.0, 
        0.0, 1.0, 
        // (0 1)(2 3)(4 5)
        1.0, 0.0, 
        0.0, -1.0, 
        // (0 2)(4 5)
        0.0, -1.0, 
        -1.0, 0.0, 
        // (0 3)(1 2)(4 5)
        -1.0, 0.0, 
        0.0, 1.0, 
        // (1 3)(4 5)
        0.0, 1.0, 
        1.0, 0.0, 
        // (0 1 2 3)(4 5)
        0.0, 1.0, 
        -1.0, 0.0, 
        // (0 2)(1 3)(4 5)
        1.0, 0.0, 
        0.0, 1.0, 
        // (0 3 2 1)(4 5)
        0.0, -1.0, 
        1.0, 0.0, 
        // (4 5)
        -1.0, 0.0, 
        0.0, -1.0, 
      }
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_trivial_g = {
  "trivial_g", // name
  1, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0,
  },
  (qpms_gmi_t[]) { // invi
    0
  },
  (qpms_gmi_t[]) {0}, // gens
  1, // ngens
  (qpms_permutation_t[]){ // permrep
    "()",
  },
  NULL, // elemlabels
  0, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
  },
  1, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "A", //name
      (complex double []) {1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_x_and_z_flip = {
  "x_and_z_flip", // name
  4, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3,
    1, 0, 3, 2,
    2, 3, 0, 1,
    3, 2, 1, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 1, 2, 3
  },
  (qpms_gmi_t[]) {1, 3}, // gens
  2, // ngens
  (qpms_permutation_t[]){ // permrep
    "(3)",
    "(3)(0 1)",
    "(0 1)(2 3)",
    "(2 3)",
  },
  NULL, // elemlabels
  4, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 0.0+1.0*I}, -1},
   {{0.0+0.0*I, -1.0+0.0*I}, 1},
   {{0.0+1.0*I, 0.0+0.0*I}, -1},
  },
  4, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "P\'\'", //name
      (complex double []) {1, -1, 1, -1} // m
    },
    {
      1, // dim
      "P\'", //name
      (complex double []) {1, 1, 1, 1} // m
    },
    {
      1, // dim
      "R\'\'", //name
      (complex double []) {1, 1, -1, -1} // m
    },
    {
      1, // dim
      "R\'", //name
      (complex double []) {1, -1, -1, 1} // m
    },
  } // end of irreps
};

const qpms_finite_group_t QPMS_FINITE_GROUP_y_and_z_flip = {
  "y_and_z_flip", // name
  4, // order
  0, // idi
  (qpms_gmi_t[]) { // mt
    0, 1, 2, 3,
    1, 0, 3, 2,
    2, 3, 0, 1,
    3, 2, 1, 0,
  },
  (qpms_gmi_t[]) { // invi
    0, 1, 2, 3
  },
  (qpms_gmi_t[]) {1, 3}, // gens
  2, // ngens
  (qpms_permutation_t[]){ // permrep
    "(3)",
    "(3)(0 1)",
    "(0 1)(2 3)",
    "(2 3)",
  },
  NULL, // elemlabels
  4, // permrep_nelem
  (qpms_irot3_t[]) { // rep3d
   {{1.0+0.0*I, 0.0+0.0*I}, 1},
   {{0.0+0.0*I, 1.0+0.0*I}, -1},
   {{0.0+0.0*I, 0.0+1.0*I}, 1},
   {{0.0+1.0*I, 0.0+0.0*I}, -1},
  },
  4, // nirreps
  (struct qpms_finite_group_irrep_t[]) { // irreps
    {
      1, // dim
      "P\'\'", //name
      (complex double []) {1, -1, 1, -1} // m
    },
    {
      1, // dim
      "P\'", //name
      (complex double []) {1, 1, 1, 1} // m
    },
    {
      1, // dim
      "R\'\'", //name
      (complex double []) {1, 1, -1, -1} // m
    },
    {
      1, // dim
      "R\'", //name
      (complex double []) {1, -1, -1, 1} // m
    },
  } // end of irreps
};