#20705: Classes for Reed Muller Codes
-------------------------------------+-------------------------------------
       Reporter:  panda314           |        Owner:
           Type:  enhancement        |       Status:  needs_work
       Priority:  major              |    Milestone:  sage-7.3
      Component:  coding theory      |   Resolution:
       Keywords:                     |    Merged in:
        Authors:                     |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/panda314/classes_for_reed_muller_codes|  
23ff289a86e2d4266512e631f50ee75c6338ccd8
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------

Comment (by panda314):

 Thanks. I have started implementing some of the changes you have
 suggested.
 Regarding formatting, is there any format code or something that i can
 plug in a ide interface and automatically implement them? It will be
 tedious to go through the code and manually do them.

 Regarding private functions. I had not added examples for them because
 doctest would not be able to execute them since i had not listed them
 anywhere. Will writing them as _<private functions> solve that?

 Replying to [comment:10 dlucas]:
 > Disclaimer: the following remarks are only related to the code in itsef.
 I did not run (yet) extensive tests on border cases and larger cases than
 the ones covered by doctests.
 >
 > General remark on exceptions: don't need to write "Incorrect data-type
 ..." every time, as `ValueError` will be printed on the screen and it
 means there is something wrong with the input.
 >
 > Another remark on documentation: you have to add this module to
 `src/doc/en/reference/coding/index.rst` to make it appear in the online
 documentation. For now, this module is never considered when compiling
 documentation - which means, even if you run `sage --docbuild
 reference/coding`, you won't be able to know if there are some bugs in
 your doc.
 >
 > ''binomial_sum''
 >
 > I think it might be better to make it a private method (which can be
 done by calling it _binomial_sum).
 >
 > You could have used already implemented methods, ending up with
 something like:
 >
 > `return sum(binomial(n, i) for i in range(k+1))` or `for i in
 range(k+1): s += binomial(n, i)`
 >
 > BUT it's much slower than you implementation (up to a factor of 10
 according to `timeit`). So, we should just keep what you did :)
 >
 > ''multivariate_polynomial_interpolation''
 >
 > I'd make it a private method as it's only used internally as a helper.
 > I would also change the name `_R` to `polynomial_ring`. It's probably
 something
 > you copied from my poor naming choice in grs.py... I changed it in
 #20744 in the meanwhile ;)
 >
 > I'd also rename some variables: `evaluation2` might be
 `multipoint_evaluation_list` or something like that. I would also change
 the name `nq`, but I don't have any idea here. I would also rename
 `finiteField` as `base_field` for consistency.
 > You should be careful with `0`s and `1`s: the `0` l. 87 is not the same
 as the one on line 89: the former is the zero of the base field while the
 latter is the zero of the multivariate polynomial ring where `poly` lives.
 > I recommend using specific variables for these zeroes/ones, which you
 can define as follows: `base_field_zero = base_field.zero()`.
 >
 > ''ReedMullerCode''
 >
 > - you need to add `::` in the end of your second example's descriptive
 sentence.
 >
 > ''General remark on classes''
 >
 > - Most of your class parameters are public variables that one has to
 call directly (e.g. `C.numberOfVariable`) to access. I would change this:
 make all these variables private (prefix them by an underscore) and write
 getter methods.
 > One should call `C.number_of_variables()` to the number of variables
 used.
 >
 > ''QAry/BinaryReedMullerCode''
 >
 > - You could add a method to compute the minimum distance, as we know a
 closed formula to compute it, it's quite a shame to call the exhaustive
 search algortihm if one types `My_rm_code.minimum_distance()`.
 > If `q` is 2, `D = 2^(m-d)`, otherwise it's `q^m - d*q^(m-1)`, with `m`
 the number of variables and `d` the order.
 > ''
 > QAryReedMullerCode''
 >
 > - I would add a `WARNING::` block which states that the order has to be
 less than `q` to be sure users know about it. Of course, it will be
 removed later on, but the more informative the better.
 >
 > ''Vectorial encoder''
 >
 > - I noticed you compute the generator matrix at construction time. I
 strongly disagree with this behaviour: as the generator matrix computation
 can be heavy, I advise you to only compute it when the needed (i.e. in the
 method `generator_matrix`). The method `generator_matrix` should also be
 cached (use the decorator `@cached_method`).
 >
 > - On the generator matrix computation. I think you should use iterators
 when possible. Especially, the lines
 >
 > {{{
 > baseFieldTuple=Tuples(baseField.list(),numberOfVariable)
 > [...] for x in baseFieldTuple.list()
 > }}}
 >
 >
 > will kill you. For example, over `GF(31)`, with only 4 variables, it
 takes more than 3 minutes to compute the list of all tuples on my laptop
 (16 GB RAM).
 > Using an iterator will not compute the full list of tuples, which saves
 time and memory for larger codes.
 >
 > Same for `exponents`: over GF(23), 4 variables and dimension 6, it takes
 circa 30 seconds to execute this on my laptop:
 >
 > {{{
 > exponents=Subsets(range(numberOfVariable)*(q-1),
 submultiset=True)[0:code.dimension()]
 > }}}
 >
 > Best,
 >
 > David

--
Ticket URL: <http://trac.sagemath.org/ticket/20705#comment:11>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to