def info_from_db_orbit(orbit): mod = orbit['modulus'] conductor = orbit['conductor'] orbit_index = orbit['orbit_index'] orbit_letter = cremona_letter_code(orbit_index - 1) orbit_label = "{}.{}".format(mod, orbit_letter) order = orbit['order'] is_odd = parity_string(orbit['parity']) is_prim = _is_primitive(orbit['is_primitive']) results = [] for num in orbit['galois_orbit']: results.append( (mod, num, conductor, orbit_label, order, is_odd, is_prim, WebDirichlet.char2tex(mod, num))) return results
def __init__(self, query): self.modulus = query.get('modulus') self.conductor = query.get('conductor') self.order = query.get('order') self.parity = query.get('parity') if self.parity in ["Odd","odd"]: self.parity = parity_string(-1) if self.parity in ["Even","even"]: self.parity = parity_string(1) self.limit = parse_limit(query.get('limit')) if self.parity and not self.parity in [parity_string(-1),parity_string(1)]: flash_error("%s is not a valid value for parity. It must be '%s' or '%s'", self.parity, parity_string(-1), parity_string(1)) raise ValueError('parity') self.primitive = query.get('primitive') if self.primitive in ["Yes","yes"]: self.primitive = bool_string(True) if self.primitive in ["No","no"]: self.primitive = bool_string(False) if self.primitive and not self.primitive in [bool_string(True),bool_string(False)]: flash_error("%s is not a valid value for primitive. It must be %s or %s", self.primitive, bool_string(True), bool_string(False)) raise ValueError('primitive') self.mmin, self.mmax = parse_interval(self.modulus,'modulus') if self.modulus else (1, 9999) if self.mmax > 9999: flash_error("Searching is limited to characters of modulus less than $10^4$") raise ValueError('modulus') if self.order and self.mmin > 999: flash_error("For order searching the minimum modulus needs to be less than $10^3$") raise ValueError('modulus') self.cmin, self.cmax = parse_interval(self.conductor, 'conductor') if self.conductor else (1, self.mmax) self.omin, self.omax = parse_interval(self.order, 'order') if self.order else (1, self.cmax) self.cmax = min(self.cmax,self.mmax) self.omax = min(self.omax,self.cmax) if self.primitive == bool_string(True): self.cmin = max([self.cmin,self.mmin]) self.cmin += 1 if self.cmin%4 == 2 else 0 self.cmax -= 1 if self.cmax%4 == 2 else 0 if self.primitive == bool_string(True): self.mmin = max([self.cmin,self.mmin]) self.mmax = min([self.cmax,self.mmax]) self.cmin,self.cmax = self.mmin,self.mmax if self.parity == parity_string(-1): self.omin += 1 if self.omin%2 else 0 self.omax -= 1 if self.omax%2 else 0 self.mmin = max(self.mmin,self.cmin,self.omin) if self.parity: self.is_odd = True if self.parity == parity_string(-1) else False if self.primitive: self.is_primitive = True if self.primitive == bool_string(True) else False self.start = int(query.get('start', '0'))
def test_even_odd(self): W = self.tc.get('/Character/Dirichlet/?modulus=35') assert '>%s</t' % (parity_string(1)) in W.get_data(as_text=True) assert '>%s</t' % (parity_string(-1)) in W.get_data(as_text=True)
def test_dirichletchar99999999999999999lfunc(self): """ Check Dirichlet character with very large modulus""" W = self.tc.get('/Character/Dirichlet/99999999999999999999/2') assert parity_string(-1) in W.get_data( as_text=True) and '536870912' in W.get_data(as_text=True) assert '/SatoTateGroup/0.1.3748806900' in W.get_data(as_text=True)