Something went wrong on our end
-
Petr Cholevík authoredPetr Cholevík authored
timeline_visualisation.py 108.58 KiB
#!/usr/bin/env python3
import re, os
import pandas as pd
from matplotlib.pyplot import figure
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import seaborn as sns
import datetime as dt
from pandas.plotting import table
import re
#import tkinter as tk
#from tkinter import filedialog
from pathlib import Path
import glob
from collections import Counter
import os
from matplotlib.legend_handler import HandlerLine2D
from matplotlib.font_manager import FontProperties
import sys
import PyQt5
from PyQt5 import QtGui, QtCore, QtWidgets
from src import data_load
#from src import design_timeline_visualisation
# import os
# import json
# import sip
import sys
# import shutil
# import glob
# import traceback
# from pathlib import Path
# from src import data_plot
# from src import samples_plot
# from src import heatmap
# from src import pyyed_tree
# from src import pydot_example
# from src import all_tables
# from src import radarGUI_analyze
# from src import mericOpt
# from src import texReportDialog
# from src import design_main_menu
# from src import data_load
# from src import timeline_visualisation
# from runpy import run_path
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow
from functools import partial
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pylab as pl
import numpy as np
import copy as cp
from runpy import run_path
import pprint
import os
import textwrap
from shutil import copyfile
import warnings
import matplotlib.cbook
warnings.filterwarnings('ignore', category=matplotlib.cbook.mplDeprecation)
#from src import design_timeline_visualisation
##### tato aplikace vykresluje grafy v zavislosti na case, pod tlacitkem timeline, vykresluje nekolik typu grafu podle toho co se nachazí ve zvolených souborech
#### graf timeline_visualisation se vykresluje vzdycky je to graf viz git issue #20 na ose y se zobrazují regionu a ""(prazdny string) na ose x jsou runtime(zacatek a konec) pro dosazeni toho aby pri line_plot byly oddelene jednotlive volani tak je za konec volani pridani np.nun
#### další grafy jsou zavisle na vstupnich datech a to nejprve se projde static region a zjisti se co se merilo a podle toho se pridaji do combo boxu kde se vybíra mezi grafy
####
#### funkce pod trídou se nektere nadale pouzivaji ale nektere se mohou smazat
#### pro spravnou fukcnost je potreba pri spusteni radaru zadat opts soubor
#### tata aplikace funguje relativne nezavisle na ostatnich aplikacich stim ze se predava cesta k souborum z data_load jinak tato aplikace si nacita data sama
class Window(QtWidgets.QDialog):
sendInfo = QtCore.pyqtSignal(object)
plotlist = []
def __init__(self, ownData=None, parent=None):
super(Window, self).__init__(parent)
# a figure instance to plot on
self.figure = Figure()
# self.ax = self.figure.add_subplot(111)
self.ax = self.figure.add_axes([0.25, 0.25, 0.6, 0.7]) # left,bottom edge, width, height
self.sw = False
self.use_logscaleX = False
self.use_logscaleY = False
# self.isCanvasClear = True
self.id_min = 0
self.id_max = 10
self.setWindowTitle("Timeline")
self.canvas = FigureCanvas(self.figure)
self.toolbar = NavigationToolbar(self.canvas, self)
self.button2 = QtWidgets.QCheckBox('Switch axes')
self.button2.clicked.connect(self.change_sw)
self.maxBox = QtWidgets.QCheckBox('Show maximum')
self.maxBox.clicked.connect(self.plot)
self.logscaleX = QtWidgets.QCheckBox('log scale for axis X')
self.logscaleX.clicked.connect(self.change_logscaleX)
self.logscaleY = QtWidgets.QCheckBox('log scale for axis y')
self.logscaleY.clicked.connect(self.change_logscaleY)
self.button3 = QtWidgets.QPushButton('Apply multiplier')
self.button3.clicked.connect(self.plot)
self.button4 = QtWidgets.QPushButton('Generate LaTeX code')
self.button4.clicked.connect(self.getTeX)
self.addButton = QtWidgets.QPushButton('Add to LaTeX report')
self.addButton.clicked.connect(self.emitTeXInfo)
self.typeButton = QtWidgets.QPushButton('Scatter plot')
self.plotType = 0
self.typeButton.clicked.connect(self.changeType)
# self.button4 = QtWidgets.QPushButton('Clear canvas')
# self.button4.clicked.connect(self.clearCanvas)
self.bf = QtGui.QFont("Arial", 13, QtGui.QFont.Bold)
self.mult = QtWidgets.QLineEdit("1")
self.mult.setAlignment(QtCore.Qt.AlignCenter)
self.mult.setValidator(QtGui.QDoubleValidator())
#self.data_root = self.d["root_folder"]
# data loading, we can have more than one y_data! TODO
self.d = ownData
self.data = self.d["plot_summary_data"]
#print("self data plot")
#print(self.data)
self.region = self.d["region"]
for i in self.region:
if i.endswith("_static"):
#print("timeline region")
#print(i)
static_name = i
self.combo_reg = QtWidgets.QComboBox(self)
self.combo_reg.addItem('Choose region')
self.combo_reg.addItem(static_name)
#csv_test = self.d["_csv_"]
#print(csv_test)
#print(len(csv_test))
# list = self.data_csv1
root = self.d["parameter_len"]
root_folder = root[0]
deflist = []
#print(root_folder)
for i in range(root_folder):
deflist.append(str(0))
self.default = '_'.join(deflist) + ".csv"
#print("default")
#print(self.default)
# TODO - multiple measurements handling (2 in range is ad hoc)
if "nested_regions_report_data" in self.d.keys():
for i in range(0, len(self.d["nested_regions_report_data"])):
comboItem = "{}".format(self.d["nested_regions_report_data"][i]["nested_region"])
if comboItem not in [self.combo_reg.itemText(i) for i in range(self.combo_reg.count())]:
self.combo_reg.addItem(comboItem)
self.combo_reg.addItem('All regions')
self.combo = QtWidgets.QComboBox(self)
data_for_combo = self.combo_add_universal()
#data_for_combo = self.combo_graf_add()
self.combo.addItem('Choose plot')
#self.combo.addItem('Timeline visualisation')
#self.combo.addItem('Runtime area graph')
#self.combo.addItem('Term area graph')
# self.combo.addItem('freq area graph')
self.combo.addItems(data_for_combo)
self.combo.activated[str].connect(self.onChanged)
# set the layout
layout = QtWidgets.QVBoxLayout()
self.plot_data = self.data[0]
self.keyList = list(self.plot_data[1]["key"])
for i in range(0, len(self.keyList)):
self.keyList[i] = self.keyList[i].replace(';', ' ')
self.lab_reg = QtWidgets.QLabel('Choose Area: ')
self.lab_reg.setFont(self.bf)
hl_reg = QtWidgets.QHBoxLayout()
hl_reg.addWidget(self.lab_reg)
hl_reg.addWidget(self.combo_reg)
self.combo_reg.activated[str].connect(self.onChanged)
#self.combo_reg.activated[str].connect(self.onChangeded)
layout.addLayout(hl_reg)
#if len(self.data) > 1:
# print("print self data >>>>>>>>")
# print(self.data)
self.label = QtWidgets.QLabel('Choose Graph Type: ')
self.label.setFont(self.bf)
hl = QtWidgets.QHBoxLayout()
hl.addWidget(self.label)
hl.addWidget(self.combo)
#self.combo.activated[str].connect(self.chooseData)
layout.addLayout(hl)
self.combo_plot = QtWidgets.QComboBox(self)
hl.addWidget(self.combo_plot)
# self.combo_plot.addItem('Choose plot')
# self.combo_plot.addItem('Timeline visualisation')
self.combo_plot.activated[str].connect(self.onChanged)
self.labelFontsize = QtWidgets.QLabel("Execution id: ")
#self.labelFontsize.setFixedWidth(60)
self.execution_ID = QtWidgets.QSpinBox()
#self.execution_ID.setFixedWidth(100)
self.execution_ID.setValue(self.id_min)
self.execution_ID.setMinimum(self.id_min)
self.execution_ID.setSingleStep(1)
self.execution_ID.setMaximum(self.id_max)
hl_font = QtWidgets.QHBoxLayout()
hl_font.addWidget(self.labelFontsize)
hl_font.addWidget(self.execution_ID)
self.addButton_plot = QtWidgets.QPushButton('Add to plot')
self.addButton_plot.clicked.connect(self.button_click)
#self.addButton_plot.setFixedWidth(130)
hl_button = QtWidgets.QHBoxLayout()
hl_button.addWidget(self.addButton_plot)
#self.execution_ID.valueChanged.connect(self.execution_IDChanged)
#self.execution_ID.setEnabled(False)
# layout.addWidget(self.execution_ID)
layout.addLayout(hl_font)
layout.addLayout(hl_button)
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
hlayout = QtWidgets.QHBoxLayout()
# tmp remove multiplier
# hlayout.addWidget(self.mult)
# hlayout.addWidget(self.button3)
# hlayout2 = QtWidgets.QHBoxLayout()
hlayout.addWidget(self.button2)
hlayout.addWidget(self.maxBox)
hlayout.addWidget(self.logscaleX)
hlayout.addWidget(self.logscaleY)
# hlayout2.addWidget(self.button4)
layout.addLayout(hlayout)
hlayout3 = QtWidgets.QHBoxLayout()
hlayout3.addWidget(self.typeButton)
hlayout3.addWidget(self.button4)
hlayout3.addWidget(self.addButton)
layout.addLayout(hlayout3)
#self.start = self.static_start()
# layout.addLayout(hlayout2)
self.setLayout(layout)
#self.combo_graf_add()
self.combo_add_universal()
self.onChanged()
self.resize(800, 800)
def button_click(self):
#print("button_click")
self.id = self.execution_ID.value()
#print("idid")
#print(id)
reg = str(self.combo_reg.currentText())
#print(reg)
#print(reg)
self.id = "init_"+ str(self.id)
self.data_csv = self.d["_csv_"]
list = self.data_csv
a = []
def_path = []
reg_path = ""
static_path = ""
for i in list:
a = a + i
for i in a:
j = i.split("/")
if j[-1] == self.default or "default.csv" in j[-1] or "log.csv" in j[-1]:
def_path.append(i)
for i in def_path:
if reg in i:
reg_path = str(i)
#print("reg_path")
#print(reg_path)
text = str(self.combo.currentText())
#print(text)
plot = str(self.combo_plot.currentText())
#print(plot)
self.ax.clear()
#print("defpath")
#print(def_path)
if plot == "Timeline visualisation":
#print("def_path")
#print(def_path)
self.plot_timeline(def_path)
combo_text_plot = plot
if "START" in text or "STOP" in text:
#print("text")
#print(text)
# pwd = os.getcwd()
# df = graph_term_all([pwd + "/LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv",
# pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv",
# pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/propagate/36.csv"])
combo_text_plot = text
#self.plot_term()reg_path
self.plot_universal_start_stop(reg_path, text )
elif plot == "Timeline visualisation":
#print("def_path")
#print(def_path)
combo_text_plot = text
self.plot_timeline(def_path)
self.combo_plot.clearEditText()
elif "Runtime of function [s]" in text:
#print(text)
combo_text_plot = text
self.plot_runtime(reg_path)
# elif text == "Term area graph" :
# combo_text_plot = text
# self.plot_term()
elif text == "freq area graph":
#print(text)
combo_text_plot = text
self.plot_freq()
elif text == "Choose plot":
#print("")
combo_text_plot = text
self.plot()
elif "ALL" in text:
combo_text_plot = text
self.plot_all_nova(def_path, text, self.id)
else:
combo_text_plot = text
self.plot_universal_1(def_path, text, self.id)
self.combo.clearEditText()
self.combo_plot.clearEditText()
#plot_type(text)
return combo_text_plot
# tato funkce se stara o zmenu grafu je asi nejdulezitejsi ze vsech
def onChanged(self):
id = self.execution_ID.value()
#print("idid")
#print(id)
reg = str(self.combo_reg.currentText())
#print(reg)
#print(reg)
if not "All regions" in reg:
self.combo.show()
self.combo_plot.hide()
self.combo_plot.clearEditText()
self.combo_plot.clear()
else:
self.combo.hide()
self.combo_plot.show()
self.combo.clearEditText()
list = []
if 'Choose plot' not in list:
list.append('Choose plot')
if 'Timeline visualisation' not in list:
list.append('Timeline visualisation')
#self.combo_plot.update('Choose plot')
#if not self.combo_plot.item
#self.combo_plot.addItem('Timeline visualisation')
for i in list:
self.combo_plot.addItem(i)
self.combo.clearEditText()
self.combo_plot.clearEditText()
#tlacitko dole zmena typu grafu z line plot na scater plot
def changeType(self):
self.plotType = not self.plotType
if self.plotType:
#self.typeButton.setText('Scatter plot')
self.typeButton.setText('Line plot')
else:
#self.typeButton.setText('Line plot')
self.typeButton.setText('Scatter plot')
self.onChanged()
self.button_click()
#tlacitko dole
def emitTeXInfo(self):
if str(self.combo_reg.currentText()) == "Overall summary":
reg = list(self.d['config']['main_reg'][0].keys())[0]
else:
reg = str(self.combo_reg.currentText())[9:]
for i in range(len(self.data)):
if self.data[i][0]['arg'] in str(self.combo.currentText()):
q = self.data[i][0]['arg']
c = self.data[i][0]['category']
self.sendInfo.emit(
{'quantity': q, 'category': c, 'region': reg, 'multiplier': float(self.mult.text()), 'switched': self.sw,
'dot': self.plotType})
self.addButton.setEnabled(False)
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Information)
msg.setText("Current plot was added to LaTeX report.")
msg.setWindowTitle("LaTeX report info")
msg.setStandardButtons(QtWidgets.QMessageBox.Close)
msg.buttonClicked.connect(msg.close)
msg.exec_()
#tlacitko dole
def getTeX(self):
dlg = QtWidgets.QFileDialog()
save_file_path = str(dlg.getSaveFileName(filter='LaTeX code (*.tex)')[0])
if save_file_path and not save_file_path.endswith('.tex'):
save_file_path = save_file_path + '.tex'
if not save_file_path:
return 0
# save_file_path = "/home/david/SGS18-READEX/graf.tex"
target_file = '/'.join(save_file_path.split('/')[0:-1]) + '/readex_header.tex'
copyfile(os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + '/input/readex_header.tex', target_file)
tex_file = open(save_file_path, "w")
tex_file.write(r'\documentclass{article}')
tex_file.write('''\n\input{readex_header}\n''')
tex_file.write(r'\begin{document}')
title = '{}, {}'.format(str(self.combo_reg.currentText()), str(self.combo.currentText()))
x_lab = "{}\,[{}{}]".format(self.plot_data[1]["x_label_name"], '' if self.numMultiplier.is_integer() and int(
self.numMultiplier) == 1 else 1 / self.numMultiplier,
self.plot_data[1]["x_label_unit"])
y_lab = self.plot_data[0]["arg"]
func_lab = "{}\,[{}]".format(self.plot_data[1]["func_label_name"], self.plot_data[1]["func_label_unit"])
only_marks = self.plotType
header_code = (r'''
\begin{{adjustbox}}{{center, valign=t}}
\begin{{tikzpicture}}
\begin{{axis}}[
align=center,
title={{ {} }},
xlabel={{ {} }},
ylabel={{ {} }},
legend pos=outer north east,
xmajorgrids=true,
ymajorgrids=true,
grid style=dashed,
width=\textwidth*0.9,
height=\textwidth*0.6,
cycle list name = color list,
each nth point = 1,
filter discard warning=false
]
\addlegendimage{{empty legend}}
'''.format(title, y_lab if self.sw else x_lab, x_lab if self.sw else y_lab))
tex_file.write(textwrap.dedent(header_code))
tex_file.write('\n\n')
if self.sw:
a = 1
b = 0
else:
a = 0
b = 1
for i in range(0, self.n):
code = (r'''\addplot+ [mark=triangle*{}] coordinates {{ {}
}};
'''.format(',only marks' if only_marks else '',
'\n'.join([str((self.numMultiplier * e[a], e[b])) for e in self.K[i]])))
tex_file.write(code)
legend_title = r'\hspace{{-.6cm}} {} '.format(
"{} [{}]".format(self.plot_data[1]["func_label_name"], self.plot_data[1]["func_label_unit"]))
ret = ''
if not self.k:
ret = '\legend{{ {} }}'.format(','.join(filter(None, [legend_title] + [str(i) for i in range(self.n)])))
else:
ret = '\legend{{ {} }}'.format(','.join(filter(None, [legend_title] + [str(item) for item in self.k])))
tex_file.write(ret)
optim_code = r'''
\addplot [only marks] table {{
{0} {1}
}} node [pin={{[pin distance={4}pt]{3}:{{\footnotesize( {2} )}}}}]{{}};
'''
optim_code = textwrap.dedent(optim_code)
title_angle = title_angle = 210 if self.optx > 0.5 * (min(self.ky) + max(self.ky)) else 330
title_distance = 2
optim_title = 'optimal settings are {}: {} {}, {}: {} {}'.format(self.plot_data[1]["x_label_name"], self.optx,
self.plot_data[1]["x_label_unit"],
self.plot_data[1]["func_label_name"],
self.optf,
self.plot_data[1]["func_label_unit"])
optim_code = optim_code.format(self.ymin if self.sw else self.numMultiplier * self.optx,
self.numMultiplier * self.optx if self.sw else self.ymin,
optim_title,
title_angle, title_distance)
tex_file.write(optim_code)
tex_file.write('\n\end{axis}\n\end{tikzpicture}\n\end{adjustbox}\n\n\end{document}')
tex_file.close()
def chooseReg(self, dataLabel):
if dataLabel == "Overall summary":
self.data = self.d["plot_summary_data"]
else:
for i in range(0, len(self.d["nested_regions_report_data"])):
tmp = "REGION - {}".format(self.d["nested_regions_report_data"][i]["nested_region"])
#print(">>>tmp REGIONY")
#print(tmp)
if dataLabel == tmp:
self.data = self.d["nested_regions_report_data"][i]["plot_data"]
self.plot_data = self.data[0]
if len(self.data) > 1:
for i in range(0, len(self.data)):
if str(self.combo.currentText()) == "{}, {}".format(self.data[i][0]["category"],
self.data[i][0]["arg"]):
self.plot_data = self.data[i]
# self.keyList = list(self.plot_data[1]['key'])
# for i in range(0, len(self.keyList)):
# self.keyList[i] = self.keyList[i].replace(';', ' ')
#self.onChanged(dataLabel)
return dataLabel
def chooseData(self, dataLabel):
for i in range(0, len(self.data)):
if dataLabel == "{}, {}".format(self.data[i][0]["category"], self.data[i][0]["arg"]):
self.plot_data = self.data[i]
# print("<<<<<<<<<<<<<<<<<<<<<<<<<<<dataLabel plot data chooseData>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
# print(self.plot_data)
#
# self.plot()
# '''p = self.grab()
# print(p)
# p.save('/home/david/SGS18-READEX/plotGUI.png')'''
#self.data = termp()
def change_sw(self):
self.sw = self.sw
self.onChanged()
self.button_click()
#radio button
def change_logscaleX(self):
self.use_logscaleX = not self.use_logscaleX
#self.plot()
#radio button
def change_logscaleY(self):
self.use_logscaleY = not self.use_logscaleY
#self.plot()
#funkce vykreslujici graf runtime
def plot_runtime(self, path):
self.ax.clear()
self.isCanvasClear = False
# text = self.combo.activated[str].connect(self.onChanged)
# print(text)
#data_file = get_data_from_file_window()
path = path
#print(path)
# print(path)
data_file = []
if not path:
self.plot()
# print(path)
else:
with open(path, "r") as file:
for line in file:
data_file.append(line)
runtime_area = analyze_data(data_file, ["Runtime"])
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
self.numMultiplier = float(self.mult.text())
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
if self.sw:
if self.plotType:
self.ax.plot(runtime_area)
else:
self.ax.plot(runtime_area, 'o')
else:
if self.plotType:
self.ax.plot(runtime_area)
else:
self.ax.plot(runtime_area, 'o')
self.ax.set_ylabel("Runtime of function [s]")
self.ax.tick_params(labelsize=11)
self.ax.grid(linestyle='--')
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce vykreslujici prazdne platno pri prvotnim zmacknuti tlacitka timeline
def plot(self):
self.ax.clear()
self.isCanvasClear = False
self.ax.plot()
self.canvas.draw()
#graf frekvence
def plot_freq(self):
#start, area = self.onChanged()
self.ax.clear()
self.isCanvasClear = False
start = open_static_36()
data = get_data_from_file_window()
runtime_area = analyze_data_runtime_timestamp(data)
term_list0 = [[], []]
freq_PKG_all = analyze_data_freq(data)
start_stop = []
for i in runtime_area:
a = i[1] - start
b = i[0] + i[1] - start
start_stop.append(float(a))
start_stop.append(float(b))
freq_PKG0 = []
freq_PKG1 = []
for i in freq_PKG_all:
a = i[0]
b = i[1]
freq_PKG0.append(float(a))
freq_PKG0.append(float(a))
freq_PKG1.append(float(b))
freq_PKG1.append(float(b))
# print(a)
# print(b)
# #
# print(start_stop)
# print(len(start_stop))
# print(len(freq_PKG_all))
# print(len(freq_PKG0))
# print(len(freq_PKG1))
# self.ax.plot(start, area)
if self.sw:
if self.plotType:
self.ax.plot(start_stop, freq_PKG0)
self.ax.plot(start_stop, freq_PKG1)
else:
self.ax.plot(start_stop, freq_PKG0, 'o')
self.ax.plot(start_stop, freq_PKG1, 'o')
else:
if self.plotType:
self.ax.plot(start_stop, freq_PKG0)
self.ax.plot(start_stop, freq_PKG1)
else:
self.ax.plot(start_stop, freq_PKG0, 'o')
self.ax.plot(start_stop, freq_PKG1, 'o')
# self.ax.plot(start_stop, freq_PKG0)
# self.ax.plot(start_stop, freq_PKG1)
self.ax.plot()
#self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
#self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#graf teploty
def plot_term(self):
self.ax.clear()
self.isCanvasClear = False
start = open_static_36()
data = get_data_from_file_window()
runtime_area = analyze_data_runtime_timestamp(data)
# term_PKG_all = analyze_data_term(data)
term_PKG_all = [[], []]
for line in data:
if "START_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "START_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
term_PKG_all[0] = term_PKG_all[0][:len(term_PKG_all[1])]
term_PKG_all = [[term_PKG_all[0][i], term_PKG_all[1][i]] for i in range(len(term_PKG_all[0]))]
start_stop = []
# start = runtime_area[0][1]
for i in runtime_area:
a = i[1] - start
b = i[0] + i[1] - start
start_stop.append(float(a))
start_stop.append(float(b))
#print(len(start_stop))
term_PKG0 = []
term_PKG1 = []
for i in term_PKG_all:
a = i[0]
b = i[1]
term_PKG0.append(float(a))
term_PKG1.append(float(b))
# print(a)
# print(b)
# #
# print(start_stop)
# print(len(start_stop))
# print(len(term_PKG_all))
# print(len(term_PKG0))
# print(len(term_PKG1))
if self.sw:
if self.plotType:
self.ax.plot(start_stop, term_PKG0)
self.ax.plot(start_stop, term_PKG1)
else:
self.ax.plot(start_stop, term_PKG0,'o')
self.ax.plot(start_stop, term_PKG1,'o')
else:
if self.plotType:
self.ax.plot(start_stop, term_PKG0)
self.ax.plot(start_stop, term_PKG1)
else:
self.ax.plot(start_stop, term_PKG0, 'o')
self.ax.plot(start_stop, term_PKG1, 'o')
# self.ax.plot(start_stop, term_PKG0)
# self.ax.plot(start_stop, term_PKG1)
# self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
#fukce vykreslujici timeline viz odkaz na dalsim zadku, tento graf je v moznostech vzdy nacite vsechny runtime a start time ze vsech def souborech z regionu ktere byl zadane ve vstupnich datech
#https://code.it4i.cz/vys0053/SGS18-READEX/-/issues/20
def plot_timeline(self, path):
# start, area = self.onChanged()
self.ax.clear()
self.isCanvasClear = False
# text = self.combo.activated[str].connect(self.onChanged)
#print("text v plot")
# print(text)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
self.numMultiplier = float(self.mult.text())
#start, area = graph_timeline_visualisation(path)
#print(start)
#print(area)
#s = list(start)
#print("s")
#print(s)
# cesta = (glob.glob(file_name))
cesta = path
area_number = 0
data_for_graph = [[], []]
list_statrt_stop = []
list_area = []
# start = open_static_12()
#print("-------")
for i in path:
#print(i)
if self.default in i or "default.csv" in i or "log.csv" in i:
i = i.split("/")
if i[-2].endswith("_static"):
i = "/".join(i)
static_path = i
#print(i)
static = static_start(static_path)
# print(area_number)
# print(cesta)
# print(len(cesta))
legend = []
#print("path_timeline")
#print(path)
id = self.execution_ID.value()
for i in path:
path_ces = os.path.dirname(i)
# print(path)
folders_name = os.path.basename(path_ces)
area_number += 1
data = []
with open(i, "r") as file:
for line in file:
data.append(line)
runtime_area = analyze_data_runtime_timestamp(data,self.id)
#print("runtime area")
#print(runtime_area)
string = ""
string = str(area_number) + "=" + folders_name
# print(string)
# tmp = [area_number, folders_name]
legend.append(string)
# print(runtime)
for j in runtime_area:
# a = j[1] - start
# b = j[0] + j[1] - start
a = j[1] - static
b = j[0] + j[1] - static
# tmp = [float(a), area_number]
# tmp1 = [float(a)]
# list_statrt_stop.append(tmp1)
# tmp1 = [float(b)]
# list_statrt_stop.append(tmp1)
# tmp1 = [np.nan]
# list_statrt_stop.append(tmp1)
list_statrt_stop.append(float(a))
list_statrt_stop.append(float(b))
list_statrt_stop.append(np.nan)
# tmp2 = [area_number]
# list_area.append(tmp2)
# tmp2 = [area_number]
# list_area.append(tmp2)
# tmp2 = [np.nan]
# list_area.append(tmp2)
list_area.append(folders_name)
# data_for_graph.append(tmp)
tmp = [float(b), area_number]
list_area.append(folders_name)
# data_for_graph.append(tmp)
tmp = [np.nan, np.nan]
list_area.append("")
#print("timeline")
#print(list_area)
#print(list_statrt_stop)
if self.sw:
if self.plotType:
self.typeButton.setText('Line plot')
self.ax.plot(list_statrt_stop, list_area, 'o')
else:
self.typeButton.setText('Scatter plot')
self.ax.plot(list_statrt_stop, list_area)
else:
if self.plotType:
self.typeButton.setText('Line plot')
self.ax.plot(list_statrt_stop, list_area, 'o')
else:
self.typeButton.setText('Scatter plot')
self.ax.plot(list_statrt_stop, list_area)
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# self.ax.plot(start, area)
self.ax.set_xlabel("Time [s]")
self.ax.plot()
# self.addButton.setEnabled(True)
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce univerzalního grafu, podle zvoleho labelu v comboboxu plotType
#nepouziva se
def plot_universal(self, path, key):
self.ax.clear()
self.isCanvasClear = False
self.data_csv = self.d["_csv_"]
list = self.data_csv
a = []
def_path = []
reg_path = ""
static_path = ""
for i in list:
a = a + i
for j in a:
if self.default in j or "default.csv" in j or "log.csv" in j:
j = j.split("/")
if j[-2].endswith("_static"):
j = "/".join(j)
static_path = j
#print(i)
#static_path = j
# text = self.combo.activated[str].connect(self.onChanged)
# print(text)
# data_file = get_data_from_file_window()
#print("########################################################>>>static path")
#print(static_path)
static = static_start(static_path)
path = path
key = key
time = []
if not path:
self.plot()
# print(path)
else:
data_file = []
with open(path, "r") as file:
for line in file:
data_file.append(line)
runtime_area = analyze_data_for_plot(data_file, key, self.id)
start = analyze_data_3(data_file)
#print(start)
#print(len(start))
for i in start:
t = i - static
time.append(float(t))
#print(time)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
self.numMultiplier = float(self.mult.text())
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# minimum = "Minimum ",key, min(runtime_area)
# maximum = "Maximum",key, max(runtime_area)
# print(minimum)
# print(maximum)
if self.sw:
if self.plotType:
self.ax.plot(time, runtime_area)
else:
self.ax.plot(time, runtime_area, 'o')
else:
if self.plotType:
self.ax.plot(time, runtime_area)
else:
self.ax.plot(time, runtime_area, 'o')
self.ax.set_ylabel(key)
self.ax.set_xlabel("Time [s]")
# self.ax.text(1.1,-50.5,minimum, horizontalalignment='center',verticalalignment='center')
# self.ax.text(1.1, -70.1, maximum, horizontalalignment='center',verticalalignment='center')
#self.ax.set_text(minimum,loc = 80)
#self.ax.text(maximum, loc = 120)
self.ax.tick_params(labelsize=11)
self.ax.set_title(key)
self.ax.grid(linestyle='--')
#self.ax.legend(key,loc=2,bbox_to_anchor=(1,1.025),ncol=1, borderaxespad = 1.1,prop={'size': 13})
# self.ax.text("Minimum", minimum)
# self.ax.text("Maximum", maximum)
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce pro plot all
def plot_all(self, path, key):
self.ax.clear()
self.isCanvasClear = False
self.data_csv = self.d["_csv_"]
list = path
a = []
def_path = []
reg_path = ""
static_path = ""
for i in list:
a = a + i
for j in a:
if self.default in j or "default.csv" in j or "log.csv" in j:
j = j.split("/")
if j[-2].endswith("_static"):
j = "/".join(j)
static_path = j
#print(i)
#static_path = j
# text = self.combo.activated[str].connect(self.onChanged)
# print(text)
# data_file = get_data_from_file_window()
#print("########################################################>>>static path")
#print(static_path)
static = static_start(static_path)
path = path
#print(key)
key = key.split(",")[0]
#print(key)
time = []
#print(path)
if not path:
self.plot()
# print(path)
else:
data_file = []
runtime_area = []
with open(path, "r") as file:
for line in file:
data_file.append(line)
runtime_area = analyze_data(data_file, [key])
#print(runtime_area)
str_prev = ""
d_list = [],[]
seznam = []
Blade_sum = []
CPU0 = []
CPU1 = []
DDR_ABC = []
DDR_DEF = []
DDR_GHJ = []
DDR_KLM = []
MEZZA = []
for line in data_file:
if "#" in line and "summary" in line:
d_list[0].append(line)
str_prev = line
tmp_list = []
elif key in line and "summary" in str_prev:
d_list[1].append(float(line.split(",")[1].split("\n")[0]))
# a = float(line.split(",")[1].split("\n")[0])
# tmp = [a, str_prev]
# tmp_list.append(a)
# seznam.append(tmp_list)
# str_prev = ""
if "blade" in str_prev:
Blade_sum.append(float(line.split(",")[1].split("\n")[0]))
elif "CPU0" in str_prev:
CPU0.append(float(line.split(",")[1].split("\n")[0]))
elif "CPU1" in str_prev:
CPU1.append(float(line.split(",")[1].split("\n")[0]))
elif "DDR_ABC" in str_prev:
DDR_ABC.append(float(line.split(",")[1].split("\n")[0]))
elif "DDR_DEF" in str_prev:
DDR_DEF.append(float(line.split(",")[1].split("\n")[0]))
elif "DDR_GHJ" in str_prev:
DDR_GHJ.append(float(line.split(",")[1].split("\n")[0]))
elif "DDR_KLM" in str_prev:
DDR_KLM.append(float(line.split(",")[1].split("\n")[0]))
elif "MEZZA" in str_prev:
MEZZA.append(float(line.split(",")[1].split("\n")[0]))
# print("seznam")
# print(seznam)
# print("blade")
# print(Blade_sum)
# print("CPU0")
# print(CPU0)
# print("CPU1")
# print(CPU1)
#print(d_list)
#print(start)
#print(len(start))
start = []
static = static_start(static_path)
time = analyze_data_3(data_file)
for i in time:
t = i - static
start.append(float(t))
#print(time)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# minimum = "Minimum ",key, min(runtime_area)
# maximum = "Maximum",key, max(runtime_area)
# print(minimum)
# print(maximum)
#print(start)
# self.ax.plot(start,MEZZA, 'o')
# self.ax.plot(start, DDR_KLM, 'o')
# self.ax.plot(start, DDR_GHJ, 'o')
# self.ax.plot(start, DDR_DEF, 'o')
# self.ax.plot(start, DDR_ABC, 'o')
# self.ax.plot(start, CPU0, 'o')
# self.ax.plot(start, CPU1, 'o')
#self.ax.plot(start, Blade_sum, 'o')
if self.sw:
if self.plotType:
self.typeButton.setText('Scatter plot')
self.ax.plot(start, MEZZA)
self.ax.plot(start, DDR_KLM)
self.ax.plot(start, DDR_GHJ)
self.ax.plot(start, DDR_DEF)
self.ax.plot(start, DDR_ABC)
self.ax.plot(start, CPU0)
self.ax.plot(start, CPU1)
else:
self.typeButton.setText('Line plot')
self.ax.plot(start, MEZZA, 'o')
self.ax.plot(start, DDR_KLM, 'o')
self.ax.plot(start, DDR_GHJ, 'o')
self.ax.plot(start, DDR_DEF, 'o')
self.ax.plot(start, DDR_ABC, 'o')
self.ax.plot(start, CPU0, 'o')
self.ax.plot(start, CPU1, 'o')
else:
if self.plotType:
self.typeButton.setText('Scatter plot')
self.ax.plot(start, MEZZA)
self.ax.plot(start, DDR_KLM)
self.ax.plot(start, DDR_GHJ)
self.ax.plot(start, DDR_DEF)
self.ax.plot(start, DDR_ABC)
self.ax.plot(start, CPU0)
self.ax.plot(start, CPU1)
else:
self.typeButton.setText('Line plot')
self.ax.plot(start, MEZZA, 'o')
self.ax.plot(start, DDR_KLM, 'o')
self.ax.plot(start, DDR_GHJ, 'o')
self.ax.plot(start, DDR_DEF, 'o')
self.ax.plot(start, DDR_ABC, 'o')
self.ax.plot(start, CPU0, 'o')
self.ax.plot(start, CPU1, 'o')
self.ax.legend()
self.ax.set_ylabel(key)
self.ax.set_xlabel("Time [s]")
# self.ax.text(1.1,-50.5,minimum, horizontalalignment='center',verticalalignment='center')
# self.ax.text(1.1, -70.1, maximum, horizontalalignment='center',verticalalignment='center')
#self.ax.set_text(minimum,loc = 80)
#self.ax.text(maximum, loc = 120)
# self.ax.tick_params(labelsize=11)
# self.ax.set_title(key)
#
# self.ax.grid(linestyle='--')
#self.ax.legend(key,loc=2,bbox_to_anchor=(1,1.025),ncol=1, borderaxespad = 1.1,prop={'size': 13})
# self.ax.text("Minimum", minimum)
# self.ax.text("Maximum", maximum)
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce plot all nova....
def plot_all_nova(self, path, key, id):
self.ax.clear()
self.isCanvasClear = False
self.data_csv = self.d["_csv_"]
list = path
a = []
def_path = []
reg_path = ""
static_path = ""
# for i in list:
# a = a + i
reg = str(self.combo_reg.currentText())
for j in list:
if self.default in j or "default.csv" in j or "log.csv" in j:
k = j.split("/")
if k[-2].endswith("_static"):
#j = "/".join(j)
static_path = j
#print(i)
if reg in k[-2]:
file_name = j
# static_path = j
# text = self.combo.activated[str].connect(self.onChanged)
# print(text)
# data_file = get_data_from_file_window()
#print("########################################################>>>static path")
#print(static_path)
static = static_start(static_path)
path = path
#print(key)
key = key.split(",")[0]
#print(key)
time = []
#print(path)
if not path:
self.plot()
# print(path)
else:
data_file = []
runtime_area = []
with open(file_name, "r") as file:
for line in file:
data_file.append(line)
runtime_area = analyze_data(data_file, [key])
#print(runtime_area)
str_prev = ""
d_list = [], []
seznam = []
Blade_sum = []
CPU0 = []
CPU1 = []
DDR_ABC = []
DDR_DEF = []
DDR_GHJ = []
DDR_KLM = []
MEZZA = []
list_value = []
time_val_list = []
for line in data_file:
if "#" in line and "CALLTREE" in line and id:
tmp = line
#print("calltree")
#print(tmp)
elif "Function start timestamp" in line and "CALLTREE" in tmp and id in tmp:
time_val = float(line.split(",")[1].strip("\n"))
#print("time")
#print(time_val)
elif "(" in line and "CALLTREE" in tmp and id in tmp:
tmp_find = line
res = re.search(r"\(([A-Za-z0-9_]+)\)", line)
# res = str(re.findall('\(.*?\)', str_prev))
# print(res.group(1))
result = res.group(1)
elif id in tmp and key in line and result in tmp_find:
line = line.split(",")
d_list[0].append(line[1].strip("\n"))
d_list[1].append(result)
list_value.append(line[1].strip("\n"))
time_val_list.append(time_val)
#tmp = ""
tmp_find = ""
#print(d_list)
#print("all d_list")
d_list = sorted(d_list)
#print(type(d_list))
#print(d_list)
d_list.sort()
#print(d_list)
#print(list_value)
lista = sorted(list_value)
#print(lista)
#print(list_value)
#for i in d_list:
# print(i)
# print("seznam")
# print(seznam)
# print("blade")
# print(Blade_sum)
# print("CPU0")
# print(CPU0)
# print("CPU1")
# print(CPU1)
# print(d_list)
# print(start)
# print(len(start))
start = []
static = static_start(static_path)
#print("time data $$$$")
#print(static)
#print(time_val_list)
time = analyze_data_3(data_file)
for i in time_val_list:
t = i - static
start.append(float(t))
# print(time)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# minimum = "Minimum ",key, min(runtime_area)
# maximum = "Maximum",key, max(runtime_area)
# print(minimum)
# print(maximum)
# print(start)
# self.ax.plot(start,MEZZA, 'o')
# self.ax.plot(start, DDR_KLM, 'o')
# self.ax.plot(start, DDR_GHJ, 'o')
# self.ax.plot(start, DDR_DEF, 'o')
# self.ax.plot(start, DDR_ABC, 'o')
# self.ax.plot(start, CPU0, 'o')
# self.ax.plot(start, CPU1, 'o')
# self.ax.plot(start, Blade_sum, 'o')
if self.sw:
if self.plotType:
self.typeButton.setText('Scatter plot')
self.ax.plot(start, list_value)
else:
self.typeButton.setText('Line plot')
self.ax.plot(start, list_value, 'o')
else:
if self.plotType:
self.typeButton.setText('Scatter plot')
self.ax.plot(start, list_value)
else:
self.typeButton.setText('Line plot')
self.ax.plot(start, list_value, 'o')
self.ax.legend()
self.ax.set_ylabel(key)
self.ax.set_xlabel("Time [s]")
# self.ax.text(1.1,-50.5,minimum, horizontalalignment='center',verticalalignment='center')
# self.ax.text(1.1, -70.1, maximum, horizontalalignment='center',verticalalignment='center')
# self.ax.set_text(minimum,loc = 80)
# self.ax.text(maximum, loc = 120)
# self.ax.tick_params(labelsize=11)
# self.ax.set_title(key)
#
# self.ax.grid(linestyle='--')
# self.ax.legend(key,loc=2,bbox_to_anchor=(1,1.025),ncol=1, borderaxespad = 1.1,prop={'size': 13})
# self.ax.text("Minimum", minimum)
# self.ax.text("Maximum", maximum)
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce univerzalního grafu, podle zvoleho labelu v comboboxu plotType
def plot_universal_1(self, path, key, id):
self.ax.clear()
self.isCanvasClear = False
#self.data_t = self.data
# print("data_t")
id = id
#print("id plot universal")
#print(id)
# print(self.data_t)
#self.data_z = self.d
# print("data_z")
# print(self.d)
#print("ted")
# self.data_csv = self.d["_csv_"]
# list = self.data_csv
# print("stop")
# a = []
def_path = []
reg_path = ""
static_path = ""
# for i in list:
# a = a + i
#print("path???")
#print(path)
reg = str(self.combo_reg.currentText())
for j in path:
#print(j)
if self.default in j or "default.csv" in j or "log.csv" in j:
k = j.split("/")
if "_static" in j:
static_path = j
#print(j)
if k[-2].endswith("_static"):
k = "/".join(k)
static_path = k
#print(k)
if reg in j:
file_name = j
#static_path = j
else:
self.plot()
else:
self.plot()
# text = self.combo.activated[str].connect(self.onChanged)
# print(text)
# data_file = get_data_from_file_window()
#print("########################################################>>>static path")
#print(static_path)
static = static_start(static_path)
path = path
key = key
#print("////////////////////////////////////////////")
#print(key)
time = []
#print(path)
if not path:
self.plot()
# print(path)
else:
data_file = []
#print("ted")
#print(file_name)
with open(file_name, "r") as file:
for line in file:
data_file.append(line)
#print("zacatek")
runtime_area = analyze_data_for_plot(data_file, key, id)
#print(runtime_area)
#print("start")
start = analyze_data_runtime_timestamp(data_file, id)
#start = analyze_data_3(data_file)
#print("#################<<<<<>>>>start<<<<>>>>#############")
#print(start)
#print(len(start))
data = []
# for i in start:
# t = i - static
# time.append(float(t))
# print(time)
for j in start:
t = j[1] - static
t2 = j[0] + j[1] - static
# a = j[1]
# b = j[0] + j[1]
time.append(float(t))
time.append(float(t2))
time.append(np.nan)
for z in runtime_area:
data.append(z)
data.append(z)
data.append(np.nan)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
self.numMultiplier = float(self.mult.text())
# print("#$#$#$#$#$data#$#$#$#$#$")
# print(data)
# print("<><><><><><><time<><><><><<>")
# print(time)
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# minimum = "Minimum ",key, min(runtime_area)
# maximum = "Maximum",key, max(runtime_area)
# print(minimum)
# print(maximum)
#print("####")
#print(time)
#print(data)
if self.sw:
if self.plotType:
self.typeButton.setText('Line plot')
self.ax.plot(time, data, 'o')
#self.ax.plot(time, data)
else:
# self.ax.plot(time, data, 'o')
self.typeButton.setText('Scatter plot')
self.ax.plot(time, data)
else:
if self.plotType:
self.typeButton.setText('Line plot')
self.ax.plot(time, data, 'o')
#self.ax.plot(time, data)
else:
# self.ax.plot(time, data, 'o')
self.typeButton.setText('Scatter plot')
self.ax.plot(time, data)
# if self.plotType:
# self.ax.plot(time, data)
# else:
# self.ax.plot(time, data, 'o')
self.ax.set_ylabel(key)
self.ax.set_xlabel("Time [s]")
# self.ax.text(1.1,-50.5,minimum, horizontalalignment='center',verticalalignment='center')
# self.ax.text(1.1, -70.1, maximum, horizontalalignment='center',verticalalignment='center')
#self.ax.set_text(minimum,loc = 80)
#self.ax.text(maximum, loc = 120)
self.ax.tick_params(labelsize=11)
self.ax.set_title(key)
self.ax.grid(linestyle='--')
#self.ax.legend(key,loc=2,bbox_to_anchor=(1,1.025),ncol=1, borderaxespad = 1.1,prop={'size': 13})
# self.ax.text("Minimum", minimum)
# self.ax.text("Maximum", maximum)
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#funkce univerzalního grafu, podle zvoleho labelu v comboboxu plotType jedná se o univerzalni vykresleni start stop key
def plot_universal_start_stop(self, path, key):
self.ax.clear()
self.isCanvasClear = False
self.data_csv = self.d["_csv_"]
list = path
a = []
def_path = []
reg_path = ""
static_path = ""
# for i in list:
# a = a + i
for j in list:
if self.default in j or "default.csv" in j or "log.csv" in j:
j = j.split("/")
if j[-2].endswith("_static"):
j = "/".join(j)
static_path = j
#print(j)
# static_path = j
else:
self.plot()
static = static_start(static_path)
path = path
key = key
time = []
#cesta = "/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv"
if not path:
self.plot()
else:
data_file = []
with open(path, "r") as file:
for line in file:
data_file.append(line)
runtime_area = analyze_data_for_plot(data_file, key, self.id)
start = analyze_data_runtime_timestamp(data_file, self.id)
# start = analyze_data_3(data_file)
# print("#################<<<<<>>>>start<<<<>>>>#############")
# print(start)
# print(len(start))
data = []
# for i in start:
# t = i - static
# time.append(float(t))
# print(time)
for j in start:
t = j[1] - static
t2 = j[0] + j[1] - static
# a = j[1]
# b = j[0] + j[1]
time.append(float(t))
time.append(float(t2))
time.append(np.nan)
for z in runtime_area:
s = z[0]
k = z[1]
data.append(s)
data.append(k)
data.append(np.nan)
# mathplotlib dela automaticky jednotky na osu
# self.ax = self.figure.add_axes([0.15,0.25,0.6,0.7]) # left,bottom edge, width, height
self.numMultiplier = float(self.mult.text())
# print("#$#$#$#$#$data#$#$#$#$#$")
# print(data)
# print("<><><><><><><time<><><><><<>")
# print(time)
# self.df = pd.DataFrame(plot_data, columns=['time','area'])
# print(self.df)
# plot_data=graph_timeline_visualisation_1()
# print(plot_data)
# self.df = pd.DataFrame(plot_data, columns=['time', 'area'])
# self.df.plot(x='area', y='time')
# plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend(['Runtime'])
# minimum = "Minimum ",key, min(runtime_area)
# maximum = "Maximum",key, max(runtime_area)
# print(minimum)
# print(maximum)
if self.sw:
if self.plotType:
self.ax.plot(time, data)
else:
self.ax.plot(time, data, 'o')
else:
if self.plotType:
self.ax.plot(time, data)
else:
self.ax.plot(time, data, 'o')
self.ax.set_ylabel(key)
self.ax.set_xlabel("Time [s]")
# self.ax.text(1.1,-50.5,minimum, horizontalalignment='center',verticalalignment='center')
# self.ax.text(1.1, -70.1, maximum, horizontalalignment='center',verticalalignment='center')
# self.ax.set_text(minimum,loc = 80)
# self.ax.text(maximum, loc = 120)
self.ax.tick_params(labelsize=11)
self.ax.set_title(key)
self.ax.grid(linestyle='--')
# self.ax.legend(key,loc=2,bbox_to_anchor=(1,1.025),ncol=1, borderaxespad = 1.1,prop={'size': 13})
# self.ax.text("Minimum", minimum)
# self.ax.text("Maximum", maximum)
self.ax.plot()
# self.line1 = self.ax.plot(x='area', y='time')
self.canvas.draw()
# self.addButton.setEnabled(True)
# self.resize((self.figure.get_size_inches()*self.figure.dpi)[0],self.height())
#pridani dalsich vsech moznych veci
#testovat na cesta
# def combo_graf_add(self):
# self.data_csv = self.d["_csv_"]
# list = self.data_csv
# a = []
# def_path = ""
#
#
# for i in list:
# a = a + i
# for i in a:
# if "0_0_0.csv" in i and "static" in i:
# def_path = str(i)
# print(def_path)
# data_file = []
#
# data_for_combo_null_one = [[], []]
# data_for_combo_start_stop = []
# data_all_in_file = []
# cesta = "/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv"
# with open(def_path, "r") as file:
# for line in file:
# data_file.append(line)
# tmp = ""
# str_prev = ""
# for line in data_file:
# if "# COUNTERS" in line:
# str_prev = line
# elif ("Runtime of function [s]" in line or "RAPL_RAM [J]" in line or "RAPL_PCKG [J]" in line or "RAPL Energy consumption [J]" in line) and "# COUNTERS" in str_prev:
# data_all_in_file.append(line.split(",")[0])
#
#
# elif "# CALLTREE" in line:
# str_prev = line
# elif ("Runtime of function [s]" in line ) and "# CALLTREE" in str_prev:
# data_all_in_file.append(line.split(",")[0])
#
#
# elif "# Blade summary" in line and "summary" in line:
# str_prev = line.split()[1]
# print("#################################")
# print(str_prev)
# elif ("MAX power [W]" in line or "MIN power [W]" in line or "AVG power [W]" in line or "Energy consumption [J]" in line or "Energy consumption [J] - samples" in line) and "Blade" in str_prev:
# data_all_in_file.append(line.split(",")[0]+ "," + str_prev)
#
# elif "# Voltage regulator" in line and "summary" in line:
# str_prev = line
# print(" b ")
# res = re.search(r"\(([A-Za-z0-9_]+)\)", str_prev)
# #res = str(re.findall('\(.*?\)', str_prev))
# print(res.group(1))
# result = res.group(1)
# elif ("MAX power [W]" in line or "MIN power [W]" in line or "AVG power [W]" in line or "Energy consumption [J]" in line or "Energy consumption [J] - samples" in line) and "# Voltage regulator" in str_prev:
# tmp = line.split(",")[0] + "," + result
# print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
# print(tmp)
# #data_all_in_file.append(line.split(",")[0])
# data_all_in_file.append(tmp)
# tmp=""
#
#
#
# if "# COUNTERS - RAPL:" in line:
# str_prev = line
# elif ("Runtime of function [s]" in line or "RAPL_RAM [J]" in line or "RAPL_PCKG [J]" in line or "RAPL Energy consumption [J]" in line) and "# COUNTERS - RAPL:" in str_prev:
# data_all_in_file.append(line.split(",")[0])
#
#
# elif "# COUNTERS - MSR:" in line:
# str_prev = line
# elif ("Runtime of function [s]" in line) and "# COUNTERS - MSR:" in str_prev:
# data_all_in_file.append(line.split(",")[0])
#
#
# elif "# RATIOS:" in line:
# str_prev = line
# elif ("CPU_FREQ" in line or "CPU_UNCORE_FREQ_0 [Hz]" in line or "CPU_UNCORE_FREQ_1 [Hz]" in line or "RAPL_PKG_ACTIVE_RATIO_0" in line or "RAPL_PKG_ACTIVE_RATIO_1" in line or "START_TEMP_CORE_" in line or "STOP_TEMP_CORE_" in line or "START_TEMP_PKG_0" in line or "START_TEMP_PKG_1" in line or "STOP_TEMP_PKG_0" in line or "STOP_TEMP_PKG_1" in line) and "# RATIOS:" in str_prev:
# data_all_in_file.append(line.split(",")[0])
#
#
#
# print(data_all_in_file)
# #data_all_in_file = list(dict.fromkeys(data_all_in_file))
# print("promazany")
# #print(data_all_in_file)
# data_for_combo_plot = []
# for i in data_all_in_file:
# if i not in data_for_combo_plot:
# data_for_combo_plot.append(i)
# print(data_for_combo_plot)
# #print(data_for_combo_start_stop)
# #print(data_for_combo_null_one)
# return data_for_combo_plot
#funkce ktera pridava do comboboxu data ktera se nachazi v souboru
def combo_add_universal(self):
self.data_csv = self.d["_csv_"]
list = self.data_csv
a = []
def_path = ""
for i in list:
a = a + i
for i in a:
j = i.split("/")
if (j[-1] == self.default or "default.csv" in j[-1] or "log.csv" in j[-1]) and "static" in j[-2]:
def_path = str(i)
# print(def_path)
data_file = []
combo_data_all = []
data_for_combo_null_one = [[], []]
data_for_combo_start_stop = []
data_all_in_file = []
#cesta = "/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv"
with open(def_path, "r") as file:
for line in file:
data_file.append(line)
tmp = ""
str_prev = ""
id_list = []
boolen_calltree = False
for line in data_file:
if "# " in line and "CALLTREE" in line:
tmp_find = line
#evolve = line.split(";")[1].strip("\n")
# print("ted ")
# print(tmp_find)
boolen_calltree = True
id_ex = line.strip("\n")
id_ex = id_ex.split(";")[1]
id_ex = int(id_ex.split("_")[1])
if not id_ex in id_list:
id_list.append(id_ex)
if "(" in line and boolen_calltree:
tmp_find = line
res = re.search(r"\(([A-Za-z0-9_]+)\)", line)
# res = str(re.findall('\(.*?\)', str_prev))
# print(res.group(1))
result = res.group(1)
#print(result)
if "[" in line and "(" in tmp_find and boolen_calltree:
# print(line)
tmp = line.split(",")[0] + "," + result #+ "," + evolve
data_all_in_file.append(tmp)
tmp = ""
combo_data_all.append(line.split(",")[0].strip("\n"))
# print("combo_data_all________________________________________________________________________")
# print(combo_data_all)
# print(data_all_in_file)
#combo_data_all.remove('Runtime of function [s]')
self.id_max = max(id_list)
self.id_min = min(id_list)
rus = []
data_for_combo_plot = []
for i in combo_data_all:
if i not in rus:
#a = i+",ALL"
rus.append(i)
list=[]
for i in rus:
if i not in list:
a = i+",ALL"
data_for_combo_plot.append(a)
# print("rus")
# print(rus)
# print("list")
# print(list)
# print(data_all_in_file)
# data_all_in_file = list(dict.fromkeys(data_all_in_file))
# print("promazany")
# print(data_all_in_file)
for i in data_all_in_file:
if i not in data_for_combo_plot:
data_for_combo_plot.append(i)
# print("data_for_como")
# print(data_for_combo_plot)
# print(data_for_combo_start_stop)
# print(data_for_combo_null_one)
return data_for_combo_plot
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
main = Window(1)
main.show()
sys.exit(app.exec_())
#def paths(paths):
#automaticke otevirani LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv
# vraci prvni timestamp, se kterym se nasledne pracuje v dalsich funkcich
def static_start(file_name):
file_name = file_name
#print("file---------------------------------")
#print(file_name)
static_data = []
with open(file_name, "r") as file:
for line in file:
static_data.append(line)
runtime_area = []
for line in static_data:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1].split("\n")[0]))
static_first = runtime_area[0]
# print(static_first)
return static_first
#univerzalni fukce, ktera na zaklade vstupnich parametru vraci zadane keywords (napriklad (cpu1) energy con)
def analyze_data_for_plot(data, key, id):
#print("###########")
id = id
#print(id)
#print(key)
key_a = key.split(",")
if len(key_a) > 2:
evolve = key_a[-1].strip("\n")
# print(key_a)
#key[1]
if "START" in key_a[0] or "STOP" in key_a[0]:
runtime_area = [[], []]
neorez = key_a[0]
find_key_start = ""
find_key_stop = ""
if "START" in neorez:
orez = neorez.split("START")[1]
find_key_start = "START"+orez
find_key_stop = "STOP" + orez
elif "STOP" in neorez:
orez = neorez.split("STOP")[1]
find_key_start = "START" + orez
find_key_stop = "STOP" + orez
########################################################################################################################################################################################################
tmp = ""
str_prev = ""
for line in data:
if key_a[1] in line:
str_prev = line
elif find_key_start in line and key_a[1] in str_prev:
blade = float(line.split(",")[1])
# print(blade)
runtime_area[0].append(float(line.split(",")[1]))
tmp = str_prev
str_prev = ""
elif find_key_stop in line and key_a[1] in tmp:
runtime_area[1].append(float(line.split(",")[1]))
else:
tmp = ""
str_prev = ""
# print("runtime")
# print(runtime_area)
else:
#print("else")
runtime_area = []
orez = key_a[0]
str_prev = ""
tmp_calltree = ""
for line in data:
if id in line:
tmp_calltree = line
#print("prvni if")
#print(tmp_calltree)
if key_a[1] in line and id in tmp_calltree:
str_prev = line
#print("druhy if")
#print(str_prev)
if key_a[0] in line and key_a[1] in str_prev:
blade = float(line.split(",")[1])
# print(blade)
runtime_area.append(float(line.split(",")[1]))
#print("treti if")
#print(line)
str_prev = ""
tmp_calltree = ""
if "# COUNTERS" in line:
tmp_calltree = ""
#print("-----------runtime")
#print(runtime_area)
# print(len(runtime_area))
return runtime_area
#pouze na zjisteni typu grafu z qcombo
#muzeme smazat
def plot_type(text):
text = text
#print("plot_type")
#print(text)
return text
def open_static_36():
static_data = []
pwd = os.getcwd()
file_name = "/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv"
#file_name = pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv"
with open(file_name, "r") as file:
for line in file:
static_data.append(line)
runtime_area = []
for line in static_data:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1].split("\n")[0]))
static_first = runtime_area[0]
#print(static_first)
return static_first
#automaticke otevirani DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv
# vraci prvni timestamp, se kterym se nasledne pracuje v dalsich funkcich
def open_static_12():
static_data = []
pwd = os.getcwd()
#file_name = pwd + "/../DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv"
file_name = "/home/hynek/SGS18-READEX/DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv"
with open(file_name, "r") as file:
for line in file:
static_data.append(line)
runtime_area = []
for line in static_data:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1].split("\n")[0]))
static_first = runtime_area[0]
#print(static_first)
return static_first
#automaticke otevirani statiku, ktery si uzivatel zvoli zadanim cesty jako vstupniho parametru
#vraci prvni timestamp, se kterym se nasledne pracuje v dalsich funkcich
def open_static_gui(file_name):
static_data = []
with open(file_name, "r") as file:
for line in file:
static_data.append(line)
runtime_area = []
for line in static_data:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1].split("\n")[0]))
static_first = runtime_area[0]
#print(static_first)
return static_first
#automaticke otevirani statiku, ktery si uzivatel zvoli zadanim cesty az za behu teto funkce
#vraci prvni timestamp, se kterym se nasledne pracuje v dalsich funkcich
def open_static_gui_terminal():
static_data = []
print("zadej cestu ke statiku ")
file_name = input()
with open(file_name, "r") as file:
for line in file:
static_data.append(line)
runtime_area = []
for line in static_data:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1].split("\n")[0]))
static_first = runtime_area[0]
#print(static_first)
return static_first
#automaticke otevirani vsech souboru nachazejich se v danem adresari /../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv a s nazvem 36.csv
#lze nahradit automatic_open_file_gui, kde si uzivatel muze zvolit novou cestu
#vraci zvoleny soubor ulozeny do data_file (list)
def automatic_open_files():
data_file = []
#upravit cestu
pwd = os.getcwd()
cesta = (glob.glob(pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv"))
for i in cesta:
with open(i, "r") as file:
for line in file:
data_file.append(line)
#print(data_file)
#print(cesta)
return data_file
#automaticke otevirani vsech souboru nachazejich se v danem adresari, uzivatel si muze vybrat jestli def cestu nebo si zada novou
#vraci zvoleny soubor ulozeny do data_file (list)
#tato funkce se nikde nepouziva, ale je to pripadna nahrada za automatic_opet_files
def automatic_open_file_gui():
data_file = []
# upravit cestu
pwd = os.getcwd()
#print("zmenit cestu s souborum?")
#print("defaultní je /../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv ")
#print("zvolenim 1 budete pokracovat s defaultni cestou ")
#print("zvolenim 2 budete muset zadat novou cestu ")
menuinput = int(input())
if menuinput == 1:
cesta = (glob.glob(pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv"))
elif menuinput == 2:
#print("zadej novou absolutní cestu k souboru")
#print("ve formatu /../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv ")
#print("ve formatu /home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv")
pathinput = input()
#cesta = (glob.glob(pwd + pathinput))
cesta = (glob.glob(pathinput))
else:
cesta = (glob.glob(pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv"))
for i in cesta:
with open(i, "r") as file:
for line in file:
data_file.append(line)
# print(data_file)
#print(cesta)
return data_file
#graf runtime z vybraneho regionu
#vstupni parametr je cesta a nazev regionu
def analyze_runtime_area_graph(file_name: str, name):
data_area_graph = get_data_from_file(file_name)
runtime_area = analyze_data(data_area_graph, ["Runtime"])
fig = plt.figure()
fig.suptitle('graf runtime '+name, fontsize=20)
plt.ylabel('doba trvání', fontsize=16)
plt.plot(runtime_area,'o')
plt.show()
d = {'Runtime': runtime_area}
return d
#graf runtime z vybraneho regionu
#uzivatel si vybira v dialogovem okne, ktery soubor chce pouzivat
def analyze_runtime_area_graph_gui_input():
data = get_data_from_file_window()
runtime_area = analyze_data(data, ["Runtime"])
fig = plt.figure()
fig.suptitle('graf runtime ', fontsize=20)
plt.ylabel('doba trvání [s] y', fontsize=16)
plt.xlabel('x', fontsize=16)
plt.plot(runtime_area,'o')
plt.show()
#graf teploty procesoru PKG0 a PKG1 v jednom regionu
def termp():
start=open_static_36()
data = get_data_from_file_window()
runtime_area = analyze_data_runtime_timestamp(data)
#term_PKG_all = analyze_data_term(data)
term_PKG_all = [[], []]
for line in data:
if "START_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "START_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
term_PKG_all[0] = term_PKG_all[0][:len(term_PKG_all[1])]
term_PKG_all = [[term_PKG_all[0][i], term_PKG_all[1][i]] for i in range(len(term_PKG_all[0]))]
pokus = []
#start = runtime_area[0][1]
for i in runtime_area:
a = i[1]-start
b = i[0] + i[1]-start
pokus.append(float(a))
pokus.append(float(b))
#print(len(pokus))
term_PKG0 = []
term_PKG1 = []
for i in term_PKG_all:
a = i[0]
b = i[1]
term_PKG0.append(float(a))
term_PKG1.append(float(b))
#print(a)
#print(b)
#
#print(pokus)
#print(len(pokus))
#print(len(term_PKG_all))
#print(len(term_PKG0))
#print(len(term_PKG1))
# #
d = { 'Cas': pokus, 'TEMP_PKG_0': term_PKG0,'TEMP_PKG_1':term_PKG1}
df = pd.DataFrame(d)
pd.set_option("display.max.columns", None)
pd.set_option('float_format', '{:f}'.format)
df.head()
#print(df)
df.head()
ax =plt.gca()
df.plot(x ='Cas', y='TEMP_PKG_0', ax=ax)
df.plot(x='Cas', y='TEMP_PKG_1', color='red', ax=ax)
plt.ylabel('TEMP_PKG[C]', fontsize=16)
plt.xlabel('Time [s]', fontsize=16)
plt.suptitle('graf Teploty procesoru TEMP_PKG_', fontsize=20)
plt.show()
#graf prumerne frekvence procesoru v jednom regionu
def frequency():
start = open_static_36()
data=get_data_from_file_window()
runtime_area = analyze_data_runtime_timestamp(data)
term_list0 = [[],[]]
freq_PKG_all = analyze_data_freq(data)
start_stop = []
for i in runtime_area:
a = i[1] - start
b = i[0] + i[1] -start
start_stop.append(float(a))
start_stop.append(float(b))
freq_PKG0 =[]
freq_PKG1 =[]
for i in freq_PKG_all:
a = i[0]
b = i[1]
freq_PKG0.append(float(a))
freq_PKG0.append(float(a))
freq_PKG1.append(float(b))
freq_PKG1.append(float(b))
#print(a)
#print(b)
#
#print(start_stop)
#print(len(start_stop))
#print(len(freq_PKG_all))
#print(len(freq_PKG0))
#print(len(freq_PKG1))
# #
d = { 'Cas': start_stop, 'CPU_UNCORE_FREQ_0': freq_PKG0,'CPU_UNCORE_FREQ_1':freq_PKG1}
df = pd.DataFrame(d)
pd.set_option("display.max.columns", None)
pd.set_option('float_format', '{:f}'.format)
df.head()
#print(df)
df.head()
ax =plt.gca()
df.plot(x ='Cas', y='CPU_UNCORE_FREQ_0', ax=ax)
df.plot(x='Cas', y='CPU_UNCORE_FREQ_1', color='red', ax=ax)
plt.ylabel('CPU_UNCORE_FREQ [GHz]', fontsize=16)
plt.xlabel('TIME [s]', fontsize=16)
plt.suptitle('graph CPU_UNCORE_FREQ', fontsize=20)
plt.show()
#print(start_stop[0])
#textovy vypis zacatku (timestamp), casu behu aplikace (runtime) a dopocteneho konce
#vstupnim parametrem je cesta k souboru a nazev regionu
def text_vypis(file_name: str):
data_area = []
with open(file_name, "r") as file:
for line in file:
data_area.append(line)
runtime_area = analyze_data_runtime_timestamp(data_area)
#for i in runtime_area:
# print(i[0], i[1])
#print(" zacatek : ", i[1], " konec : ", i[0] + i[1], " cas : ", i[0])
# for i in runtime:
#textovy vypis zacatku (timestamp), casu behu aplikace (runtime) a dopocteneho konce
#uzivatel si vybira v dialogovem okne, ktery soubor chce pouzivat
def text_vypis_gui_input():
data_area = get_data_from_file_window()
runtime_area = analyze_data_runtime_timestamp(data_area)
#print(name)
#for i in runtime_area:
# print(i[0], i[1])
#print(" zacatek : ", i[1], " konec : ", i[0] + i[1], " cas : ", i[0])
# for i in runtime:
#univerzalni funkce, ktera na zaklade vstupnich parametru vraci zadane keywords (napriklad Runtime)
def analyze_data(data, keywords):
runtime_area = []
for line in data:
for keyword in keywords:
if keyword in line:
runtime_area.append(float(line.split(",")[1]))
return runtime_area
#funkce, ktera projde jiz nactena a ulozena data ze souboru a vybere runtime a vraci runtime
def analyze_data_2(data_file):
runtime_area = []
for line in data_file:
if "Runtime" in line:
runtime_area.append(float(line.split(",")[1]))
return runtime_area
#funkce, ktera projde jiz nactena a ulozena data ze souboru a vybere timestamp a vraci timestamp
def analyze_data_3(data_file):
runtime_area = []
for line in data_file:
if "timestamp" in line:
runtime_area.append(float(line.split(",")[1]))
return runtime_area
#funkce, ktera projde jiz nactena a ulozena data ze souboru a vybere timestamp a runtime a vraci timestamp a runtime
def analyze_data_runtime_timestamp(data_file, id):
runtime = [[], []]
#id = "init_0;"
id = str(id)
#print("id in analyze")
#print(id)
for line in data_file:
if "CALLTREE" in line:
tmp = ""
#print(line)
a = line.split(";")
#print(a)
for i in a:
#print(i)
if i == id:
tmp = i
#print(tmp)
if "Runtime" in line and id in tmp:
runtime[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line and id in tmp:
runtime[1].append(float(line.split(",")[1].split("\n")[0]))
tmp = ""
if "# COUNTERS" in line:
tmp = ""
runtime[0] = runtime[0][:len(runtime[1])]
runtime = [[runtime[0][i], runtime[1][i]] for i in range(len(runtime[0]))]
#print("runtime ###")
#print(runtime)
return runtime
#funkce otevirajici dialogove okno, kde si uzivatel vybere soubor, ktery chce otevrit a funkce ho nasledne otevre
#vraci data_file, ve kterem je ulozeny vybrany soubor
#uz se nepouziva
def get_data_from_file_window():
# #root = tk.Tk()
# #root.withdraw()
#
# #file_path = filedialog.askopenfilename()
# print(file_path)
# data_file = []
# with open(file_path, "r") as file:
# for line in file:
# data_file.append(line)
# return data_file
print("")
#funkce otvrira na zaklade vstupnich parametru (cesta) soubor zadany uzivatelem
#vraci data_file, ve kterem je ulozeny vybrany soubor
def get_data_from_file(file_name):
data_file = []
with open(file_name, "r") as file:
for line in file:
data_file.append(line)
return data_file
#fukce analyzuje jiz ulozena data, ktera do ni vstupuje pres vstupni parametr
#vraci zacatek a konec behu aplikace
def analyze_data_start_stop(data_file):
runtime_area = [[], []]
for line in data_file:
if "Runtime" in line:
runtime_area[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime_area[1].append(float(line.split(",")[1].split("\n")[0]))
runtime_area[0] = runtime_area[0][:len(runtime_area[1])]
runtime_area = [[runtime_area[0][i], runtime_area[1][i]] for i in range(len(runtime_area[0]))]
start_stop = [[],[]]
for i in runtime_area:
a = i[1]
b = i[0] + i[1]
start_stop.append(float(a))
start_stop.append(float(b))
return start_stop
#fukce analyzuje jiz ulozena data, ktera do ni vstupuje pres vstupni parametr
#vraci CPU_UNCORE_FREQ_1 a CPU_UNCORE_FREQ_0 v jednom listu a to freq_PKG_all (data jsou predpripavena pro grafy)
def analyze_data_freq(data_file):
freq_PKG_all = [[], []]
for line in data_file:
if "CPU_UNCORE_FREQ_0" in line:
freq_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "CPU_UNCORE_FREQ_1" in line:
freq_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
freq_PKG_all[0] = freq_PKG_all[0][:len(freq_PKG_all[1])]
freq_PKG_all = [[freq_PKG_all[0][i], freq_PKG_all[1][i]] for i in range(len(freq_PKG_all[0]))]
return freq_PKG_all
#fukce analyzuje jiz ulozena data, ktera do ni vstupuje pres vstupni parametr
#vraci START_TEMP_PKG_0 a STOP_TEMP_PKG_0, START_TEMP_PKG_1 a STOP_TEMP_PKG_1" v jednom listu a to term_PKG_all (data jsou predpripavena pro grafy)
def analyze_data_term(data_file):
term_PKG_all = [[], []]
for line in data_file:
if "START_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "START_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
term_PKG_all[0] = term_PKG_all[0][:len(term_PKG_all[1])]
term_PKG_all = [[term_PKG_all[0][i], term_PKG_all[1][i]] for i in range(len(term_PKG_all[0]))]
#print("ted")
#print(len(term_PKG_all))
return term_PKG_all
#graf teploty proceru PKG0 a PKG1 vsech regionu
#vstupnim parametrem funkce jsou cesty k souborum
def graph_term_all(files):
start = open_static_36()
data_term_PKG0 = []
data_term_PKG1 = []
time = []
for file in files:
data = get_data_from_file(file)
runtime_area = analyze_data_runtime_timestamp(data)
#term_PKG_all = analyze_data_term(data)
term_PKG_all = [[], []]
for line in data:
if "START_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_0" in line:
term_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
if "START_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
if "STOP_TEMP_PKG_1" in line:
term_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
term_PKG_all[0] = term_PKG_all[0][:len(term_PKG_all[1])]
term_PKG_all = [[term_PKG_all[0][i], term_PKG_all[1][i]] for i in range(len(term_PKG_all[0]))]
pokus = []
#start = runtime_area[0][1]
for i in runtime_area:
a = i[1] - start
b = i[0] + i[1] - start
time.append(float(a))
time.append(float(b))
term_PKG0 = []
term_PKG1 = []
for i in term_PKG_all:
a = i[0]
b = i[1]
data_term_PKG0.append(float(a))
data_term_PKG1.append(float(b))
#print(len(data_term_PKG0))
#print(len(data_term_PKG1))
#print(len(time))
d = { 'Cas': time, 'TEMP_PKG_0': data_term_PKG0,'TEMP_PKG_1':data_term_PKG1}
df = pd.DataFrame(d)
df.sort_values(by=['Cas'], inplace=True)
pd.set_option("display.max.columns", None)
pd.set_option('float_format', '{:f}'.format)
#print(df)
ax =plt.gca()
df.plot(x ='Cas', y='TEMP_PKG_0', ax=ax)
df.plot(x='Cas', y='TEMP_PKG_1', color='red', ax=ax)
plt.ylabel('TEMP_PKG[C]', fontsize=16)
plt.xlabel('Time [s]', fontsize=16)
plt.suptitle('graf teploty procesoru TEMP_PKG', fontsize=20)
plt.show()
#graf prumerne frekvence procesoru za vsechny regiony
def graph_freq_all():
start = open_static_36()
data_term_PKG0 = []
data_term_PKG1 = []
time = []
freq_PKG0 = []
freq_PKG1 = []
data = automatic_open_file_gui()
#data=automatic_open_files()
runtime_area = analyze_data_runtime_timestamp(data)
freq_PKG_all = analyze_data_freq(data)
# freq_PKG_all = [[], []]
# for line in data:
# if "CPU_UNCORE_FREQ_0" in line:
# freq_PKG_all[0].append(float(line.split(",")[1].split("\n")[0]))
# if "CPU_UNCORE_FREQ_1" in line:
# freq_PKG_all[1].append(float(line.split(",")[1].split("\n")[0]))
#
# freq_PKG_all[0] = freq_PKG_all[0][:len(freq_PKG_all[1])]
#
# freq_PKG_all = [[freq_PKG_all[0][i], freq_PKG_all[1][i]] for i in range(len(freq_PKG_all[0]))]
start_stop = []
for i in runtime_area:
a = i[1] - start
b = i[0] + i[1] - start
time.append(float(a))
time.append(float(b))
for i in freq_PKG_all:
a = i[0]
b = i[1]
freq_PKG0.append(float(a))
freq_PKG0.append(float(a))
freq_PKG1.append(float(b))
freq_PKG1.append(float(b))
#print(a)
#print(b)
#
#print(start_stop)
#print(len(start_stop))
#print(len(freq_PKG_all))
#print(len(freq_PKG0))
#print(len(freq_PKG1))
# #
d = {'Cas': time, 'CPU_UNCORE_FREQ_0': freq_PKG0, 'CPU_UNCORE_FREQ_1': freq_PKG1}
df = pd.DataFrame(d)
df.sort_values(by=['Cas'], inplace=True)
pd.set_option("display.max.columns", None)
pd.set_option('float_format', '{:f}'.format)
df.head()
#print(df)
df.head()
ax = plt.gca()
df.plot(x='Cas', y='CPU_UNCORE_FREQ_0', ax=ax)
df.plot(x='Cas', y='CPU_UNCORE_FREQ_1', color='red', ax=ax)
plt.ylabel('CPU_UNCORE_FREQ [GHz]', fontsize=16)
plt.xlabel('TIME [s]', fontsize=16)
plt.suptitle('graph CPU_UNCORE_FREQ', fontsize=20)
plt.show()
return df
#sloupcovy graf sumy casu behu vsech regionu
#vstupnim parametrem funkce jsou cesty k souborum
def graph_all(files):
runtime_sum = []
for file in files:
data = get_data_from_file(file)
runtime = analyze_data_2(data)
Sum = sum(runtime)
runtime_sum.append(Sum)
#print(runtime_sum)
fig = plt.figure()
fig.suptitle('graf kumulativní runtime všechny oblasti', fontsize=20)
plt.ylabel('doba trvání [s] y ', fontsize=16)
bars = ('Collide', 'static', 'Init', 'Main', 'Propagate')
y_pos = np.arange(len(bars))
plt.bar(y_pos, runtime_sum, color='red')
plt.xticks(y_pos, bars)
plt.grid(True)
plt.show()
#graf a textovy vypis volani aplikace
#z grafu je patrne v jakem case byl volan jaky region
#grav je nacrtnut v issues #20 na gitu
def graph_timeline_visualisation(file_name):
#cesta = (glob.glob(file_name))
cesta = file_name
area_number = 0
data_for_graph = [[], []]
list_statrt_stop = []
list_area = []
#start = open_static_12()
for i in file_name:
if ("0_0_0.csv" in i or "default.csv" in i) and i.endswith("_static"):
static_path = i
static = static_start(static_path)
#print(area_number)
#print(cesta)
#print(len(cesta))
legend = []
for i in cesta:
path = os.path.dirname(i)
#print(path)
folders_name = os.path.basename(path)
area_number += 1
data = []
with open(i, "r") as file:
for line in file:
data.append(line)
runtime_area = analyze_data_runtime_timestamp(data)
string = ""
string = str(area_number) + "=" + folders_name
#print(string)
#tmp = [area_number, folders_name]
legend.append(string)
#print(runtime)
for j in runtime_area:
#a = j[1] - start
#b = j[0] + j[1] - start
a = j[1] - static
b = j[0] + j[1] - static
#tmp = [float(a), area_number]
# tmp1 = [float(a)]
# list_statrt_stop.append(tmp1)
# tmp1 = [float(b)]
# list_statrt_stop.append(tmp1)
# tmp1 = [np.nan]
# list_statrt_stop.append(tmp1)
list_statrt_stop.append(float(a))
list_statrt_stop.append(float(b))
list_statrt_stop.append(np.nan)
# tmp2 = [area_number]
# list_area.append(tmp2)
# tmp2 = [area_number]
# list_area.append(tmp2)
# tmp2 = [np.nan]
#list_area.append(tmp2)
list_area.append(folders_name)
#data_for_graph.append(tmp)
tmp = [float(b), area_number]
list_area.append(folders_name)
#data_for_graph.append(tmp)
tmp = [np.nan, np.nan]
list_area.append("")
#data_for_graph.append(tmp)
# print("list area")
# for i in list_area:
# print(i)
# print("list stat")
# for i in list_statrt_stop:
# print(i)
# fontP = FontProperties()
# fontP.set_size('xx-small')
# #print(data_for_graph)
# df = pd.DataFrame(data_for_graph,columns=['time', 'area'])
# df.plot(x='time', y='area')
# ax = plt.gca()
# plt.ylabel('area', fontsize=16)
# plt.xlabel('TIME', fontsize=16)
# plt.suptitle('Graph Timeline visualisation', fontsize=20)
# plt.legend([legend], bbox_to_anchor=(0.5, 1.09), loc='upper center')
#ax.legend(handler_map={folders_name: HandlerLine2D(numpoints=4)})
#print(df)
#plt.show()
return list_statrt_stop, list_area
#toto uz je nepotrebne, je to stejna funkce, jako graph_timeline_visualisation
#muze se smazat, pouzivala se pouze pro testovani
def graph_timeline_visualisation_1():
start = open_static_12()
data = []
pokus = [[], []]
area_number = 0
with open("/home/hynek/SGS18-READEX/DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv", "r") as file:
for line in file:
data.append(line)
area_number += 1
runtime = [[], []]
for line in data:
if "Runtime" in line:
runtime[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime[1].append(float(line.split(",")[1].split("\n")[0]))
runtime[0] = runtime[0][:len(runtime[1])]
runtime = [[runtime[0][i], runtime[1][i]] for i in range(len(runtime[0]))]
#print(runtime)
#print(len(runtime))
for i in runtime:
a=i[1] - start
b=i[0]+i[1] - start
pokus[0].append(float(a))
pokus[0].append(float(b))
pokus[0].append(np.nan)
pokus[1].append(1)
pokus[1].append(1)
pokus[1].append(np.nan)
#print(" zacatek : ", i[1], " konec : ", i[0] + i[1], " cas : ", i[0])
#print(a)
#print(b)
pokus[0] = pokus[0][:len(pokus[1])]
pokus = [[pokus[0][i], pokus[1][i]] for i in range(len(pokus[0]))]
#print(pokus)
#print("ted")
data2 = []
with open("/home/hynek/SGS18-READEX/DATA/LBMok+/Collide/1200000000_1200000000_12.csv",
"r") as file:
for line in file:
data2.append(line)
area_number += 1
runtime2 = [[], []]
for line in data2:
if "Runtime" in line:
runtime2[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime2[1].append(float(line.split(",")[1].split("\n")[0]))
runtime2[0] = runtime2[0][:len(runtime2[1])]
runtime2 = [[runtime2[0][i], runtime2[1][i]] for i in range(len(runtime2[0]))]
#print(runtime2)
#print(len(runtime2))
for i in runtime2:
a = i[1] - start
b = i[0] + i[1] - start
tmp = [float(a), area_number]
pokus.append(tmp)
tmp = [float(b), area_number]
pokus.append(tmp)
tmp = [np.nan, np.nan]
pokus.append(tmp)
#print(" zacatek : ", i[1], " konec : ", i[0] + i[1], " cas : ", i[0])
# print(a)
# print(b)
#print(pokus)
#print(pokus[0])
#print(pokus[1])
#print(pokus[0])
#print(pokus[1])
#print(pokus)
#print("ted2")
data3 = []
with open("/home/hynek/SGS18-READEX/DATA/LBMok+/Init/1200000000_1200000000_12.csv",
"r") as file:
for line in file:
data3.append(line)
area_number+=1
runtime3 = [[], []]
for line in data3:
if "Runtime" in line:
runtime3[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime3[1].append(float(line.split(",")[1].split("\n")[0]))
runtime3[0] = runtime3[0][:len(runtime3[1])]
runtime3 = [[runtime3[0][i], runtime3[1][i]] for i in range(len(runtime3[0]))]
#print(runtime2)
#print(len(runtime3))
for i in runtime3:
a = i[1] - start
b = i[0] + i[1] - start
tmp = [float(a), area_number]
pokus.append(tmp)
tmp = [float(b), area_number]
pokus.append(tmp)
tmp = [np.nan, np.nan]
pokus.append(tmp)
data4 = []
with open("/home/hynek/SGS18-READEX/DATA/LBMok+/Main/1200000000_1200000000_12.csv",
"r") as file:
for line in file:
data4.append(line)
area_number+=1
runtime4 = [[], []]
for line in data4:
if "Runtime" in line:
runtime4[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime4[1].append(float(line.split(",")[1].split("\n")[0]))
runtime4[0] = runtime4[0][:len(runtime4[1])]
runtime4 = [[runtime4[0][i], runtime4[1][i]] for i in range(len(runtime4[0]))]
#print(runtime2)
#print(len(runtime4))
for i in runtime4:
a = i[1] - start
b = i[0] + i[1] - start
tmp = [float(a), area_number]
pokus.append(tmp)
tmp = [float(b), area_number]
pokus.append(tmp)
tmp = [np.nan, np.nan]
pokus.append(tmp)
data5 = []
with open("/home/hynek/SGS18-READEX/DATA/LBMok+/Propagate/1200000000_1200000000_12.csv",
"r") as file:
for line in file:
data5.append(line)
area_number+=1
runtime5 = [[], []]
for line in data5:
if "Runtime" in line:
runtime5[0].append(float(line.split(",")[1].split("\n")[0]))
if "timestamp" in line:
runtime5[1].append(float(line.split(",")[1].split("\n")[0]))
runtime5[0] = runtime5[0][:len(runtime5[1])]
runtime5 = [[runtime5[0][i], runtime5[1][i]] for i in range(len(runtime5[0]))]
#print("***********************")
#print(runtime5)
#print(len(runtime5))
for i in runtime5:
a = i[1] - start
b = i[0] + i[1] - start
tmp = [float(a), area_number]
#print(tmp)
pokus.append(tmp)
tmp = [float(b), area_number]
#print(tmp)
pokus.append(tmp)
tmp = [np.nan, np.nan]
pokus.append(tmp)
df = pd.DataFrame(pokus,columns=['time', 'area'])
df.plot(x='time', y='area')
plt.ylabel('area 1 = Static, 2 = Collide, 3 = Init, 4 = Main, 5 = Propagate ', fontsize=16)
plt.xlabel('TIME', fontsize=16)
plt.suptitle('Graph Timeline visualisation', fontsize=20)
plt.legend(['Runtime'])
#print(df)
plt.show()
return pokus
#ukazka mezery v pandas a nespojiteho grafu
#nepotrebne
def mising_data_graph():
dict = {'time': [1, 2, 3, 4, 5, 6],
'first': [30, 45, 56, np.nan, 65, 85],
'second': [10,np.nan, 40, 80, 98, 120]}
df = pd.DataFrame(dict)
ax = plt.gca()
df.plot(x='time', y='first', ax=ax)
df.plot(x='time', y='second', color='red', ax=ax)
# plt.ylabel('CPU_UNCORE_FREQ [GHz]', fontsize=16)
# plt.xlabel('TIME [s]', fontsize=16)
plt.suptitle('score', fontsize=20)
plt.show()
return df
#nepotrebne, jedna se o testovaci verci funkce calltree, kde se nepouzivaly cykly
#lze smazat
def calltree():
calltree = []
job_id =[]
cesta = (glob.glob("/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv"))
#data = automatic_open_files()
pocet_init = 0
pocet_static = 0
pocet_propagate = 0
pocet_collide = 0
pocet_init_0 = 0
pocet_static_0 = 0
pocet_propagate_0 = 0
pocet_collide_0 = 0
init_0 = []
static_0 = []
job_static_0 = []
propagate_0 = []
job_propagate_0 = []
collide_0 = []
collide = []
job_collide_0 = []
data_cesta = []
data1=[]
data2=[]
data3=[]
area = []
pocet = 0
with open("/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv", "r") as file:
for line in file:
data1.append(line)
str_prev = ""
for line in data1:
if "CALLTREE" in line:
str_prev = line
if ("Job info" in line or "JOB ID" in line) and "CALLTREE" in str_prev:
collide_0.append(str_prev.split("CALLTREE;")[1].split("\n")[0])
str_prev=""
c = Counter(collide_0)
#print("collide",c)
with open("/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv", "r") as file:
for line in file:
data2.append(line)
str_prev2 = ""
for line in data2:
if "CALLTREE" in line:
str_prev2 = line
elif ("Job info" in line or "JOB ID" in line) and "CALLTREE" in str_prev2:
static_0.append(str_prev2.split("CALLTREE;")[1].split("\n")[0])
str_prev2=""
s = Counter(static_0)
#print("static",s)
with open("/home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/propagate/36.csv", "r") as file:
for line in file:
data3.append(line)
str_prev3 = ""
for line in data3:
if "CALLTREE" in line:
str_prev3 = line
elif ("Job info" in line or "JOB ID" in line) and "CALLTREE" in str_prev3:
propagate_0.append(str_prev3.split("CALLTREE;")[1].split("\n")[0])
str_prev3 = ""
p = Counter(propagate_0)
#print("propagate",p)
#vypis caltree
#vystupem fukce je tabulka pandas, kde v prvnm sloupci je region, ve druhem je kolikrat byl region volan a ve tretim je konfigurace
def calltree_met():
#print("zadej absolutní cestu k souboru")
# print("ve formatu /../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv ")
#print("ve formatu /home/hynek/SGS18-READEX/LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv")
pathinput = input()
# cesta = (glob.glob(pwd + pathinput))
cesta = (glob.glob(pathinput))
caltree = []
#print("ted")
#cesta=[]
for i in cesta:
data = []
#print(i)
path = os.path.dirname(i)
#print(path)
folders_name = os.path.basename(path)
#print(path)
with open(i, "r") as file:
for line in file:
data.append(line)
str_prev = ""
for line in data:
if "CALLTREE" in line:
str_prev = line
elif ("Job info" in line or "JOB ID" in line) and "CALLTREE" in str_prev:
a = str_prev.split("CALLTREE;")[1].split("\n")[0]
b = folders_name
tmp = [a, b]
caltree.append(tmp)
str_prev = ""
#c = Counter(caltree)
#print(c)
#print(caltree)
df=pd.DataFrame(caltree,columns=['Calltree', 'area'])
df = (df.fillna('') \
.groupby(df.columns.tolist()).apply(len) \
.rename('group_count') \
.reset_index() \
.replace('', np.nan) \
.sort_values(by=['group_count'], ascending=False))
df = df[['area','group_count','Calltree']]
#df.count(axis='columns')
#print(df)
def start_menu():
print("""
START MENU
******************
stisknutím 1 zvolite ciselne zobrazeni dat podle oblasti
stisknutím 2 zvolite graficke zobrazeni dat podle oblasti
stisknutím 3 zvolite graficke zobrazeni vsech dat
stisknutím 4 zvolite graficke zobrazeni behu aplikace
stisknutím 5 zvolite zobrazeni teploty procesoru podle oblasti
stisknutím 6 zvolite zobrazeni průměrné frekvence procesoru podle oblasti
stisknutím 7 zvolite graficke zobrazeni teploty procesoru za cely beh aplikace
stisknutím 8 zvolite graficke zobrazeni frekvence procesoru za cely beh aplikace
stisknutím 9 zvolite zobrazeni Calltree""")
startmenuinput = int(input())
if startmenuinput == 1:
text_vypis_gui_input()
start_menu()
elif startmenuinput == 2 :
analyze_runtime_area_graph_gui_input()
start_menu()
elif startmenuinput ==3 :
pwd=os.getcwd()
graph_all([pwd+"/../DATA/LBMok+/Collide/1200000000_1200000000_12.csv",
pwd+"/../DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv",
pwd+"/../DATA/LBMok+/Init/1200000000_1200000000_12.csv",
pwd+"/../DATA/LBMok+/Main/1200000000_1200000000_12.csv",
pwd+"/../DATA/LBMok+/Propagate/1200000000_1200000000_12.csv"])
start_menu()
elif startmenuinput == 4:
pwd = os.getcwd()
graph_timeline_visualisation(pwd+"/../DATA/LBMok+/*/1200000000_1200000000_12.csv")
start_menu()
elif startmenuinput == 5 :
termp()
start_menu()
elif startmenuinput == 6 :
frequency()
start_menu()
elif startmenuinput == 7:
pwd=os.getcwd()
graph_term_all([pwd+"/../LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv",
pwd+"/../LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv",
pwd+"/../LBM_DEF/LBM_DEF/TEST_DEF/propagate/36.csv"])
#graph_freq_all()
#start_menu()
elif startmenuinput == 8:
# pwd = os.getcwd()
# graph_freq_all([pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/collide/36.csv",
# pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/d2q37-bench_static/36.csv",
# pwd + "/../LBM_DEF/LBM_DEF/TEST_DEF/propagate/36.csv"])
graph_freq_all()
start_menu()
elif startmenuinput == 9:
calltree_met()
start_menu()
else:
print("musis zvolit neco v rozsahu")
start_menu()
#start_menu()
#fukce jsou testovane na datech /../DATA/LBMok+/*/1200000000_1200000000_12.csv a /../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv
#proto se v nekterych fukcich nachazi open_static_36nebo12, v pripade potreby je mozne tyto funkce nahradit univerzalnimi funkcemi, viz. dalsi dva radky
#open_static_gui("/home/hynek/SGS18-READEX/DATA/LBMok+/d2q37-bench_meric_static/1200000000_1200000000_12.csv")
#open_static_gui_terminal()
#podobny priklad jako open_static_36nebo12 je automatic_open_files, ktery lze nahradit automatic_open_files_gui
#kde si uzivatel muze vybrat, jestli chce pracovat s pevne zadanymi cestami (/../LBM_DEF/LBM_DEF/TEST_DEF/*/36.csv), nebo si chce vybrat vlastni cestu
#data jsou prevazne ukladana do pandas
#z dat ulozenych v pandas se take vykresluji grafy
#pro vykreslovani grafu se pouziva matplotlib