def CreateEncoderMatrix(self):
     self.encoderMatrix = genericmatrix.GenericMatrix(
         (self.n, self.k), 0, 1, self.field.Add, self.field.Subtract,
         self.field.Multiply, self.field.Divide)
     self.encoderMatrix[0, 0] = 1
     for i in range(0, self.n):
         term = 1
         for j in range(0, self.k):
             self.encoderMatrix[i, j] = term
             term = self.field.Multiply(term, i)
    def PrepareDecoder(self, unErasedLocations):
        """
        Function:       PrepareDecoder(erasedTerms)
        Description:    The input unErasedLocations is a list of the first
                        self.k elements of the codeword which were
                        NOT erased.  For example, if the 0th, 5th,
                        and 7th symbols of a (16,5) code were erased,
                        then PrepareDecoder([1,2,3,4,6]) would
                        properly prepare for decoding.
        """
        if (len(unErasedLocations) != self.k):
            raise ValueError('input must be exactly length k')

        limitedEncoder = genericmatrix.GenericMatrix(
            (self.k, self.k), 0, 1, self.field.Add, self.field.Subtract,
            self.field.Multiply, self.field.Divide)
        for i in range(0, self.k):
            limitedEncoder.SetRow(
                i, self.encoderMatrix.GetRow(unErasedLocations[i]))
        self.decoderMatrix = limitedEncoder.Inverse()