def __init__(self, base_field, length, default_encoder_name, default_decoder_name, metric='Hamming'): """ Initializes mandatory parameters that any linear code shares. This method only exists for inheritance purposes as it initializes parameters that need to be known by every linear code. The class :class:`sage.coding.linear_code_no_metric.AbstractLinearCodeNoMetric` should never be directly instantiated. INPUT: - ``base_field`` -- the base field of ``self`` - ``length`` -- the length of ``self`` (a Python int or a Sage Integer, must be > 0) - ``default_encoder_name`` -- the name of the default encoder of ``self`` - ``default_decoder_name`` -- the name of the default decoder of ``self`` - ``metric`` -- (default: ``Hamming``) the metric of ``self`` """ self._registered_encoders['Systematic'] = LinearCodeSystematicEncoder if not base_field.is_field(): raise ValueError("'base_field' must be a field (and {} is not one)".format(base_field)) if not default_encoder_name in self._registered_encoders: raise ValueError("You must set a valid encoder as default encoder for this code, by filling in the dictionary of registered encoders") if not default_decoder_name in self._registered_decoders: raise ValueError("You must set a valid decoder as default decoder for this code, by filling in the dictionary of registered decoders") #if not self.dimension() <= length: # raise ValueError("The dimension of the code can be at most its length, {}".format(length)) super(AbstractLinearCodeNoMetric, self).__init__(length, default_encoder_name, default_decoder_name, metric) cat = Modules(base_field).FiniteDimensional().WithBasis().Finite() facade_for = VectorSpace(base_field, self._length) self.Element = type(facade_for.an_element()) #for when we made this a non-facade parent Parent.__init__(self, base=base_field, facade=facade_for, category=cat)