@@ -714,7 +714,7 @@ class AbstractLinearCode(module.Module):
714
714
715
715
- ``length``, the length of the code
716
716
717
- - ``decoder_default_name ``, the name of the decoder that will be used if no encoder name is passed
717
+ - ``default_decoder_name ``, the name of the decoder that will be used if no encoder name is passed
718
718
to an encoder-related method (``decode_to_code``, ``decode_to_message``)
719
719
720
720
- ``_registered_decoders``, a dictionary of all decoders available for this class
@@ -754,7 +754,7 @@ class AbstractLinearCode(module.Module):
754
754
755
755
_registered_decoders = {}
756
756
757
- def __init__ (self , base_field , length , decoder_default_name ):
757
+ def __init__ (self , base_field , length , default_decoder_name ):
758
758
"""
759
759
Initializes mandatory parameters for a Linear Code object.
760
760
@@ -768,7 +768,7 @@ def __init__(self, base_field, length, decoder_default_name):
768
768
769
769
- ``length`` -- the length of ``self``
770
770
771
- - ``decoder_default_name `` -- the name of the default decoder of ``self``
771
+ - ``default_decoder_name `` -- the name of the default decoder of ``self``
772
772
773
773
EXAMPLES:
774
774
@@ -842,10 +842,10 @@ def __init__(self, base_field, length, decoder_default_name):
842
842
self ._registered_decoders = copy (self ._registered_decoders )
843
843
if not isinstance (length , (int , Integer )):
844
844
raise ValueError ("length must be a Python int or a Sage Integer" )
845
- if not decoder_default_name in self ._registered_decoders :
845
+ if not default_decoder_name in self ._registered_decoders :
846
846
raise ValueError ("You must set a valid decoder as default decoder for this code" )
847
847
self ._length = Integer (length )
848
- self ._decoder_default_name = decoder_default_name
848
+ self ._default_decoder_name = default_decoder_name
849
849
cat = Modules (base_field ).FiniteDimensional ().WithBasis ().Finite ()
850
850
facade_for = VectorSpace (base_field , self ._length )
851
851
self .Element = type (facade_for .an_element ()) #for when we made this a non-facade parent
@@ -929,7 +929,7 @@ def add_decoder(self, name, decoder):
929
929
ValueError: There is already a registered decoder with this name
930
930
"""
931
931
reg_dec = self ._registered_decoders
932
- if (name in reg_dec . keys () ):
932
+ if (name in reg_dec ):
933
933
raise ValueError ("There is already a registered decoder with this name" )
934
934
reg_dec [name ] = decoder
935
935
@@ -1503,7 +1503,7 @@ def decode(self, right, algorithm="syndrome"):
1503
1503
else :
1504
1504
return self .decode_to_code (right , name = algorithm )
1505
1505
1506
- def decode_to_code (self , word , name = None , ** kwargs ):
1506
+ def decode_to_code (self , word , decoder_name = None , ** kwargs ):
1507
1507
r"""
1508
1508
Correct the errors in word and returns a codeword.
1509
1509
@@ -1512,10 +1512,12 @@ def decode_to_code(self, word, name=None, **kwargs):
1512
1512
- ``word`` -- a vector of the same length as ``self`` over test
1513
1513
the base field of ``self``
1514
1514
1515
- - ``name `` -- (default: ``None``) Name of the decoder which will be used
1515
+ - ``decoder_name `` -- (default: ``None``) Name of the decoder which will be used
1516
1516
to decode ``word``. The default decoder of ``self`` will be used if
1517
1517
default value is kept.
1518
1518
1519
+ - ``kwargs`` -- all additional arguments are forwarded to :meth:`decoder`
1520
+
1519
1521
OUTPUT:
1520
1522
1521
1523
- A vector of ``self``.
@@ -1539,7 +1541,7 @@ def decode_to_code(self, word, name=None, **kwargs):
1539
1541
D = self .decoder (name , ** kwargs )
1540
1542
return D .decode_to_code (word )
1541
1543
1542
- def decode_to_message (self , word , name = None , ** kwargs ):
1544
+ def decode_to_message (self , word , decoder_name = None , ** kwargs ):
1543
1545
r"""
1544
1546
Correct the errors in word and decodes it to the message space.
1545
1547
@@ -1548,10 +1550,12 @@ def decode_to_message(self, word, name=None, **kwargs):
1548
1550
- ``word`` -- a vector of the same length as ``self`` over the
1549
1551
base field of ``self``
1550
1552
1551
- - ``name `` -- (default: ``None``) Name of the decoder which will be used
1553
+ - ``decoder_name `` -- (default: ``None``) Name of the decoder which will be used
1552
1554
to decode ``word``. The default decoder of ``self`` will be used if
1553
1555
default value is kept.
1554
1556
1557
+ - ``kwargs`` -- all additional arguments are forwarded to :meth:`decoder`
1558
+
1555
1559
OUTPUT:
1556
1560
1557
1561
- A vector of the message space of ``self``.
@@ -1574,16 +1578,19 @@ def decode_to_message(self, word, name=None, **kwargs):
1574
1578
return self .unencode (self .decode_to_code (word , name , ** kwargs ), ** kwargs )
1575
1579
1576
1580
@cached_method
1577
- def decoder (self , name = None , ** kwargs ):
1581
+ def decoder (self , decoder_name = None , ** kwargs ):
1578
1582
r"""
1579
1583
Return a decoder of ``self``.
1580
1584
1581
1585
INPUT:
1582
1586
1583
- - ``name `` -- (default: ``None``) name of the decoder which will be
1587
+ - ``decoder_name `` -- (default: ``None``) name of the decoder which will be
1584
1588
returned. The default decoder of ``self`` will be used if
1585
1589
default value is kept.
1586
1590
1591
+ - ``kwargs`` -- all additional arguments will be forwarded to the constructor of the decoder
1592
+ that will be returned by this method
1593
+
1587
1594
OUTPUT:
1588
1595
1589
1596
- a decoder object
@@ -1609,11 +1616,11 @@ def decoder(self, name=None, **kwargs):
1609
1616
...
1610
1617
ValueError: Passed Decoder name not known
1611
1618
"""
1612
- if name is None :
1613
- name = self ._decoder_default_name
1614
- return self .decoder (name , ** kwargs )
1615
- if name in self ._registered_decoders :
1616
- decClass = self ._registered_decoders [name ]
1619
+ if decoder_name is None :
1620
+ name = self ._default_decoder_name
1621
+ return self .decoder (decoder_name , ** kwargs )
1622
+ if decoder_name in self ._registered_decoders :
1623
+ decClass = self ._registered_decoders [decoder_name ]
1617
1624
D = decClass (self , ** kwargs )
1618
1625
return D
1619
1626
else :
@@ -1630,7 +1637,10 @@ def decoders_available(self):
1630
1637
sage: C.decoders_available()
1631
1638
['Syndrome', 'NearestNeighbor']
1632
1639
"""
1640
+ if values == True :
1641
+ return copy (self ._registered_decoders )
1633
1642
return self ._registered_decoders .keys ()
1643
+
1634
1644
def divisor (self ):
1635
1645
r"""
1636
1646
Returns the divisor of a code, which is the smallest integer `d_0 > 0`
@@ -2538,7 +2548,7 @@ def permutation_automorphism_group(self, algorithm="partition"):
2538
2548
print "\n Using the %s codewords of weight %s \n Supergroup size: \n %s\n " % (wts [wt ],wt ,size )
2539
2549
gap .eval ("Cwt:=Filtered(eltsC,c->WeightCodeword(c)=%s)" % wt ) # bottleneck 2 (repeated
2540
2550
gap .eval ("matCwt:=List(Cwt,c->VectorCodeword(c))" ) # for each i until stop = 1)
2541
- if gap ("Length(matCwt)" ) > 0 :
2551
+ if gap ("Length(matCwt)" ) > 0 :
2542
2552
A = gap ("MatrixAutomorphisms(matCwt)" )
2543
2553
G2 = gap ("Intersection2(%s,%s)" % (str (A ).replace ("\n " ,"" ),str (Gp ).replace ("\n " ,"" ))) # bottleneck 3
2544
2554
Gp = G2
@@ -3020,7 +3030,7 @@ def spectrum(self, algorithm=None):
3020
3030
input = code2leon (self ) + "::code"
3021
3031
import os , subprocess
3022
3032
lines = subprocess .check_output ([os .path .join (guava_bin_dir , 'wtdist' ), input ])
3023
- import StringIO # to use the already present output parser
3033
+ import StringIO # to use the already present output parser
3024
3034
wts = [0 ]* (n + 1 )
3025
3035
s = 0
3026
3036
for L in StringIO .StringIO (lines ).readlines ():
@@ -3538,7 +3548,7 @@ def generator_matrix(self):
3538
3548
3539
3549
3540
3550
####################### decoders ###############################
3541
- from decoder import Decoder , DecodingFailure
3551
+ from decoder import Decoder , DecodingError
3542
3552
class LinearCodeSyndromeDecoder (Decoder ):
3543
3553
r"""
3544
3554
Construct a decoder for Linear Codes. This decoder will use a syndrome
0 commit comments