Fixed bug in writer::write_mod. Added (partial) support for comparing
sq1/2 to main.
This commit is contained in:
parent
6d133e0622
commit
a0f94aad47
@ -1992,7 +1992,7 @@ mod_map<R>::display_self () const
|
|||||||
template<class R> void
|
template<class R> void
|
||||||
writer::write_mod (ptr<const module<R> > m)
|
writer::write_mod (ptr<const module<R> > m)
|
||||||
{
|
{
|
||||||
pair<unsigned &, bool> p = aw->id_io_id.find (m->id_counter);
|
pair<unsigned &, bool> p = aw->id_io_id.find (m->id);
|
||||||
if (p.second)
|
if (p.second)
|
||||||
{
|
{
|
||||||
write_int ((int)p.first);
|
write_int ((int)p.first);
|
||||||
|
169
main.cpp
169
main.cpp
@ -204,15 +204,13 @@ compute_show_kh_sq (knot_desc desc
|
|||||||
|
|
||||||
void
|
void
|
||||||
load (map<knot_desc,
|
load (map<knot_desc,
|
||||||
triple<multivariate_laurentpoly<Z>,
|
pair<mod_map<Z2>, mod_map<Z2> > > &knot_kh_sq,
|
||||||
multivariate_laurentpoly<Z>,
|
|
||||||
multivariate_laurentpoly<Z> > > &knot_kh_sq,
|
|
||||||
knot_desc desc)
|
knot_desc desc)
|
||||||
{
|
{
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
if (desc.t == knot_desc::TORUS)
|
if (desc.t == knot_desc::TORUS)
|
||||||
{
|
{
|
||||||
sprintf (buf, "kh_sq/T.dat");
|
sprintf (buf, "knot_kh_sq/T.dat");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -221,64 +219,163 @@ load (map<knot_desc,
|
|||||||
switch (desc.t)
|
switch (desc.t)
|
||||||
{
|
{
|
||||||
case knot_desc::ROLFSEN:
|
case knot_desc::ROLFSEN:
|
||||||
sprintf (buf, "kh_sq/%d_%d.dat", desc.i, j0);
|
sprintf (buf, "knot_kh_sq/%d_%d.dat", desc.i, j0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case knot_desc::HTW:
|
case knot_desc::HTW:
|
||||||
sprintf (buf, "kh_sq/K%d_%d.dat", desc.i, j0);
|
sprintf (buf, "knot_kh_sq/K%d_%d.dat", desc.i, j0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case knot_desc::MT:
|
case knot_desc::MT:
|
||||||
sprintf (buf, "kh_sq/L%d_%d.dat", desc.i, j0);
|
sprintf (buf, "knot_kh_sq/L%d_%d.dat", desc.i, j0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: abort ();
|
default: abort ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct stat stat_buf;
|
||||||
|
if (stat (buf, &stat_buf) != 0)
|
||||||
|
{
|
||||||
|
if (errno == ENOENT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
stderror ("stat: %s", buf);
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
printf ("loading %s...\n", buf);
|
printf ("loading %s...\n", buf);
|
||||||
|
|
||||||
reader r (buf);
|
reader r (buf);
|
||||||
map<knot_desc,
|
map<knot_desc,
|
||||||
triple<multivariate_laurentpoly<Z>,
|
pair<mod_map<Z2>, mod_map<Z2> > > m (r);
|
||||||
multivariate_laurentpoly<Z>,
|
|
||||||
multivariate_laurentpoly<Z> > > m (r);
|
|
||||||
for (map<knot_desc,
|
for (map<knot_desc,
|
||||||
triple<multivariate_laurentpoly<Z>,
|
pair<mod_map<Z2>, mod_map<Z2> > >::const_iter i = m; i; i ++)
|
||||||
multivariate_laurentpoly<Z>,
|
|
||||||
multivariate_laurentpoly<Z> > >::const_iter i = m; i; i ++)
|
|
||||||
{
|
{
|
||||||
// ??? check computations agree!!
|
knot_kh_sq.push (i.key (), i.val ());
|
||||||
if (! (knot_kh_sq % i.key ()))
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
assert (i.key ().t == desc.t);
|
|
||||||
assert (i.key ().i == desc.i);
|
|
||||||
assert (desc.j <= i.key ().j);
|
|
||||||
assert (i.key ().j <= desc.j + 4000);
|
|
||||||
|
|
||||||
if (i.key ().t == knot_desc::MT
|
|
||||||
&& i.key ().i == 11
|
|
||||||
&& (i.key ().j == 862
|
|
||||||
|| i.key ().j == 865))
|
|
||||||
compute_show_kh_sq (i.key (),
|
|
||||||
i.val ().first,
|
|
||||||
i.val ().second,
|
|
||||||
i.val ().third);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
knot_kh_sq.push (i.key (), i.val ());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
printf ("done.\n");
|
printf ("done.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const int block_size = 100;
|
||||||
|
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
knot_diagram kd (rolfsen_knot (8, 19));
|
map<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > > knot_kh_sq;
|
||||||
|
|
||||||
|
for (unsigned i = 12; i >= 1; i --)
|
||||||
|
{
|
||||||
|
if (i <= 10)
|
||||||
|
{
|
||||||
|
for (unsigned j = 1; j <= rolfsen_crossing_knots (i); j += block_size)
|
||||||
|
{
|
||||||
|
load (knot_kh_sq, knot_desc (knot_desc::ROLFSEN, i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned j = 1; j <= htw_knots (i); j += block_size)
|
||||||
|
{
|
||||||
|
load (knot_kh_sq, knot_desc (knot_desc::HTW, i, j));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i <= 13)
|
||||||
|
{
|
||||||
|
for (unsigned j = 1; j <= mt_links (i); j += block_size)
|
||||||
|
{
|
||||||
|
load (knot_kh_sq, knot_desc (knot_desc::MT, i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("|knot_kh_sq| = %d\n", knot_kh_sq.card ());
|
||||||
|
|
||||||
|
for (map<knot_desc,
|
||||||
|
pair<mod_map<Z2>, mod_map<Z2> > >::const_iter i = knot_kh_sq; i; i ++)
|
||||||
|
{
|
||||||
|
if (i.key ().t != knot_desc::ROLFSEN)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mod_map<Z2> sq1 = i.val ().first;
|
||||||
|
mod_map<Z2> sq2 = i.val ().second;
|
||||||
|
|
||||||
|
display ("sq1:\n", sq1);
|
||||||
|
display ("sq2:\n", sq2);
|
||||||
|
|
||||||
|
printf ("%s ", i.key ().name ().c_str ());
|
||||||
|
|
||||||
|
assert (sq1.compose (sq1) == 0);
|
||||||
|
assert (sq2.compose (sq2) + sq1.compose (sq2).compose (sq1) == 0);
|
||||||
|
|
||||||
|
ptr<const module<Z2> > H = sq1.domain ();
|
||||||
|
|
||||||
|
map<grading, basedvector<unsigned, 1> > st;
|
||||||
|
|
||||||
|
bool first = 1;
|
||||||
|
set<grading> gs = H->gradings ();
|
||||||
|
for (set_const_iter<grading> i = gs; i; i ++)
|
||||||
|
{
|
||||||
|
grading hq = i.val (),
|
||||||
|
h1q (hq.h + 1, hq.q),
|
||||||
|
h2q (hq.h + 2, hq.q);
|
||||||
|
|
||||||
|
// printf ("(%d, %d):\n", hq.h, hq.q);
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > H_hq = H->graded_piece (hq),
|
||||||
|
H_h1q = H->graded_piece (h1q),
|
||||||
|
H_h2q = H->graded_piece (h2q);
|
||||||
|
|
||||||
|
mod_map<Z2> whole = sq2.restrict (H_hq, H_h2q),
|
||||||
|
tail = sq1.restrict (H_hq, H_h1q),
|
||||||
|
head = sq1.restrict (H_h1q, H_h2q);
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > whole_im = whole.image (),
|
||||||
|
tail_ker = tail.kernel (),
|
||||||
|
head_im = head.image ();
|
||||||
|
ptr<const free_submodule<Z2> > inter = whole_im->intersection (head_im);
|
||||||
|
|
||||||
|
mod_map<Z2> whole_res = whole.restrict_from (tail_ker);
|
||||||
|
ptr<const free_submodule<Z2> > whole_res_im = whole_res.image ();
|
||||||
|
|
||||||
|
ptr<const free_submodule<Z2> > res_inter = whole_res_im->intersection (head_im);
|
||||||
|
|
||||||
|
int r1 = whole_im->dim ();
|
||||||
|
int r2 = whole_res_im->dim ();
|
||||||
|
int r3 = inter->dim ();
|
||||||
|
int r4 = res_inter->dim ();
|
||||||
|
|
||||||
|
if (r1 == 0
|
||||||
|
&& r2 == 0
|
||||||
|
&& r3 == 0
|
||||||
|
&& r4 == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// printf (" r = (%d, %d, %d, %d)\n", r1, r2, r3, r4);
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
int s1 = r2 - r4,
|
||||||
|
s2 = r1 - r2 - r3 + r4,
|
||||||
|
s3 = r4,
|
||||||
|
s4 = r3 - r4;
|
||||||
|
|
||||||
|
if (first)
|
||||||
|
first = 0;
|
||||||
|
else
|
||||||
|
printf (", ");
|
||||||
|
printf ("(%d, %d) -> (%d, %d, %d, %d)",
|
||||||
|
hq.h, hq.q,
|
||||||
|
s1, s2, s3, s4);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
knot_diagram kd (rolfsen_knot (5, 2));
|
||||||
show (kd); newline ();
|
show (kd); newline ();
|
||||||
|
|
||||||
cube<Z2> c (kd);
|
cube<Z2> c (kd);
|
||||||
@ -301,7 +398,7 @@ main ()
|
|||||||
write (w, sq2);
|
write (w, sq2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 1
|
#if 0
|
||||||
#if 0
|
#if 0
|
||||||
reader r ("sqtest.dat");
|
reader r ("sqtest.dat");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user