Пример #1
0
 def fill_degree_table(self,
                       update_func,
                       deg_neg_one,
                       maxdeg=None,
                       mindeg=None):
     ''' Generic function that iterates by increasing degree
         from 0 to curve.MAXDEG (usually set to 2g).
         At each iteration update_func is called with -P and -Q values
         from previous iteration.
         Input: update_func, a curve.m list representing the values at -1
         degree divisors.
     '''
     maxdeg = maxdeg if maxdeg else self.MAXDEG
     mindeg = mindeg if mindeg else 0
     L = [deg_neg_one]
     for degA in range(mindeg, maxdeg + 1):
         N = []
         for Aq in range(self.m):
             div = TwoPDivisor(Q=Aq, deg=degA, curve=self)
             minus_p_val = L[-1][Aq]
             minus_q_val = L[-1][
                 Aq -
                 1]  # python does the right thing with negative indices
             N.append(update_func(div, minus_p_val, minus_q_val))
         L.append(N)
     return L[1:]
Пример #2
0
 def map_div(self, func, mindeg=None, maxdeg=None):
     maxdeg = maxdeg if maxdeg else self.MAXDEG
     mindeg = mindeg if mindeg else 0
     L = []
     for degA in range(mindeg, maxdeg + 1):
         N = []
         for Aq in range(self.m):
             div = TwoPDivisor(Q=Aq, deg=degA, curve=self)
             N.append(func(div, self))
         L.append(N)
     return L
Пример #3
0
 def wrap_table(self, name):
     offset_tup = self._data['offset'][name]
     offset = TwoPDivisor(P=offset_tup[0], Q=offset_tup[1])
     if name.lower()[0] == 'd':
         self.__dict__[name.lower()] = DivTable(self._data[name],
                                                self,
                                                start=offset,
                                                min=1)
     else:
         self.__dict__[name.lower()] = DivTable(self._data[name],
                                                self,
                                                start=offset)
Пример #4
0
 def reduce_table(self, update_func, start, maxdeg=None, mindeg=None):
     ''' same as fill_degree_table but don't keep the table'''
     maxdeg = maxdeg if maxdeg else self.MAXDEG
     mindeg = mindeg if mindeg else 0
     L = start
     for degA in range(mindeg, maxdeg + 1):
         N = []
         for Aq in range(self.m):
             div = TwoPDivisor(Q=Aq, deg=degA, curve=self)
             minus_p_val = L[Aq]
             minus_q_val = L[
                 Aq -
                 1]  # python does the right thing with negative indices
             N.append(update_func(div, minus_p_val, minus_q_val))
         L = N
     return L
Пример #5
0
 def fill_degree_table_reverse(self,
                               update_func,
                               deg_max,
                               maxdeg=None,
                               mindeg=None):
     ''' Same as fill_degree_table but in reverse degree order (i.e. going
     from DEGMAX down to 0, and updating on +P and +Q values'''
     maxdeg = maxdeg if maxdeg else self.MAXDEG
     mindeg = mindeg if mindeg else 0
     L = [deg_max]
     for degA in range(maxdeg, mindeg - 1, -1):
         N = []
         for Aq in range(self.m):
             div = TwoPDivisor(Q=Aq, deg=degA, curve=self)
             plus_p_val = L[-1][Aq]
             plus_q_val = L[-1][
                 (Aq + 1) % self.
                 m]  # python does the right thing with negative indices
             N.append(update_func(div, plus_p_val, plus_q_val))
         L.append(N)
     L = L[1:]
     L.reverse()
     return L
Пример #6
0
 def D(self):
     '''Two point-divisor equivalent to sum of all rational point minus
     P,Q'''
     return TwoPDivisor(deg=self.ddeg, Q=self.dq, curve=self)
Пример #7
0
 def Q(self):
     return TwoPDivisor(deg=1, Q=1, curve=self)
Пример #8
0
 def P(self):
     return TwoPDivisor(deg=1, P=1, curve=self)
Пример #9
0
 def K(self):
     return TwoPDivisor(deg=2 * self.g - 2, Q=self.kq, curve=self)
Пример #10
0
 def div(self, **kwds):
     return TwoPDivisor(curve=self, **kwds)