<commit_before>from caminhos_minimos import *
from datetime import date
import grafo as gf
import pickle as pc
import random as rnd
import cProfile as cpr
import pstats as pst
from collections import OrderedDict

def get_ident():
  import os.path
  ident = 0
  if not os.path.isfile('ident_grafos.txt'):
    with open('ident_grafos.txt','w') as arq:
      print(ident,file=arq)
    return ident
  else:
    with open('ident_grafos.txt','r') as arq:
      lista = arq.readlines()
      ident = int(lista[-1]) + 1
    with open('ident_grafos.txt','a') as arq:
      print(ident,file=arq)
    return ident
    
def carregar_grafos():
  with open('grafos.txt','r') as arq:
    lista_path = arq.readlines()
  for path_grafo in lista_path:
    yield pc.load(path_grafo)

def coletar_dados_algoritmos(grafo):
  dados = OrderedDict()
  dados['ident_grafo'] = grafo.ident
  dados['num_pontos'] = len(grafo)
  dados['num_arestas'] = grafo.num_arestas
  dados['fracao_ciclo'] = grafo.fra_ciclo
  dados['chance_dupla'] = grafo.chance_dupla
  dados['max_x'] = grafo.max_x
  dados['max_y'] = grafo.max_y
  
  ponto_origem, ponto_destino = rnd.sample(grafo.pontos,2)
  while ponto_origem == ponto_destino:
    ponto_destino = rnd.sample(grafo.pontos,1)
  dados['ponto_origem'] = ponto_origem
  dados['ponto_destino'] = ponto_destino

  caminho,distancia,num_passos = dijkstra(grafo,ponto_origem,ponto_destino)
  dados['caminho_d'] = list(caminho)
  dados['distancia_d'] = distancia
  dados['num_passos_d'] = num_passos
  del caminho,distancia,num_passos

  caminho, distancia,num_passos = a_star(grafo,ponto_origem,ponto_destino)
  dados['caminho_a'] = list(caminho)
  dados['distancia_a'] = distancia
  dados['num_passos_a'] = num_passos
  del caminho,distancia,num_passos

  #colocados no final do dicionário, para principais informações ficarem no início
  dados['pos_pontos'] = grafo.pos_pontos
  dados['arestas'] = grafo.arestas
  dados['pesos'] = grafo.pesos

  return dados

def criar_grafo_executar_armazenar(num_pontos,max_x,max_y,fra_ciclo,chance_dupla):
  grafo = gf.Grafo(get_ident())
  grafo.criar_grafo_aleatoriamente(num_pontos,max_x,max_y,fra_ciclo,False,chance_dupla)
  dados_execucao = coletar_dados_algoritmos(grafo)
  diretorio = 'D:\\Dropbox\\Trabalho de Conclusão de Curso\\grafos_cmou'
  diretorio += '\\grafos_e_dados\\pontos_' + str(num_pontos) + '\\max_x_E_max_y_' + str(max_x) + '\\' + str(date.today())

  import os.path
  if not os.path.exists(diretorio):
      os.makedirs(diretorio)
  
  arquivo = diretorio + '\\grafo_' + str(grafo.ident) + '.txt'
  with open(arquivo,'w') as arq:
    for key, value in dados_execucao.items():
      print(key.rjust(14), ' : ', value,file=arq)
  return dados_execucao
  

def executar_coleta(num_iteracoes):
  """para passar mais facilmente para o profiler"""
  for i in range(num_iteracoes):
    for j in range(num_iteracoes):
      criar_grafo_executar_armazenar(10**(3+j),10**(3+i),10**(3+i),10,30)
<commit_msg>agora também executa e grava os dados do profiler no arquivo do grafo<commit_after>from caminhos_minimos import *
from datetime import date
import grafo as gf
import pickle as pc
import random as rnd
import cProfile as cpr
import pstats as pst
import statistics as sta
from collections import OrderedDict

def get_ident():
  import os.path
  ident = 0
  if not os.path.isfile('ident_grafos.txt'):
    with open('ident_grafos.txt','w') as arq:
      print(ident,file=arq)
    return ident
  else:
    with open('ident_grafos.txt','r') as arq:
      lista = arq.readlines()
      ident = int(lista[-1]) + 1
    with open('ident_grafos.txt','a') as arq:
      print(ident,file=arq)
    return ident
    
