def insert_into_db(self): r""" Insert a dictionary of data for self into the database collection WebNewforms.files """ wmf_logger.debug("inserting self into db! name={0}".format(self._name)) C = connect_to_modularforms_db('WebNewforms.files') fs = get_files_from_gridfs('WebNewforms') s = {'name':self._name,'version':float(self._version)} rec = C.find_one(s) if rec: id = rec.get('_id') else: id = None if id<>None: wmf_logger.debug("Removing self from db with id={0}".format(id)) fs.delete(id) fname = "webnewform-{0:0>5}-{1:0>3}-{2:0>3}-{3}".format(self._N,self._k,self._chi,self._label) d = self.to_dict() d.pop('_ap',None) d.pop('_character',None) d.pop('_as_factor',None) id = fs.put(dumps(d),filename=fname,N=int(self._N),k=int(self._k),chi=int(self._chi),label=self._label,name=self._name,version=float(self._version)) wmf_logger.debug("inserted :{0}".format(id))
def _get_aps(self, prec=-1): r""" Get aps from database if they exist. """ ap_files = connect_to_modularforms_db('ap.files') key = {'k': int(self._k), 'N': int(self._N), 'cchi': int(self._chi)} key['prec'] = {"$gt": int(prec - 1)} ap_from_db = ap_files.find(key).sort("prec") wmf_logger.debug("finds={0}".format(ap_from_db)) wmf_logger.debug("finds.count()={0}".format(ap_from_db.count())) fs = get_files_from_gridfs('ap') aplist = {} for i in range(len(self.labels())): aplist[self.labels()[i]]={} for rec in ap_from_db: wmf_logger.debug("rec={0}".format(rec)) ni = rec.get('newform') if ni is None: for a in self.labels(): aplist[a][prec]=None return aplist a = self.labels()[ni] cur_prec = rec['prec'] if aplist.get(a,{}).get(cur_prec,None) is None: aplist[a][prec]=loads(fs.get(rec['_id']).read()) if cur_prec > prec and prec>0: # We are happy with these coefficients. return aplist return aplist
def as_factor(self): r""" Return self as a newform factor """ if self._as_factor is None: C = connect_to_modularforms_db('Newform_factors.files') s = {'N':int(self.level()),'k':int(self.weight()), 'cchi':int(self.chi()),'newform':int(self.newform_number())} res = C.find_one(s) print res if not res is None: fid = res['_id'] fs = get_files_from_gridfs('Newform_factors') self._as_factor = loads(fs.get(fid).read()) if self._as_factor is None: raise ValueError,"Newform matching {0} can not be found".format(s) return self._as_factor
def get_from_db(self): r""" Fetch dictionary data from the database. """ db = connect_to_modularforms_db('WebModformspace.files') s = {'name':self._name,'version':emf_version} wmf_logger.debug("Looking in DB for rec={0}".format(s)) f = db.find_one(s) wmf_logger.debug("Found rec={0}".format(f)) if f<>None: id = f.get('_id') fs = get_files_from_gridfs('WebModformspace') f = fs.get(id) wmf_logger.debug("Getting rec={0}".format(f)) d = loads(f.read()) return d return {}
def get_modular_symbols(self): r""" Get Modular Symbols from database they exist. """ if not self._modular_symbols is None: return modular_symbols = connect_to_modularforms_db('Modular_symbols.files') key = {'k': int(self._k), 'N': int(self._N), 'cchi': int(self._chi)} modular_symbols_from_db = modular_symbols.find_one(key) wmf_logger.debug("found ms={0}".format(modular_symbols_from_db)) if modular_symbols_from_db is None: ms = None else: id = modular_symbols_from_db['_id'] fs = get_files_from_gridfs('Modular_symbols') ms = loads(fs.get(id).read()) self._id = id self._modular_symbols = ms
def get_atkin_lehner_eigenvalues(self): r""" Get the Atkin-Lehner eigenvalues from database if they exist. """ if not ((self.character().is_trivial() or self.character().order() == 2) and not self._atkin_lehner_eigenvalues is None): return None C = connect_to_modularforms_db('Atkin-Lehner.files') fs = get_files_from_gridfs('Atkin-Lehner') s = {'N':int(self.level()),'k':int(self.weight()), 'cchi':int(self.chi()),'newform':int(self.newform_number())} res = C.find_one(s) self._atkin_lehner_eigenvalues = {} if not res is None: alid = res['_id'] al = loads(fs.get(alid).read()) for d in prime_divisors(self.level()): self._atkin_lehner_eigenvalues[d] = 1 if al[d]=='+' else -1 else: # We compute them A = self.as_factor() for p in prime_divisors(self.level()): self._atkin_lehner_eigenvalues[p]= int(A.atkin_lehner_operator(p).matrix()[0,0])
def get_newform_factors(self): r""" Get New form factors from database they exist. """ if not self._newforms is None and self._newforms == []: return factors = connect_to_modularforms_db('Newform_factors.files') key = {'k': int(self._k), 'N': int(self._N), 'cchi': int(self._chi),} factors_from_db = factors.find(key).sort('newform',int(1)) wmf_logger.debug("found factors={0}".format(factors_from_db)) self._newforms = {} if factors_from_db.count()==0: raise ValueError,"Space is not in database!" else: facts = [] self._labels = [] fs = get_files_from_gridfs('Newform_factors') for rec in factors_from_db: factor = loads(fs.get(rec['_id']).read()) label = orbit_label(rec['newform']) self._galois_orbits_labels.append(label) self._newforms[label] = factor
def insert_into_db(self): r""" Insert a dictionary of data for self into the collection WebModularforms.files """ wmf_logger.debug("inserting self into db! name={0}".format(self._name)) db = connect_to_modularforms_db('WebModformspace.files') fs = get_files_from_gridfs('WebModformspace') s = {'name':self._name,'version':emf_version} rec = db.find_one(s) if rec: id = rec.get('_id') else: id = None if id<>None: wmf_logger.debug("Removing self from db with id={0}".format(id)) fs.delete(id) fname = "webmodformspace-{0:0>5}-{1:0>3}-{2:0>3}".format(self._N,self._k,self._chi) d = self.to_dict() d.pop('_ap',None) # Since the ap's are already in the database we don't need them here id = fs.put(dumps(d),filename=fname,N=int(self._N),k=int(self._k),chi=int(self._chi),name=self._name,version=emf_version) wmf_logger.debug("inserted :{0}".format(id))