Add hypercube, smol modifications
This commit is contained in:
@@ -49,6 +49,8 @@ struct Coxeter {
|
|||||||
|
|
||||||
struct Mult {
|
struct Mult {
|
||||||
int from, to, multiplicity;
|
int from, to, multiplicity;
|
||||||
|
Mult() {}
|
||||||
|
Mult(int from, int to, int multiplicity): from(from), to(to), multiplicity(multiplicity) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
Coxeter make_coxeter(int ngens, const std::vector<Mult> &ms) {
|
Coxeter make_coxeter(int ngens, const std::vector<Mult> &ms) {
|
||||||
@@ -91,6 +93,15 @@ Coxeter torus(int res) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Coxeter hypercube(int dim) {
|
||||||
|
std::vector<Mult> mults;
|
||||||
|
mults.emplace_back(0,1,4);
|
||||||
|
for (int i = 2; i < dim; i++) {
|
||||||
|
mults.emplace_back(i-1, i, 3);
|
||||||
|
}
|
||||||
|
return make_coxeter(dim, mults);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Order 14,400
|
* Order 14,400
|
||||||
*/
|
*/
|
||||||
@@ -265,9 +276,6 @@ void learn(Table &coset, const Coxeter &cox,
|
|||||||
for (unsigned int c = 0; c < table.num_rows; c++) {
|
for (unsigned int c = 0; c < table.num_rows; c++) {
|
||||||
auto s_i = table.start_inds[c];
|
auto s_i = table.start_inds[c];
|
||||||
auto e_i = table.end_inds[c];
|
auto e_i = table.end_inds[c];
|
||||||
|
|
||||||
if (s_i == e_i) continue;
|
|
||||||
|
|
||||||
auto s_c = table.start_cosets[c];
|
auto s_c = table.start_cosets[c];
|
||||||
auto e_c = table.end_cosets[c];
|
auto e_c = table.end_cosets[c];
|
||||||
auto i_c = table.init_cosets[c];
|
auto i_c = table.init_cosets[c];
|
||||||
@@ -382,6 +390,14 @@ Coxeter proc_args(int argc, const char* argv[]) {
|
|||||||
case 4:
|
case 4:
|
||||||
std::cout << -1 << ',';
|
std::cout << -1 << ',';
|
||||||
return E8();
|
return E8();
|
||||||
|
case 5:
|
||||||
|
if (argc < 3) {
|
||||||
|
std::cerr << "Must provide a dimension for hypercube!" << std::endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
arg = std::strtol(argv[2], nullptr, 10);
|
||||||
|
std::cout << arg << ',';
|
||||||
|
return hypercube(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "Not a valid type!" << std::endl;
|
std::cerr << "Not a valid type!" << std::endl;
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ using Table=std::vector<Gens>;
|
|||||||
|
|
||||||
struct Mult {
|
struct Mult {
|
||||||
int from, to, multiplicity;
|
int from, to, multiplicity;
|
||||||
|
Mult() {}
|
||||||
|
Mult(int from, int to, int multiplicity): from(from), to(to), multiplicity(multiplicity) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
Table mults(const std::vector<Mult>& ms) {
|
Table mults(const std::vector<Mult>& ms) {
|
||||||
@@ -55,13 +57,21 @@ std::vector<Mult> ezmults(int ngens, const std::vector<Mult> &ms) {
|
|||||||
* Order 4*res*res
|
* Order 4*res*res
|
||||||
*/
|
*/
|
||||||
std::pair<Table, int> torus(int res) {
|
std::pair<Table, int> torus(int res) {
|
||||||
|
|
||||||
return std::make_pair(mults(ezmults(4, {
|
return std::make_pair(mults(ezmults(4, {
|
||||||
{0, 1, res},
|
{0, 1, res},
|
||||||
{2, 3, res},
|
{2, 3, res},
|
||||||
})), 4);
|
})), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<Table, int> hypercube(int dim) {
|
||||||
|
std::vector<Mult> hc_mults;
|
||||||
|
hc_mults.emplace_back(0,1,4);
|
||||||
|
for (int i = 2; i < dim; i++) {
|
||||||
|
hc_mults.emplace_back(i-1, i, 3);
|
||||||
|
}
|
||||||
|
return std::make_pair(mults(ezmults(dim,hc_mults)), dim);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Order 14,400
|
* Order 14,400
|
||||||
*/
|
*/
|
||||||
@@ -286,6 +296,14 @@ int main(int argc, const char *argv[]) {
|
|||||||
case 4:
|
case 4:
|
||||||
res = E8();
|
res = E8();
|
||||||
break;
|
break;
|
||||||
|
case 5:
|
||||||
|
if (argc < 3) {
|
||||||
|
std::cerr << "Must provide a dimension for hypercube!" << std::endl;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
arg = std::strtol(argv[2], nullptr, 10);
|
||||||
|
res = hypercube(arg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
std::cerr << "Not a valid type!" << std::endl;
|
std::cerr << "Not a valid type!" << std::endl;
|
||||||
return 3;
|
return 3;
|
||||||
|
|||||||
Reference in New Issue
Block a user