def carregar_grafos():
  with open('grafos.txt','r') as arq:
    lista_path = arq.readlines()
  for path_grafo in lista_path:
    yield pc.load(path_grafo)

def coletar_dados_algoritmos(grafo):
  dados = OrderedDict()
  dados['ident_grafo'] = grafo.ident
  dados['num_pontos'] = len(grafo)
  dados['num_arestas'] = grafo.num_arestas
  dados['fracao_ciclo'] = grafo.fra_ciclo
  dados['chance_dupla'] = grafo.chance_dupla
  dados['max_x'] = grafo.max_x
  dados['max_y'] = grafo.max_y
  
  ponto_origem, ponto_destino = rnd.sample(grafo.pontos,2)
  while ponto_origem == ponto_destino:
    ponto_destino = rnd.sample(grafo.pontos,1)
  dados['ponto_origem'] = ponto_origem
  dados['ponto_destino'] = ponto_destino

  caminho,distancia,num_passos = dijkstra(grafo,ponto_origem,ponto_destino)
  dados['caminho_d'] = list(caminho)
  dados['distancia_d'] = distancia
  dados['num_passos_d'] = num_passos
  del caminho,distancia,num_passos

  caminho, distancia,num_passos = a_star(grafo,ponto_origem,ponto_destino)
  dados['caminho_a'] = list(caminho)
  dados['distancia_a'] = distancia
  dados['num_passos_a'] = num_passos
  del caminho,distancia,num_passos

  #colocados no final do dicionário, para principais informações ficarem no início
  dados['pos_pontos'] = grafo.pos_pontos
  dados['arestas'] = grafo.arestas
  dados['pesos'] = grafo.pesos

  return dados

def criar_grafo_executar_armazenar(ident,num_pontos,max_x,max_y,fra_ciclo,chance_dupla,path_arquivo):
  grafo = gf.Grafo(ident)
  grafo.criar_grafo_aleatoriamente(num_pontos,max_x,max_y,fra_ciclo,False,chance_dupla)

  dados_execucao = coletar_dados_algoritmos(grafo)
  
  with open(path_arquivo,'a') as arq:
    for key, value in dados_execucao.items():
      print(key.rjust(14), ' : ', value,file=arq)
  return dados_execucao
  
def executar_iteracao(num_pontos,max_x,max_y,fra_ciclo,chance_dupla) :   
  ident = get_ident()
  
  import os.path
  diretorio  = 'D:\\Dropbox\\Trabalho de Conclusão de Curso\\grafos_cmou'
  diretorio += '\\grafos_e_dados\\pontos_' + str(num_pontos) + '\\max_x_E_max_y_' + str(max_x) + '\\' + str(date.today())
  if not os.path.exists(diretorio):
    os.makedirs(diretorio)
  path_arquivo = diretorio + '\\grafo_' + str(grafo.ident) + '.txt'

  dados = OrderedDict()
  
  cpr.run('criar_grafo_executar_armazenar('+ident+','+str(10**(3+j))+','+str(10**(3+i))+','+str(10**(3+i))+','+fra_ciclo+','+chance_dupla+','+path_arquivo+')','profiler')
  with open('status.txt','w') as arq:
    dados_crus = pst.Stats('profiler',stream=arq)
    dados_crus.strip_dirs().print_stats('(dijkstra)')

  status = list()
  with open('status.txt','r') as arq:
    for linha in arq:
      print(linha)
      if 'dijkstra' in linha:  
        status.append(linha.split)
  dados['tempo_execucao_dijkstra'] = status[1][4]

  status = list()
  with open('status.txt','r') as arq:
    for linha in arq:
      print(linha)
      if 'a_star' in linha:  
        status.append(linha.split)
  dados['tempo_execucao_astar'] = status[1][4]

  with open(path_arquivo,'a') as arq:
    for key, value in dados.items():
      print(key.rjust(14), ' : ', value,file=arq)

  return dados

def executar_coleta(num_iteracoes):
  """para passar mais facilmente para o profiler"""
  for i in range(num_iteracoes):
    for j in range(num_iteracoes):
      executar_iteracao(10**(3+j),10**(3+i),10**(3+i),10,30)

{'fraction_non_alphanumeric': 0.13437722419928827, 'fraction_numerical': 0.007829181494661922, 'mean_word_length': 4.773212818405916, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1018337', 'n_tokens_mistral': 2989, 'n_tokens_neox': 2959, 'n_words': 497}