Flatten punctured codes

Issue #135 resolved
David Lucas repo owner created an issue

This issue has two objectives:

  • discuss the implementation and

  • find concrete examples.

Implementation

Class-centric: Code a of class A has method a.punctured_representation(P) which takes a list of punctured points P and returns an code of some class B, being a rich representation of a punctured at those points.

If one already has a_punc = PuncturedCode(a, P) then a_punc.flatten() returns the same as a.punctured_representation(P).

The punctured_representation can be made at construction time, or on the first call of flatten, the former if it's fast to compute on any example we could picture, the latter if it's (very) slow for some families.

So, basically flatten method could be something like that:

@cached_method
flatten(self):
    try:
        return self.original_code().punctured_representation()
    except AttributeError:
        return sage.coding.linear_code.AbstractLinearCode.punctured_representation()       

Concrete examples

  • (G)RS codes: Class B is also a GRS code where eval points are removed

  • AG codes: same as GRS codes

  • Subfield subcodes: punctured_representation(P) should return SubfieldSubcode(orig_code.punctured_representation(P))

  • Concatenated codes: Puncturing in the right pattern can correspond to puncturing the inner or outer code. But this is a bit artificial.

Comments (3)

  1. David Lucas reporter

    I implemented this mechanism (which I called structured_representation() in commit ebcf8d3 revised in 9b9c53a. It works for GRS (it returns a GRS) and for other code families (it returns a LinearCode).

    It even works if one perform several puncturing in a row: in that case it roams the chain backwards to identify the original structured code and then calls structured_representation on this one with an updated list of punctured positions.

    An example is given lines 322 to 338 in test_punctured.sheet.

  2. Log in to comment