From ac502c5fdf57684156fa0943f93c5f167261378d Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 11 Nov 2024 13:05:18 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=20=D0=BE=D0=BA=D0=BD=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=20=D0=B8=20=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/__pycache__/main.cpython-310.pyc | Bin 0 -> 407 bytes src/gui/__init__.py | 3 +- src/gui/__pycache__/__init__.cpython-310.pyc | Bin 251 -> 276 bytes src/gui/__pycache__/app.cpython-310.pyc | Bin 0 -> 2366 bytes .../__pycache__/plot_window.cpython-310.pyc | Bin 7080 -> 7454 bytes .../settings_window.cpython-310.pyc | Bin 0 -> 2319 bytes src/gui/app.py | 71 ++++++++++++++++++ src/gui/plot_window.py | 47 +++++++++--- ...settings_windows.py => settings_window.py} | 30 +++----- src/main.py | 39 +--------- src/uml/__pycache__/creator.cpython-310.pyc | Bin 3188 -> 3341 bytes .../request_generator.cpython-310.pyc | Bin 4178 -> 4178 bytes src/uml/creator.py | 14 +++- 13 files changed, 135 insertions(+), 69 deletions(-) create mode 100644 src/__pycache__/main.cpython-310.pyc create mode 100644 src/gui/__pycache__/app.cpython-310.pyc create mode 100644 src/gui/__pycache__/settings_window.cpython-310.pyc create mode 100644 src/gui/app.py rename src/gui/{settings_windows.py => settings_window.py} (66%) diff --git a/src/__pycache__/main.cpython-310.pyc b/src/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4de2b3b108740991e288b7e93ad7e06b1587bbe9 GIT binary patch literal 407 zcmYjNu};G<5cN538me|?;Rmu*DkDM&MCYog1CkZVvSJgW#))xUi4IKVL+HQ&AHIe)>%xv5(~mk&fitg-eIssw$?w_xESr~7IBnZZ&azuw zDePa_#xJ$IYn+jFuCvzVnUQ5ZwcCz`AT+lz(g03;P{abHidZJ@_2mGuco+m20sPY#iU0rr diff --git a/src/gui/__pycache__/app.cpython-310.pyc b/src/gui/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e463f2d38ae7fc5543a0ff1f2e535f12ceab85a GIT binary patch literal 2366 zcmZuy&2QX96!+L(uh;8MHlYMX2q+(g?xFc8l~7xR`Vql}rh$MeS&>F&XR_VYUc2Mj zhOW|6dd;0#xPwtmK!hV$<|GVXH*<3@@p3=$8R@;Okq1eTHp$O|V9{$|^D^rFA8zO&hLO-spC z@V%-Sna;*A9jG+lN>wElY|S6#)3L0yiGF_Y{e3v)~in)pDPfx%f07+`*`Bfk=D!#1%}qFP+2_p7ez;8!}jSc74$h!An1B zilzu*4Mj^t__joQ+v&x|OUts)Fw68I-p9C)QQZO2&Y^SQaHj17M-05Dec=iJz}agY zdXNLiSY{?S51ixBM#{k=&CSV`$6A-SR#*4;_gBg+9qDnNt@Mk0btI6k)7(ic%_y8L#CPigFS@Jl9T^&)ur$m6rKMClhR2U9Y7GF(!Z~=2vt) zv!Lp%@PQoF^Q(~bT|O>FswJPMz{IqH?em0~HrAO5G0zI*y;Kt3r_A`3%yv&5^$uqG z=f=jZ9bkbgSynsg`pzSn3FLIUEcBLCyM@ZrQD5#IUkOOnsX|F zib&|jtm}4J>`r2GnmQP-D76Wc)MGX3yYQSobii2-FGDzBd(I2@02y3%KwVIF%ubwv z_rg2ykRxx?1iGIUl{5`KP{lp~>Hbui_CV?fsd|EFk9xjZ#9V3##Q2C&YNDZ#X~y+1 zm-fsxxkL_&2(0EaJAs+>RR9vOCFZlql0D5EZg0S`iC-)ne*>dYdWQr;2F|sds{z72 z==NOU9l5Xpn#T>u{t0;!Fq_ArfW!c0@U0VqbY%Iq$M2pVRY@ zF!Np)gXXKPfweA(bC{nacJ*zDo#J%$O`M*(W`6cdzZmTf2c~oGR*RFXTBUtpGR@0O zR;$<7uHWG6>wInf+S*P2UT~owhOcA?ez)tjkKFe>UD~?Y1-%-yk9p^wLogBvsai?U5LvV z)#o4)i`b$&hq8%T%mUX3X7D?JfYduwIRFL0!8_-D zO>iTPFPMcOKyr*exEELmhTvKjGz6_S25Dl9j&P3}7M62+Q;?AlfvmQBWVaCWH`Pbj zgStZG6Odk4&EaEO2;!FQmWqz9=81ekgp#DL5~0+n9+4H0Bsy<%h^dY4tNg2Lup`)Y z8>Bk#xwi5RM{t$nIay|VjY}Cvsg!GlS?+%ul3i>UPMiAl;)Ci6LFpw zVw@2lbN+OkX0=7Vixq0j`PmS+X~TlKJ{Bcj(Oxd>&tijGj%tC>sJp2XvZW|&#P3-> zEuE*s5$8!r7ckwry+zY1pFc$(Ov}f{EeA;pO?qXlhgoGy!(Jyz(<%`@YPA-orc0`e z_qyG1?TH?5k!`OTySBQHA5D-y`QdI^8Xvb8sQgv--*yTUeq9IV8@iz@D(%p**8=OZ OIWN2&u>kS+|NRf6ZdXJA literal 0 HcmV?d00001 diff --git a/src/gui/__pycache__/plot_window.cpython-310.pyc b/src/gui/__pycache__/plot_window.cpython-310.pyc index e69291221ea3c61edc822364d65fa8fa1760f8f4..f11f54c369719dca578b47f0625647f3f5146034 100644 GIT binary patch delta 2314 zcmZ`)O>7%Q6yBNr@p{*God4KvnuPw)&7q1Lpg&6K547oTO4GEoThwLiSyH=>>y9_H zsf=7ik>HR+H3CtAkRvz%mm>L!gnB{Z!T|}S?u9Eo6u5BV|GjnUx-MO7zIpTZ`OSOZ zdo%ml){l22F2&=91kaftvh&GJHxnO{`pqxKGsKe_g&}(iQ(#s-`89*-EP6w^d3P?x zMs7%UHyb@6Sz{tgKHACDs^sWZsUBUChy=5NGn2qTo0+qS9d%27-Yw?cO3-!k=n==y zFL+KR=N3I42!qaQs#`2yaK%|VOg3o(HJP5SLU{07(^Nq`q7wjHINu2&|MUWi$oxI`FQp zt;QZ{#V*fqWT(bWKuhNln7ED*MMxlYAtVuc0D_paSZ1#8VW<_}hx&mQ45EeEG;qMm zT?2{=y3sU^Xe2=lq7%q;pe@tIaugkg_F_a%*M0$eUn)Qvj52wdVp>(HKMLlk!H9%b`fAcDGg*wq+iap>V|3UgSQo1$+l)*winSXR zqV+hewdU3Z^O2QSNU&}QyJxu>WVB;#KDw@VwJOm&GZ#n}wUx>Ru}^tVOY%6dAnq$~ zPV*E<7UBIcb#TplK{pPgvKAl-{KiO{8giO6M}j6uk|s%##HjdEeLsTrnBybjsJ4qd zC6=`@5*N3%F)j4HM*OIat+$mjl-7(@*q_!mOfm9DW(bwxyMpmHM8R-q^+PWdGM}{_kVGaQ^;3pCOw|e4OcXq0cF*L*=_`^-Z{iadZ#w0GE0eH9ZRrfMUpT>17jX%h! zMfp+G&4^sDReMPAF;wnCcv8ec*ZzF5xYzTqcwPx<50u&Iy?fdc2|Ey*&yH3+|IDmg zn)fWTc{ICGEiX-EZDnb~$?{XM4ush^+}9Dj4KG$2Q++D2kjr@(@F=@O-b12SRX^_v z6SLG{KpamGi0l2@?l6HCvzFG}yV-N##inl7rsrYg9y_{c;eA7V)BklXY(T6!Tr0?x z72z0tCo$(x7uM53BO~0)rdPrH5{#=`VBW$Hp;a?^?{e0bz006KKi^TZz;qVeiyji} zQGTbP4Sr9EEA9?u$Tso&&>k&@Znlf5)SAON5CfGXxg6^Ux8h~)^WA8{5b(fQz0K4| zQ85M(M9Ln|c_rW0E9GL|_dU)JiBD4FwW+fT=ix8k3M1{19#Ke7)P~Sc8le{f z@44{i4L^H4>~uUqVe4@$AxA!&@u07^e8YO_E|Fm L@lIw~rakh1$4$u= delta 2001 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 list[float]: + data = opt.Ts + ideal_time = [data['tclose'], data['tgrow'], opt.getMarkOpen()] + return ideal_time + + def _load_preset(self): + self.operator_params = read_json("params/operator_params.json") + self.system_params = read_json("params/system_params.json") + + self.opt_algorithm = OptAlgorithm(operator_config=self.operator_params, system_config=self.system_params) + self.ideal_times = self._get_ideal_timings(self.opt_algorithm) + + self.parser.setData("trace_samples/2024_11_01-09_39_17B00.csv") + self.bool_dict = self.parser.getBoolDict() + self.float_dict = self.parser.getFloatDict() + + self.plotter = PlotWindow(operator_config=self.operator_params, + system_config=self.system_params, + opt=self.opt_algorithm, + bool_dict=self.bool_dict, + float_dict=self.float_dict) + + self.uml_creator = UMLCreator(system_config=self.system_params, + request_generator=self.request_generator, + ideal_time=self.ideal_times, + bool_dict=self.bool_dict, + float_dict=self.float_dict) + + def _update_settings(self, _): + self.operator_params = self.operSettings.getParams() + self.system_params = self.sysSettings.getParams() + + self.opt_algorithm = OptAlgorithm(operator_config=self.operator_params, system_config=self.system_params) + self.ideal_times = self._get_ideal_timings(self.opt_algorithm) + + self.uml_creator.update_uml(system_config=self.system_params, + request_generator=self.request_generator, + ideal_time=self.ideal_times, + bool_dict=self.bool_dict, + float_dict=self.float_dict) + + self.plotter.update_data(operator_config=self.operator_params, + system_config=self.system_params, + opt=self.opt_algorithm, + bool_dict=self.bool_dict, + float_dict=self.float_dict) + + +if __name__ == '__main__': + pg.mkQApp("Plotting") + temp = app() + pg.exec() \ No newline at end of file diff --git a/src/gui/plot_window.py b/src/gui/plot_window.py index ee0171e..ac3af8b 100644 --- a/src/gui/plot_window.py +++ b/src/gui/plot_window.py @@ -2,6 +2,7 @@ import pyqtgraph as pg import numpy as np from src.gui import qt_settings as qts + from src.OptAlgorithm import OptAlgorithm @@ -18,14 +19,27 @@ class PlotWindow: self.float_dict = float_dict self.scaler = int(system_config['UML_time_scaler']) self.WeldTime = operator_config['time_wielding'] #[sec] - + self.alpha = 100 #[0-255 прозрачность фона] self._getIdealTimings() self._init_app() - self.alpha = 100 #[0-255 прозрачность фона] + + def update_data(self, + system_config : dict, + operator_config: dict, + opt: OptAlgorithm, + bool_dict: dict, + float_dict: dict): + self.opt = opt + self.bool_dict = bool_dict + self.float_dict = float_dict + self.scaler = int(system_config['UML_time_scaler']) + self.WeldTime = operator_config['time_wielding'] #[sec] + self._getIdealTimings() + self._updatePlots() + def _init_app(self): - self.app = pg.mkQApp("Plotting") self.win = pg.GraphicsLayoutWidget(show=True, title="") self.win.resize(1000,600) self.win.setWindowTitle('') @@ -50,16 +64,25 @@ class PlotWindow: self.p12.setAutoVisible(x=False, y=True) self.p13.setAutoVisible(x=False, y=True) - def _init_graph(self, title, Yname, Yunits, Xname, Xunits): - p11 = self.win.addPlot(title = title) - p11.showGrid(x=True, y=True) - p11.setLabel('left', Yname, units=Yunits) - p11.setLabel('bottom', Xname, units=Xunits) - legend1 = pg.LegendItem((80,60), offset=(70,20)) - legend1.setParentItem(p11) - return p11, legend1 + self._updatePlots() - def updatePlots(self): + def _init_graph(self, title, Yname, Yunits, Xname, Xunits): + plot = self.win.addPlot(title = title) + plot.showGrid(x=True, y=True) + plot.setLabel('left', Yname, units=Yunits) + plot.setLabel('bottom', Xname, units=Xunits) + legend1 = pg.LegendItem((80,60), offset=(70,20)) + legend1.setParentItem(plot) + return plot, legend1 + + def _updatePlots(self): + self.p11.clear() + self.l11.clear() + self.p12.clear() + self.l12.clear() + self.p13.clear() + self.l13.clear() + self._plotRealData() times = np.arange(20000)/10 self._plotIdealData(times) diff --git a/src/gui/settings_windows.py b/src/gui/settings_window.py similarity index 66% rename from src/gui/settings_windows.py rename to src/gui/settings_window.py index 48e0616..57a6908 100644 --- a/src/gui/settings_windows.py +++ b/src/gui/settings_window.py @@ -1,20 +1,20 @@ import pyqtgraph as pg from pyqtgraph.Qt import QtWidgets -import pyqtgraph.parametertree.parameterTypes as pTypes from pyqtgraph.parametertree import Parameter, ParameterTree from src.utils.json_tools import read_json, write_json class settingsWindow(QtWidgets.QWidget): - def __init__(self, path: str, name: str): + def __init__(self, path: str, name: str, upd_func): super(settingsWindow, self).__init__() self.settingsPath = path self.name = name - + self.data = {} self.params = None self.load_settings() - self.init_ui() + self._init_ui() + self.params.sigTreeStateChanged.connect(upd_func) def load_settings(self): self.data = read_json(self.settingsPath) @@ -28,10 +28,10 @@ class settingsWindow(QtWidgets.QWidget): params.append({'name': str(key), 'type': type(value).__name__, 'value': value}) return params - def init_ui(self): + def _init_ui(self): temp = self._getTreeStructure() self.params = Parameter.create(name='params', type='group', children=temp) - self.params.sigTreeStateChanged.connect(self.change) + ParamsTree = ParameterTree() ParamsTree.setParameters(self.params) @@ -41,20 +41,12 @@ class settingsWindow(QtWidgets.QWidget): self.setLayout(layout) self.show() - - def change(self, param, changes): - print("tree changes:") - for param, change, data in changes: - path = self.params.childPath(param) - if path is not None: - childName = '.'.join(path) - else: - childName = param.name() - print(' parameter: %s'% childName) - print(' change: %s'% change) - print(' data: %s'% str(data)) - print(' ----------') + def getParams(self) -> dict: + self.data = {} + for p in self.params: + self.data[p.name()] = p.value() + return self.data if __name__ == '__main__': app = pg.mkQApp("Parameter Tree Example") diff --git a/src/main.py b/src/main.py index 14346ab..fb91190 100644 --- a/src/main.py +++ b/src/main.py @@ -1,43 +1,10 @@ import pyqtgraph as pg -from utils import read_json, DiagramParser -from uml import Request, UMLCreator -from OptAlgorithm import OptAlgorithm -from gui import PlotWindow - - -def get_ideal_timings(opt: OptAlgorithm) -> list[float]: - data = opt.Ts - ideal_time = [data['tclose'], data['tgrow'], opt.getMarkOpen()] - return ideal_time - +from src.gui import app def main(): - operator_params = read_json("params/operator_params.json") - system_params = read_json("params/system_params.json") - opt_algorithm = OptAlgorithm(operator_config=operator_params, system_config=system_params) - ideal_times = get_ideal_timings(opt_algorithm) - - parser = DiagramParser() - parser.setData("trace_samples/2024_11_01-09_39_17B00.csv") - bool_dict = parser.getBoolDict() - float_dict = parser.getFloatDict() - - request_generator = Request(server_url='http://www.plantuml.com/plantuml/svg/') - uml_creator = UMLCreator(system_config=system_params, - request_generator=request_generator, - ideal_time=ideal_times, - bool_dict=bool_dict, - float_dict=float_dict) - uml_creator.update_uml() - - app = PlotWindow(operator_config=operator_params, - system_config=system_params, - opt=opt_algorithm, - bool_dict=bool_dict, - float_dict=float_dict) - - app.updatePlots() + pg.mkQApp("Plotting") + temp = app() pg.exec() diff --git a/src/uml/__pycache__/creator.cpython-310.pyc b/src/uml/__pycache__/creator.cpython-310.pyc index 7c1ed5bc199910fa04516a8bf76beaf9743ec8b7..858fb3105c08d688492e3ca05f77b5b1236d8d08 100644 GIT binary patch delta 650 zcmZ9J&ui2`6vs0^GP6l`d}iKz-}z2>^R@e;7fxC&-?8KMr}h0# zXBIv}`Rv(tgd|C^q$!cEWRa6n8@rM`^k*Ml(L+2kdV|#if?W-lop40E#D*+r)H5TSy+zqtWv58TgiHX63>jq^8?H(fI7G+Y(W39f; zpA5lJaBDbD@UKpZeq55DOL7ipeR6bodw9FnKpS}pi1weQHji(4L>U-V}3iMkq zLYMVN@9rvCs~+GyVA(==4IK+sTEu?cRs9}C zYlbSBEw7B}=!(7%M2Fv7nv#=jWBN0{QD*bRTws!>ctRH(gyzS>-E K|L>(mv-bxmjDZRO delta 576 zcmZvY&q~8U5XQ6l)7UmiRkYeFYC*w>2%Z!aJ$Mu8rJ@pq63tR7X`_=A6jH&HCxx;v zpeIkB`WE67L@&OBCsA;wMfBjp{&wfvnQw==DZYOb_*nJ2pX^a785jW7fR3@kFssy97;zMQC0y}|niC3?&e@?C4dV{BN2>B>YJ zl|(!CxeJNmdfraG$t%%?&tXoyrT1s3Ef^;h2t|aGJ_-WA>ba2%)8ZgA^|wuNm2q|% zX8kM;FDcwxxWidQEZs@>(xKXBZMm(qRg788VmVe~^MESI8+gXOuS?#%}GippxJ^@jjfeIQhL65x{*0-5`Inl zV None: + def update_uml(self, + system_config : dict, + request_generator: Request, + ideal_time: list[float], + bool_dict: dict, + float_dict: dict): + + self._request_generator = request_generator + self._ideal_time = ideal_time + self.bool_dict = bool_dict + self.float_dict = float_dict + self.scaler = int(system_config['UML_time_scaler']) + real, client, ideal, bool_ = self._build_data() self._generate_svg(real, client, ideal, bool_)