Ejemplo n.º 1
0
void flag_orbit_node::print_latex(flag_orbits *Flag_orbits,
		ostream &ost,
		int f_print_stabilizer_gens)
{
	longinteger_object go;

	ost << "Flag orbit " << flag_orbit_index << " / " << Flag_orbits->nb_flag_orbits
			<< " down=(" << downstep_primary_orbit
			<< "," << downstep_secondary_orbit
			<< ")"
			<< " up=(" << upstep_primary_orbit
			<< "," << upstep_secondary_orbit
			<< ")";
	if (f_fusion_node) {
		ost << " fuse to " << fusion_with;
	}
	ost << " is ";
	int_vec_print(ost, Flag_orbits->Pt +
			flag_orbit_index * Flag_orbits->pt_representation_sz,
			Flag_orbits->pt_representation_sz);
	ost << " with a stabilizer of order ";
	gens->group_order(go);
	ost << go << "\\\\" << endl;
	if (f_print_stabilizer_gens) {
		gens->print_generators_tex(ost);
	}
	if (f_fusion_node) {
		ost << "Fusion element:\\\\" << endl;
		ost << "$$" << endl;
		Flag_orbits->A->element_print_latex(fusion_elt, ost);
		ost << "$$" << endl;
	}
}
Ejemplo n.º 2
0
int vector_hashing::rank(int *data)
{
	int h, idx, f, l, i, I;
	sorting Sorting;
	
	h = int_vec_hash(data, data_size, bit_length);
	if (!Sorting.int_vec_search(type_value, nb_types, h, idx)) {
		cout << "vector_hashing::rank did not "
				"find hash value h=" << h << endl;
		exit(1);
		}
	f = type_first[idx];
	l = type_len[idx];
	for (i = 0; i < l; i++) {
		I = f + i;
		idx = perm_inv[I];
		if (int_vec_compare(vector_data + idx * data_size,
				data, data_size) == 0) {
			return idx;
			}
		}
	cout << "vector_hashing::rank did not find "
			"data f=" << f << " l=" << l << endl;
	cout << "data:" << endl;
	int_vec_print(cout, data, data_size);
	cout << endl;
	cout << "hash h=" << h << endl;
	cout << "idx=" << idx << endl;
	for (i = 0; i < l; i++) {
		I = f + i;
		idx = perm_inv[I];
		cout << I << " : " << idx << " : ";
		int_vec_print(cout, vector_data + idx * data_size, data_size);
		cout << endl;
		}
	cout << endl;
	
	print();
	
	exit(1);
	
}
Ejemplo n.º 3
0
void vector_hashing::print()
{
	int i, j, idx;
	
	cout << "vector_hashing  N=" << N << " nb_types=" << nb_types << endl;
	cout << "data:" << endl;
	for (i = 0; i < N; i++) {
		cout << i << " : ";
		int_vec_print(cout, vector_data + i * data_size, data_size);
		cout << " : " << H[i] << endl;
		}

	cout << "H sorted:" << endl;
	int_vec_print(cout, H_sorted, N);
	cout << endl;

	cout << "types:" << endl;
	for (i = 0; i < nb_types; i++) {
		//if (type_len[i] == 1)
			//continue;
		cout << i << " : " 
			<< type_first[i] << " : " 
			<< type_len[i] 
			<< " : " << H_sorted[type_first[i]] << " : " << endl;
		for (j = 0; j < type_len[i]; j++) {
			idx = perm_inv[type_first[i] + j];
			cout << "j=" << j << " index " << idx << endl;
			cout << idx << " : ";
			int_vec_print(cout, vector_data + idx * data_size, data_size);
			cout << " : " << H[idx] << endl;
			}
		}
	cout << "type_value:" << endl;
	for (i = 0; i < nb_types; i++) {
		cout << setw(4) << i << " : " << setw(10) << type_value[i] << endl;
		}
}
Ejemplo n.º 4
0
void orbit_node::init(classification_step *C, int orbit_index,
	strong_generators *gens, int *Rep, int verbose_level)
{
	int f_v = (verbose_level >= 1);

	if (f_v) {
		cout << "orbit_node::init "
				"orbit_index=" << orbit_index << " rep=";
		int_vec_print(cout, Rep, C->representation_sz);
		cout << endl;
		}
	orbit_node::C = C;
	orbit_node::orbit_index = orbit_index;
	orbit_node::gens = gens;
	int_vec_copy(Rep,
			C->Rep + orbit_index * C->representation_sz,
			C->representation_sz);
}
Ejemplo n.º 5
0
void vector_hashing::compute_tables(int verbose_level)
{
	int f_v = (verbose_level >= 1);
	int f_vv = (verbose_level >= 2);
	int i, j, idx;
	sorting Sorting;

	
	if (f_v) {
		cout << "vector_hashing::compute_tables" << endl;
		}
	for (i = 0; i < N; i++) {
		H[i] = int_vec_hash(
				vector_data + i * data_size,
				data_size, bit_length);
		}
#if 0
	cout << "H:" << endl;
	int_vec_print(cout, H, N);
	cout << endl;
#endif

	Sorting.int_vec_classify(N, H, H_sorted, perm, perm_inv,
		nb_types, type_first, type_len);
	
	if (f_v) {
		cout << "N       =" << N << endl;
		cout << "nb_types=" << nb_types << endl;
		}
	type_value = NEW_int(nb_types);
	
	for (i = 0; i < nb_types; i++) {
		idx = type_first[i] + 0;
		type_value[i] = H_sorted[idx];
		}
	
	//int_vec_sorting_permutation(H, N, perm, perm_inv,
	//TRUE /* f_increasingly */);
	
	
#if 0
	for (i = 0; i < N; i++) {
		H_sorted[perm[i]] = H[i];
		}
#endif
	
	
#if 0
	cout << "H sorted:" << endl;
	int_vec_print(cout, H_sorted, N);
	cout << endl;
#endif
	if (f_vv) {
		cout << "vector_hashing::compute_tables() N=" << N
				<< " nb_types=" << nb_types << endl;
		for (i = 0; i < nb_types; i++) {
			if (type_len[i] == 1)
				continue;
			cout << i << " : " 
				<< type_first[i] << " : " 
				<< type_len[i] 
				<< " : " << H_sorted[type_first[i]] << " : " << endl;
			for (j = 0; j < type_len[i]; j++) {
				idx = perm_inv[type_first[i] + j];
				cout << "j=" << j << " index " << idx << endl;
				cout << idx << " : ";
				int_vec_print(cout, vector_data + idx * data_size, data_size);
				cout << " : " << H[idx] << endl;
				}
			}
		}
}
Ejemplo n.º 6
0
void blt_set_invariants::latex(ostream &ost, int verbose_level)
{
	int f_v = (verbose_level >= 1);
	sorting Sorting;

	if (f_v) {
		cout << "blt_set_invariants::latex" << endl;
	}



	int a, i, j;
	ost << "Plane intersection type is ";
	for (i = highest_intersection_number; i >= 0; i--) {

		a = intersection_type[i];
		if (a == 0)
			continue;
		ost << "$" << i;
		if (a > 9) {
			ost << "^{" << a << "}";
			}
		else if (a > 1) {
			ost << "^" << a;
			}
		ost << "$ ";
		}
	ost << "\\\\" << endl;
	ost << "Plane invariant is ";

	if (nb_planes < 10) {
		ost << "$$";
		ost << "\\left[" << endl;
		ost << "\\begin{array}{*{" << nb_planes << "}{c}}" << endl;
		for (i = 0; i < nb_planes; i++) {
			for (j = 0; j < nb_planes; j++) {
				ost << intersection_matrix[i * nb_planes + j];
				if (j < nb_planes - 1) {
					ost << " & ";
					}
				}
			ost << "\\\\" << endl;
			}
		ost << "\\end{array}" << endl;
		ost << "\\right]" << endl;
		ost << "$$" << endl;
		}
	else {
		ost << "too big (" << nb_planes << " planes)\\\\" << endl;
		}

	int f_enter_math = FALSE;
	int f_print_subscripts = TRUE;

	ost << "$$" << endl;
	D2->print_row_decomposition_tex(
		ost, f_enter_math, f_print_subscripts, verbose_level - 1);
	ost << "\\quad" << endl;
	D2->print_column_decomposition_tex(
		ost, f_enter_math, f_print_subscripts, verbose_level - 1);
	ost << "$$" << endl;
	D2->Stack->print_classes_tex(ost);

	if (Sos3->nb_sets) {
		ost << "$$" << endl;

		D3->print_row_decomposition_tex(
			ost, f_enter_math, f_print_subscripts, verbose_level - 1);
		ost << "$$" << endl;
		ost << "$$" << endl;
		D3->print_column_decomposition_tex(
			ost, f_enter_math, f_print_subscripts, verbose_level - 1);
		ost << "$$" << endl;
		D3->Stack->print_classes_tex(ost);

		int t, fst_col, fst, len, u, a;

		fst_col = D3->Stack->startCell[1];
		for (t = 0; t < D3->Stack->ht; t++) {
			if (!D3->Stack->is_col_class(t)) {
				continue;
				}
			ost << "Column cell " << t << ":\\\\" << endl;
			len = D3->Stack->cellSize[t];
			fst = D3->Stack->startCell[t];
			int *Cell;
			Cell = NEW_int(len);
			for (u = 0; u < len; u++) {
				a = D3->Stack->pointList[fst + u] - fst_col;
				Cell[u] = a;
				}
			Sorting.int_vec_heapsort(Cell, len);
#if 0
			for (u = 0; u < len; u++) {
				a = Cell[u];
				b = Sos3_idx[h][a];
				f << a << " (rank = ";
				R[h][b].print_not_scientific(f);
				f << ") = ";
				G->unrank_longinteger(R[h][b], 0 /* verbose_level */);
				f << "$\\left[" << endl;
				f << "\\begin{array}{*{" << 5 << "}{c}}" << endl;
				for (i = 0; i < 3; i++) {
					for (j = 0; j < 5; j++) {
						c = G->M[i * 5 + j];
						f << c;
						if (j < 4) {
							f << "&";
							}
						}
					f << "\\\\" << endl;
					}
				f << "\\end{array}" << endl;
				f << "\\right]$\\\\" << endl;
				}
#endif
			FREE_int(Cell);
			}
		}

	int tt, u, v;
	tt = (set_size + 3) / 4;

	ost << "The points by ranks:\\\\" << endl;
	ost << "\\begin{center}" << endl;

	for (u = 0; u < 4; u++) {
		ost << "\\begin{tabular}[t]{|c|c|}" << endl;
		ost << "\\hline" << endl;
		ost << "$i$ & Rank \\\\" << endl;
		ost << "\\hline" << endl;
		for (i = 0; i < tt; i++) {
			v = u * tt + i;
			if (v < set_size) {
				ost << "$" << v << "$ & $" << the_set_in_orthogonal[v]
					<< "$ \\\\" << endl;
				}
			}
		ost << "\\hline" << endl;
		ost << "\\end{tabular}" << endl;
		}
	ost << "\\end{center}" << endl;

	ost << "The points:\\\\" << endl;
	int v5[5];
	for (i = 0; i < set_size; i++) {
		D->O->unrank_point(
				v5, 1, the_set_in_orthogonal[i], 0 /* verbose_level */);
		//Grass->unrank_int(data[i], 0/*verbose_level - 4*/);
		if ((i % 4) == 0) {
			if (i) {
				ost << "$$" << endl;
				}
			ost << "$$" << endl;
			}
		//f << "\\left[" << endl;
		//f << "\\begin{array}{c}" << endl;
		ost << "P_{" << i /*data[i]*/ << "}=";
		int_vec_print(ost, v5, 5);
#if 0
		for (u = 0; u < 5; u++) {
			for (v = 0; v < n; v++) {
				f << Grass->M[u * n + v];
				}
			ost << "\\\\" << endl;
			}
#endif
		//f << "\\end{array}" << endl;
		//f << "\\right]" << endl;
		}
	ost << "$$" << endl;


	if (f_v) {
		cout << "blt_set_invariants::latex done" << endl;
	}
}
Ejemplo n.º 7
0
void tdo_scheme::init_partition_stack(int verbose_level)
{
	int k, at, f, c, l, i;
	int f_v = (verbose_level >= 1);
	int f_vv = (verbose_level >= 2);
	int f_vvv = (verbose_level >= 3);
	
	if (f_v) {
		cout << "tdo_scheme::init_partition_stack" << endl;
		}
	if (f_vv) {
		cout << "part_length=" << part_length << endl;
		cout << "row_level=" << row_level << endl;
		cout << "col_level=" << col_level << endl;
		cout << "verbose_level=" << verbose_level << endl;
		}
	mn = part[0];
	m = part[1];
	n = mn - m;
	if (part_length < 2) {
		cout << "part_length < 2" << endl;
		exit(1);
		}
	if (f_vvv) {
		cout << "init_partition_stack: m=" << m << " n=" << n << endl;
		int_vec_print(part, part_length + 1);
		cout << endl;
		}
	
	P = new partitionstack;
	P->allocate(m + n, 0 /* verbose_level */);
	//PB.init_partition_backtrack_basic(m, n, verbose_level - 10);
	if (f_vvv) {
		cout << "after PB.init_partition_backtrack_basic" << endl;
		}

	//partitionstack &P = PB.P;

	if (f_vvv) {
		cout << "initial partition stack: " << endl;
		P->print(cout);
		}
	for (k = 1; k < part_length; k++) {
		at = part[k];
		c = P->cellNumber[at];
		f = P->startCell[c];
		l = P->cellSize[c];
		if (f_vvv) {
			cout << "part[" << k << "]=" << at << endl;
			cout << "P->cellNumber[at]=" << c << endl;
			cout << "P->startCell[c]=" << f << endl;
			cout << "P->cellSize[c]=" << l << endl;
			cout << "f + l - at=" << f + l - at << endl;
			}
		P->subset_continguous(at, f + l - at);
		P->split_cell(FALSE);
		if (f_vvv) {
			cout << "after splitting at " << at << endl;
			P->print(cout);
			}
		if (P->ht == row_level) {
			l = P->ht;
			if (the_row_scheme) {
				FREE_int(the_row_scheme);
				the_row_scheme = NULL;
				}
			the_row_scheme = NEW_int(l * l);
			for (i = 0; i < l * l; i++) {
				the_row_scheme[i] = -1;
				}
			get_partition(ROW, l, verbose_level - 3);
			get_row_or_col_scheme(ROW, l, verbose_level - 3);
			}
			
		if (P->ht == col_level) {
			l = P->ht;
			if (the_col_scheme) {
				FREE_int(the_col_scheme);
				the_col_scheme = NULL;
				}
			the_col_scheme = NEW_int(l * l);
			for (i = 0; i < l * l; i++) {
				the_col_scheme[i] = -1;
				}
			get_partition(COL, l, verbose_level - 3);	
			get_row_or_col_scheme(COL, l, verbose_level - 3);
			}
			
		if (P->ht == extra_row_level) {
			l = P->ht;
			if (the_extra_row_scheme) {
				FREE_int(the_extra_row_scheme);
				the_extra_row_scheme = NULL;
				}
			the_extra_row_scheme = NEW_int(l * l);
			for (i = 0; i < l * l; i++) {
				the_extra_row_scheme[i] = -1;
				}
			get_partition(EXTRA_ROW, l, verbose_level - 3);
			get_row_or_col_scheme(EXTRA_ROW, l, verbose_level - 3);	
			}
			
		if (P->ht == extra_col_level) {
			l = P->ht;
			if (the_extra_col_scheme) {
				FREE_int(the_extra_col_scheme);
				the_extra_col_scheme = NULL;
				}
			the_extra_col_scheme = NEW_int(l * l);
			for (i = 0; i < l * l; i++) {
				the_extra_col_scheme[i] = -1;
				}
			get_partition(EXTRA_COL, l, verbose_level - 3);
			get_row_or_col_scheme(EXTRA_COL, l, verbose_level - 3);	
			}
			
		if (P->ht == lambda_level) {
			l = P->ht;
			get_partition(LAMBDA, l, verbose_level - 3);
			}
			
		} // next k
	
	if (f_vvv) {
		cout << "before complete_partition_info" << endl;
		}
	if (row_level >= 2) {
		complete_partition_info(ROW, 0/*verbose_level*/);
		}
	if (col_level >= 2) {
		complete_partition_info(COL, 0/*verbose_level*/);
		}
	if (extra_row_level >= 2) {
		complete_partition_info(EXTRA_ROW, 0/*verbose_level*/);
		}
	if (extra_col_level >= 2 && extra_col_level < part_length) {
		complete_partition_info(EXTRA_COL, 0/*verbose_level*/);
		}
	complete_partition_info(LAMBDA, 0/*verbose_level*/);
	
	if (f_vv) {
		if (row_level >= 2) {
			print_scheme(ROW, FALSE);
			}
		if (col_level >= 2) {
			print_scheme(COL, FALSE);
			}
		if (extra_row_level >= 2) {
			print_scheme(EXTRA_ROW, FALSE);
			}
		if (extra_col_level >= 2) {
			print_scheme(EXTRA_COL, FALSE);
			}
		print_scheme(LAMBDA, FALSE);
		}
}
Ejemplo n.º 8
0
void coding_theory_domain::make_tensor_code_9dimensional_as_point_set(
	finite_field *F,
	int *&the_set, int &length,
	int verbose_level)
{
	int f_v = (verbose_level >= 1);
	int f_hyperoval = FALSE;
	const char *override_poly = "";
	const char *override_poly_Q = "";
	int i, t, q;
	int *code;

	if (f_v) {
		cout << "make_tensor_code_9dimensional_as_point_set" << endl;
		}
	q = F->q;
	if (q == 2) {
		override_poly_Q = ""; override_poly = ""; f_hyperoval = FALSE;
		}
	else if (q == 3) {
		override_poly_Q = ""; override_poly = ""; f_hyperoval = FALSE;
		}
	else if (q == 4) {
		override_poly_Q = "19"; override_poly = "7"; f_hyperoval = FALSE;
		// F_256  generated by X^8 + X^4 + X^3 + X^2 + 1
		// F_16 generated by X^4+X+1 = 19
		// F_4 generated by X^2+X+1 = 7
		}
	else if (q == 5) {
		override_poly_Q = "47"; override_poly = ""; f_hyperoval = FALSE;
		// F_625  generated by X^4 + X^3 + 3X + 2
		// F_25  generated by X^2 + 4X + 2  = 47
		}
	else if (q == 7) {
		override_poly_Q = ""; override_poly = ""; f_hyperoval = FALSE;
		}
	else if (q == 8) {
		override_poly_Q = "97"; override_poly = "11"; f_hyperoval = TRUE;
		// F_4096 generated by x^12+x^6+x^4+x+1
		// F_64 generated by X^6+X^5+1 = 97
		// F_8 generated by X^3+X+1 = 11
		}
	else if (q == 9) {
		override_poly_Q = ""; override_poly = "17"; f_hyperoval = FALSE;
		}
	make_tensor_code_9_dimensional(q, override_poly_Q, override_poly,
		f_hyperoval, code, length, verbose_level - 1);

	the_set = NEW_int(length);

	int pt[9], rk;

	for (t = 0; t < length; t++) {
		for (i = 0; i < 9; i++) {
			pt[i] = code[i * length + t];
			}
		F->PG_element_rank_modified(pt, 1, 9, rk);
		the_set[t] = rk;
		}
	FREE_int(code);
	if (f_v) {
		cout << "make_tensor_code_9dimensional_as_point_set done" << endl;
		cout << "created the set: ";
		int_vec_print(cout, the_set, length);
		cout << endl;
		}
}
Ejemplo n.º 9
0
void coding_theory_domain::twisted_tensor_product_codes(
	int *&H_subfield, int &m, int &n,
	finite_field *F, finite_field *f,
	int f_construction_A, int f_hyperoval,
	int f_construction_B, int verbose_level)
{
	int f_v = (verbose_level >= 1);
	int f_vv = (verbose_level >= 2);
	int index;
	int exponents[9];
	int *M;
	//int *H_subfield;
	int *C;
	int *C_inv;

	int q = f->q;
	int q2;
	int Q;
	//int m, n;
	int r;
	int beta, beta_q;
	int f_elements_exponential = TRUE;
	const char *symbol_for_print = "\\alpha";
	const char *symbol_for_print_subfield = "\\omega";



	if (f_v) {
		cout << "twisted_tensor_product_codes" << endl;
		cout << "f_construction_A=" << f_construction_A << endl;
		cout << "f_hyperoval=" << f_hyperoval << endl;
		cout << "f_construction_B=" << f_construction_B << endl;
		}


	q2 = q * q;
	Q = 0;
	if (f_construction_A) {
		Q = q2;
		}
	else if (f_construction_B) {
		Q = q2 * q;
		}
	index = (Q - 1) / (q - 1);

	if (Q != F->q) {
		cout << "twisted_tensor_product_codes Q != F->q" << endl;
		exit(1);
		}


	if (f_vv) {
		cout << "q = " << q << endl;
		cout << "Q = " << Q << endl;
		cout << "index = " << index << endl;
		}

#if 0
	F.init_override_polynomial(Q, override_poly_Q, verbose_level - 2);

	if (f_vv) {
		cout << "field of order " << Q << " initialized" << endl;
		}

	f.init_override_polynomial(q, override_poly_q, verbose_level - 2);

	if (f_vv) {
		cout << "field of order " << q << " initialized" << endl;
		cout << "index = " << index << endl;
		}
#endif

	F->compute_subfields(verbose_level - 2);


	create_matrix_M(
			M,
			F, f,
			m, n, beta, r, exponents,
			f_construction_A, f_hyperoval, f_construction_B,
			f_elements_exponential, symbol_for_print,
			verbose_level - 2);

	beta_q = F->power(beta, q);

	if (f_vv) {
		cout << "twisted_tensor_product_codes after create_matrix_M" << endl;
		cout << "m = " << m << endl;
		cout << "n = " << n << endl;
		cout << "Q = " << Q << endl;
		cout << "q2 = " << q2 << endl;
		cout << "beta = " << beta << endl;
		cout << "beta_q = " << beta_q << endl;
		cout << "Exponents: ";
		int_vec_print(cout, exponents, m);
		cout << endl;
		}

	if (f_vv) {
		cout << "twisted_tensor_product_codes: M:" << endl;
		print_integer_matrix_width(cout, M, m, n, n, 2);

		F->latex_matrix(cout, f_elements_exponential, symbol_for_print, M, m, n);
		}




#if 0
	for (j = 0; j < n; j++) {
		PG_element_normalize(F, M + j, n, m);
		}
	cout << "column normalized M:" << endl;
	print_integer_matrix_width(cout, M, m, n, n, 2);
#endif




	C = NEW_int(m * m);
	C_inv = NEW_int(m * m);
	H_subfield = NEW_int(m * n);


	create_matrix_H_subfield(F, f,
		H_subfield, C, C_inv, M, m, n, beta, beta_q,
		f_elements_exponential, symbol_for_print, symbol_for_print_subfield,
		f_construction_A, f_hyperoval, f_construction_B,
		verbose_level - 2);


	if (f_v) {
		cout << "twisted_tensor_product_codes: after create_matrix_H_subfield" << endl;
		cout << "H_subfield:" << endl;
		print_integer_matrix_width(cout, H_subfield, m, n, n, 2);
		f->latex_matrix(cout, f_elements_exponential, symbol_for_print_subfield, H_subfield, m, n);
		}

	FREE_int(M);
	FREE_int(C);
	FREE_int(C_inv);

}