Output bugfix
This commit is contained in:
parent
8c21410dda
commit
03854910b9
22
test.c
22
test.c
@ -107,7 +107,7 @@ int main(int argc, const char *argv[])
|
|||||||
for(int i = 0; i < order; i++)
|
for(int i = 0; i < order; i++)
|
||||||
reduced[i] = reduced[group[i]];
|
reduced[i] = reduced[group[i]];
|
||||||
|
|
||||||
// count cosets
|
// step 4: assign indices to cosets
|
||||||
ncosets = 0;
|
ncosets = 0;
|
||||||
for(int i = 0; i < order; i++)
|
for(int i = 0; i < order; i++)
|
||||||
if(reduced[i] == i)
|
if(reduced[i] == i)
|
||||||
@ -124,7 +124,7 @@ int main(int argc, const char *argv[])
|
|||||||
seen = (int*) malloc(ncosets*sizeof(int));
|
seen = (int*) malloc(ncosets*sizeof(int));
|
||||||
edgelists_simplified_used = 0;
|
edgelists_simplified_used = 0;
|
||||||
|
|
||||||
// copy minima
|
// step 5: set up nodes from minima
|
||||||
current = 0;
|
current = 0;
|
||||||
for(int i = 0; i < order; i++)
|
for(int i = 0; i < order; i++)
|
||||||
if(reduced[i] == i) { // is minimum
|
if(reduced[i] == i) { // is minimum
|
||||||
@ -139,7 +139,7 @@ int main(int argc, const char *argv[])
|
|||||||
for(int i = 0; i < ncosets; i++)
|
for(int i = 0; i < ncosets; i++)
|
||||||
fprintf(stderr, "%s <=> %s\n", simplified_graph[i].wordlength == 0 ? "1" : alphabetize(simplified_graph[i].word, simplified_graph[i].wordlength, alphabet, buffer), simplified_graph[simplified_graph[i].opposite].wordlength == 0 ? "1" : alphabetize(simplified_graph[simplified_graph[i].opposite].word, simplified_graph[simplified_graph[i].opposite].wordlength, alphabet, buffer2));
|
fprintf(stderr, "%s <=> %s\n", simplified_graph[i].wordlength == 0 ? "1" : alphabetize(simplified_graph[i].word, simplified_graph[i].wordlength, alphabet, buffer), simplified_graph[simplified_graph[i].opposite].wordlength == 0 ? "1" : alphabetize(simplified_graph[simplified_graph[i].opposite].word, simplified_graph[simplified_graph[i].opposite].wordlength, alphabet, buffer2));
|
||||||
|
|
||||||
// find order relations
|
// step 6: find order relations
|
||||||
for(int i = 0; i < order; i++) {
|
for(int i = 0; i < order; i++) {
|
||||||
edge = graph[i].bruhat_lower;
|
edge = graph[i].bruhat_lower;
|
||||||
while(edge) {
|
while(edge) {
|
||||||
@ -149,8 +149,6 @@ int main(int argc, const char *argv[])
|
|||||||
// found something
|
// found something
|
||||||
if(!edgelist_contains(simplified_graph[this].bruhat_lower, that))
|
if(!edgelist_contains(simplified_graph[this].bruhat_lower, that))
|
||||||
simplified_graph[this].bruhat_lower = edgelist_add(simplified_graph[this].bruhat_lower, that, edgelists_simplified, &edgelists_simplified_used);
|
simplified_graph[this].bruhat_lower = edgelist_add(simplified_graph[this].bruhat_lower, that, edgelists_simplified, &edgelists_simplified_used);
|
||||||
// if(!edgelist_contains(simplified_graph[that].bruhat_higher, this))
|
|
||||||
// simplified_graph[that].bruhat_higher = edgelist_add(simplified_graph[that].bruhat_higher, this, edgelists_simplified, &edgelists_simplified_used);
|
|
||||||
ERROR(simplified_graph[this].wordlength <= simplified_graph[that].wordlength, "The order assumption is being violated!\n");
|
ERROR(simplified_graph[this].wordlength <= simplified_graph[that].wordlength, "The order assumption is being violated!\n");
|
||||||
}
|
}
|
||||||
edge = edge->next;
|
edge = edge->next;
|
||||||
@ -159,7 +157,7 @@ int main(int argc, const char *argv[])
|
|||||||
|
|
||||||
fprintf(stderr, "\nAdded %d edges.\n\n", edgelists_simplified_used);
|
fprintf(stderr, "\nAdded %d edges.\n\n", edgelists_simplified_used);
|
||||||
|
|
||||||
// remove redundant edges
|
// step 7: remove redundant edges
|
||||||
for(int i = 0; i < ncosets; i++) {
|
for(int i = 0; i < ncosets; i++) {
|
||||||
memset(seen, 0, ncosets*sizeof(int));
|
memset(seen, 0, ncosets*sizeof(int));
|
||||||
queue_init(&queue);
|
queue_init(&queue);
|
||||||
@ -203,7 +201,7 @@ int main(int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reverse order
|
// step 8: revert order
|
||||||
for(int i = 0; i < ncosets; i++) {
|
for(int i = 0; i < ncosets; i++) {
|
||||||
edge = simplified_graph[i].bruhat_lower;
|
edge = simplified_graph[i].bruhat_lower;
|
||||||
while(edge) {
|
while(edge) {
|
||||||
@ -214,9 +212,8 @@ int main(int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// output as graphviz dot file
|
||||||
fprintf(stdout, "digraph test123 {\n");
|
fprintf(stdout, "digraph test123 {\n");
|
||||||
|
|
||||||
for(int i = 0; i < ncosets; i++) {
|
for(int i = 0; i < ncosets; i++) {
|
||||||
edge = simplified_graph[i].bruhat_lower;
|
edge = simplified_graph[i].bruhat_lower;
|
||||||
while(edge) {
|
while(edge) {
|
||||||
@ -227,19 +224,12 @@ int main(int argc, const char *argv[])
|
|||||||
edge = edge->next;
|
edge = edge->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stdout, "}\n");
|
fprintf(stdout, "}\n");
|
||||||
|
|
||||||
long nthickenings = enumerate_balanced_thickenings(type, simplified_graph, ncosets, alphabet, stdout);
|
long nthickenings = enumerate_balanced_thickenings(type, simplified_graph, ncosets, alphabet, stdout);
|
||||||
|
|
||||||
fprintf(stderr, "Found %ld balanced thickenings.\n", nthickenings);
|
fprintf(stderr, "Found %ld balanced thickenings.\n", nthickenings);
|
||||||
|
|
||||||
/* for(int i = 0; i < order; i++)
|
|
||||||
printf("%s <= %s\n",
|
|
||||||
reduced[i] == 0 ? "1" : alphabetize(graph[reduced[i]].word, graph[reduced[i]].wordlength, alphabet, buffer2),
|
|
||||||
i == 0 ? "1" : alphabetize(graph[i].word, graph[i].wordlength, alphabet, buffer)); */
|
|
||||||
|
|
||||||
|
|
||||||
free(seen);
|
free(seen);
|
||||||
free(simplified_graph);
|
free(simplified_graph);
|
||||||
free(edgelists_simplified);
|
free(edgelists_simplified);
|
||||||
|
@ -365,19 +365,22 @@ static long enumerate_tree(const enumeration_info_t *info, signed char *level, i
|
|||||||
level[head] = HEAD_MARKER;
|
level[head] = HEAD_MARKER;
|
||||||
|
|
||||||
int is_slim = transitive_closure(info, level, head, current_level);
|
int is_slim = transitive_closure(info, level, head, current_level);
|
||||||
int is_fat;
|
int is_balanced = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
// we have a candidate, check if it is a balanced thickening; if so, write to stdout
|
// we have a candidate, check if it is a balanced thickening; if so, write to stdout
|
||||||
if(is_slim) {
|
if(is_slim) {
|
||||||
is_fat = 1;
|
is_balanced = 1;
|
||||||
for(int i = head - 1; i >= 0; i--)
|
for(int i = head - 1; i >= 0; i--)
|
||||||
if(level[i] == 0)
|
if(level[i] == 0)
|
||||||
is_fat = 0;
|
is_balanced = 0;
|
||||||
|
}
|
||||||
|
|
||||||
output_thickening(info, level, current_level, is_slim, is_fat, count);
|
// comment this out (or just put it inside the if block) to save 1/3 of the runtime
|
||||||
|
output_thickening(info, level, current_level, is_slim, is_balanced, count);
|
||||||
|
|
||||||
if(is_fat) {
|
if(is_slim) {
|
||||||
|
if(is_balanced) {
|
||||||
count++;
|
count++;
|
||||||
fwrite(level, sizeof(signed char), info->size, info->outfile);
|
fwrite(level, sizeof(signed char), info->size, info->outfile);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user