Exemple #1
0
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
Exemple #5
0
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)