source: git/Tst/Short/bug_tr379.tst @ f1cfef

spielwiese
Last change on this file since f1cfef was b093b0, checked in by Hans Schoenemann <hannes@…>, 12 years ago
test for tr. 379 git-svn-id: file:///usr/local/Singular/svn/trunk@14418 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.2 KB
Line 
1LIB "tst.lib";
2tst_init();
3
4// used more arry entries(length(w))  than allocated(var(R))
5LIB "decodegb.lib";
6
7int q=16; // square root of the finite field size
8int k,j,l;
9//importfrom(Top, q);
10int nr_transmission=100;
11int max_weight; // maximum weight of functions used for code construction
12
13ring r0=(2^8,a),(e2,e1,x),(wp(1+0,1,1));
14
15ideal monomials = kbase(std(ideal(x^(q^2)-x, e1, e2)));
16intvec sort_result = sortvec(monomials);
17intvec monomial_weights = 0:size(monomials);
18ideal sorted_monomials;
19for (k=1; k <= size(monomials); k++) {
20  sorted_monomials[k] = monomials[sort_result[k]];
21  monomial_weights[k] = deg(sorted_monomials[k]);
22 }
23
24list all_field_elements = 0;
25for (j=0; j<=q^2-2; j++) {
26  all_field_elements = all_field_elements + list(a^j);
27 };
28
29
30matrix generator_matrix[size(sorted_monomials)][size(sorted_monomials)];
31for (j=1; j<=size(sorted_monomials); j++) {
32  for (k=1; k<=size(sorted_monomials); k++) {
33    generator_matrix[j,k] = subst(sorted_monomials[j], x, all_field_elements[k]);
34  }
35 }
36matrix inv_generator_matrix = inverse(generator_matrix);
37
38max_weight=254;
39ring r=(2^8,a),(e2,e1,x),(wp(1+max_weight,1,1));
40
41ideal sorted_monomials = imap(r0, sorted_monomials);
42int found_monomial=0;
43for (j=1; j<=size(sorted_monomials); j++) {
44  if (max_weight == deg(sorted_monomials[j])) {
45    found_monomial=1;
46  }
47 }
48if (!found_monomial) { max_weight--; continue; }
49
50int minimum_distance = size(sorted_monomials)-max_weight+1;
51int correctable_errors = (minimum_distance-1) div 2;
52list all_curve_points = imap(r0, all_field_elements);
53matrix generator_matrix = imap(r0, generator_matrix);
54matrix inv_generator_matrix = imap(r0, inv_generator_matrix);
55int error_modifier, counter;
56error_modifier=0;
57int nr_errors = correctable_errors + error_modifier;
58counter=1;
59// Randomly generate information.
60//printf("counter=%s", counter);
61matrix info[1][size(sorted_monomials)];
62for (k=1; k<=size(sorted_monomials); k++) {
63  if (deg(sorted_monomials[k]) <= max_weight /* *(counter mod 3) div 2 */ ) {
64    info[1,k] = a^(random(0,q^2-2));
65  } else {
66    info[1,k] = 0;
67  }
68 }
69matrix codeword = encode(info, generator_matrix);
70matrix recvword = errorRand(codeword, nr_errors, 8);
71matrix recv_info = recvword * inv_generator_matrix;
72matrix zero_mask[1][size(sorted_monomials)];
73for (j=1; j<= size(sorted_monomials); j++) {
74  if ((recvword-codeword)[j]==0) {
75    zero_mask[1,j] = 1;
76  } else {
77    zero_mask[1,j] = 0;
78  }
79 }
80matrix zero_mask_info = zero_mask * inv_generator_matrix;
81poly info_poly = (info * matrix(sorted_monomials, size(sorted_monomials),1))[1,1];
82poly interpolation_polynomial = (recv_info * matrix(sorted_monomials, size(sorted_monomials),1))[1,1];
83poly zero_mask_polynomial = (zero_mask_info * matrix(sorted_monomials, size(sorted_monomials),1))[1,1];
84poly min_zero_mask_poly = groebner(ideal(zero_mask_polynomial,x^(q^2)-x))[1];
85
86ideal gb = groebner(ideal(e1*(x^(q^2)-x), -e2+e1*interpolation_polynomial));
87poly min_degree_poly_with_lpos_two;
88for (j=1; j<=size(gb); j++) {
89  if (deg(lead(gb[j]), intvec(1,0,0,0)) == 1) {
90    min_degree_poly_with_lpos_two = gb[j];
91    break;
92  }
93 }
94poly target_poly = e1*info_poly*min_zero_mask_poly-e2*min_zero_mask_poly;
95
96//ideal(min_degree_poly_with_lpos_two);
97division(target_poly, ideal(min_degree_poly_with_lpos_two));
98
99tst_status(1);$
Note: See TracBrowser for help on using the repository browser.