class HistFreqUpdater(object): ''' ''' def __init__(self): # concurso_range self.slider = ConcursoExt() self.histfreqdbslider = HistFreqDBSlider() self.update_db_if_needed() self.verify_histfreqs_consistency() def update_db_if_needed(self): self.total_concursos = self.slider.get_total_concursos() self.last_n_histfreq_updated = self.histfreqdbslider.get_total_histfreqs() n_missing_histfreqs = self.total_concursos - self.last_n_histfreq_updated if n_missing_histfreqs < 0: error_msg = 'Inconsistent histfreqs size. It is greater than concursos. Program execution cannot continue.' raise IndexError, error_msg elif n_missing_histfreqs == 0: # nothing to do! Sizes match. return print 'Need to update %d hist-freq concursos (from %d to %d)' %(n_missing_histfreqs, self.last_n_histfreq_updated, self.total_concursos) self.update_histfreqs_from_last_updated() def update_histfreqs_from_last_updated(self): histfreqdbs_to_update = [] if self.last_n_histfreq_updated == 0: numpy_histfreq = numpy.zeros(60,int) else: numpy_histfreq = self.histfreqdbslider.get_histfreq_at(self.last_n_histfreq_updated) for nDoConc in range(self.last_n_histfreq_updated + 1, self.total_concursos + 1): jogo = self.slider.get_concurso_by_nDoConc(nDoConc) for dezena in jogo.get_dezenas(): index = dezena - 1 numpy_histfreq[index] += 1 histfreqdb = HistFreqDB() histfreqdb.set_charfreqs(numpy_histfreq, nDoConc) histfreqdbs_to_update.append(histfreqdb) self.histfreqdbslider.update_histfreqs(histfreqdbs_to_update) def verify_histfreqs_consistency(self): print 'About to verify histfreqs consistency of %d concursos : Please, wait. ' %(self.total_concursos) numpy_histfreq = numpy.array([0]*60) for nDoConc in range(1, self.total_concursos + 1): jogo = self.slider.get_concurso_by_nDoConc(nDoConc) for dezena in jogo.get_dezenas(): index = dezena - 1 numpy_histfreq[index] += 1 self.compare_calc_histfreq_with_db(nDoConc, numpy_histfreq) print 'Verified histfreqs consistency of %d concursos : ok! ' %(self.total_concursos) def compare_calc_histfreq_with_db(self, nDoConc, numpy_histfreq): histfreqdb = self.histfreqdbslider.get_histfreq_at(nDoConc) bool_array = histfreqdb == numpy_histfreq # unfortunately, comparison of numpy arrays should compare element by element # old implementation # one_to_one = zip(histfreqdb, numpy_histfreq) # for pair in one_to_one: # if pair[0] != pair[1]: if False in bool_array: error_msg = ' at nDoConc=%d histfreqdb != numpy_histfreq \n db = %s \n calculated = %s' %(nDoConc, histfreqdb, numpy_histfreq) raise ValueError, error_msg
def analyze(): patternDistance = PatternDistanceAnalyzer() START_AT_N_CONC = 5 slider = ConcursoExt() last_concurso = slider.get_last_concurso() repeats_dict = Dict2() for nDoConc in range(START_AT_N_CONC, last_concurso.nDoConc+1): concurso = slider.get_concurso_by_nDoConc(nDoConc) contrajogos_as_dezenas_list = last_concurso.get_contrajogos_as_dezenas_list_down_to_depth(depth=4, inclusive=True) if contrajogos_as_dezenas_list == None: continue #print concurso.nDoConc, concurso.date, concurso.get_dezenas(), contrajogos_as_dezenas_list repeats_array = jogos_functions.get_array_n_repeats_with_m_previous_games(concurso.get_dezenas(), contrajogos_as_dezenas_list) token = ''.join(map(str, repeats_array)) patternDistance.add_pattern(token) repeats_dict.add1_or_set1_to_key(token) tokens_and_quants = repeats_dict.items() tokens_and_quants.sort(key = lambda x : x[1]) tokens_and_quants.reverse() for token_and_quant in tokens_and_quants: token = token_and_quant[0] quant = token_and_quant[1] pattern = rightFillToNSpaces(token, 3) zquant = leftFillToNSpaces(str(quant), 3) print pattern, ':', zquant patternDistance.mount_distances_histogram() patternDistance.summarize() analyze()
def adhoc_test1(): slider = ConcursoExt() for nDoConc in range(1401, slider.get_n_last_concurso() + 1): concurso = slider.get_concurso_by_nDoConc(nDoConc) line = '%d ' %nDoConc concursotil = ConcursoTil(concurso) for n_slots in [2, 3, 4, 5, 6, 10, 12]: concursotil.reset_n_slots(n_slots) line += 'tslot%d%s ' %(n_slots, concursotil.get_tilpattern_interlaced_with_n_dozens_per_til()) #wpattern print line
def adhoc_test2(): slider = ConcursoExt() for nDoConc in range(1401, slider.get_n_last_concurso() + 1): concurso = slider.get_concurso_by_nDoConc(nDoConc) concursotil = ConcursoTil(concurso) concursotilr = TilR(n_slots = 5, concurso=concurso) nDoConc_anterior = nDoConc - 1 print concurso.nDoConc, concurso.date, concurso.get_dezenas(), concurso.get_dezenas_in_orig_order() print 'histfreq for conc', nDoConc_anterior, concursotil.get_histfreq_obj().get_histfreq_tuplelike_at(nDoConc_anterior) #print concursotil.get_dezenas_and_their_frequencies_for_concurso() for n_slots in [5, 6, 10]: concursotil.reset_n_slots(n_slots) print 'dezenas, frequencies, tils:', concursotil.get_dezenas_their_frequencies_and_til_for_concurso() print 'concursotil', concursotil, 'wpatt', concursotil.wpattern print 'BorderTupleOfTilSets', concursotil.getBorderTupleOfTilSets() tilfreqslotter = TilFreqSlotSeparator(n_slots) print tilfreqslotter.show_tilhistogram_table() print '-'*50 print '=*'*27
def run_history(): slider = ConcursoExt() volante_caract = VolanteCharacteristics(n_dezenas_no_volante=60, n_dezenas_no_sorteio=6) tilfstats = TilStats(n_slots=5, soma=volante_caract.n_dezenas_no_sorteio) tilrstats = TilStats(n_slots=5, soma=volante_caract.n_dezenas_no_sorteio) tilfobj = TilF(n_slots=5, history_ini_fin_range = None, volante_caract=volante_caract) tilrobj = TilR(n_slots=5, history_ini_fin_range = None, volante_caract=volante_caract) for nDoConc in xrange(101, slider.get_n_last_concurso()+1): concurso = slider.get_concurso_by_nDoConc(nDoConc) # reuse tilrobj! tilfobj.set_history_ini_fin_range(history_ini_fin_range = (1, nDoConc-1)) tilrobj.set_history_ini_fin_range(history_ini_fin_range = (1, nDoConc-1)) f_pattern_as_list, f_wpattern = tilfobj.get_items_tilpattern_as_list_and_str(concurso.get_dezenas()) r_pattern_as_list, r_wpattern = tilrobj.get_items_tilpattern_as_list_and_str(concurso.get_dezenas()) tilfstats.add_pattern_as_list(f_pattern_as_list) tilrstats.add_pattern_as_list(r_pattern_as_list) print 'f', f_wpattern, 'r', r_wpattern, concurso.get_dezenas_str(), nDoConc tilfstats.print_summary() print 'len(tilfstats)', len(tilfstats) tilrstats.print_summary() print 'len(tilrstats)', len(tilrstats)