From 2a7e8d641f90862f451cd8acee2381e507d02f5a Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 12 Nov 2024 17:45:25 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D0=B3=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20V=20=D1=8D=D1=82=D0=B0=D0=BF=D0=B0=20?= =?UTF-8?q?=D0=B2=20UML=20+=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B4=D0=BE=D0=BF=D1=83=D1=81=D0=BA=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20II=20=D0=B8=20II=20=D1=8D=D1=82=D0=B0=D0=BF=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B2=20=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/__pycache__/app.cpython-310.pyc | Bin 2754 -> 2862 bytes .../__pycache__/plot_window.cpython-310.pyc | Bin 8041 -> 7640 bytes src/gui/app.py | 6 +- src/gui/plot_window.py | 71 +++++++++--------- src/uml/__pycache__/creator.cpython-310.pyc | Bin 3022 -> 3187 bytes .../request_generator.cpython-310.pyc | Bin 4215 -> 4178 bytes src/uml/creator.py | 68 +++++++++-------- src/uml/request_generator.py | 1 - 8 files changed, 74 insertions(+), 72 deletions(-) diff --git a/src/gui/__pycache__/app.cpython-310.pyc b/src/gui/__pycache__/app.cpython-310.pyc index 00021ed885acc1c1fa38dcedb81db9115ede6aa1..6546faabddf825d3b3efa65a56cfd67ac38361cc 100644 GIT binary patch delta 523 zcmX>kx=xHYpO=@50SHbc8K*zn$g9T`zzXC!197n$kf>qIVyI=RVM<|?WB`&(K$39* z<3bRdS&|{0rIxvdIha9{#qSndNpenpaq2DBlJuhd@>`rGx%p+Oxv6<2ldG8G8D%El zV$$IP*#tIPZnFS08>6Uj4MUbF5Q_t`G!RRs@b_{|R%Z#asZuQ|N=#0TFHX!Y$Vn~M zH!?6Xi8nNiH?Yt(w2U`4h&MITOD-;3$#jc9zaX_Ju_V7JJ~=-xEi=7Hdh!I8U2M`o ztBNEi2e9f1YjPCHf_PvdL5O$)hxp{htUDQ{CdabPVRV`Ni_MvZg^}y$WP5gHgfn|4 z=df1@asXY%1H`;Q%$LFpbm2#KF-FPBKr~%+Sd^Gs zT%-b$)CLi%Ac74fMti>Zf`88(~qt)a* QE^p2NE=D#+9!8eG0PD|r8vp5Qlf~E_dFVO9*OSDk#Rt`G|rj_(IfD45EUSgpkBjQBU>)S|lJ=qNJKO zg_bE4#6q#O^iR0fMzFFK1ZN`Z!tdMJS@xT~jXrl+u4M^^>tJi#S-i6{%DjfBC5+dD zsPH{jRVqr6Cm2#e@+*GL9JQ)e)OBX7Szj*~_Fb>!2g;6gkKt0u@hH42!@~SECGUGx zokuzn` QdC8fvQmY474BwloASr7R$|ELK-Jd)|ZyT zS*A^S6p)}=#8aR|;s;2GKM@j-UkD)({NV8mo%jP1f(Qxm6UuYuoW87r#98~z-0bYm z?A*+(m$rSqC0>cgEd`$^$FCflIURq~a`0sbj_M1iKU`baT_dM(!;NqgM-+$UnxhVn zar>k;9OZGIIH?Rk9cPNG4z}j1`cz2CYaVek&Hp*wAUq2ios!CXOY`kWlXIle2Zqdh4M>qsFB3{$odICiG`ytXb04q zQ){WEFo)XabH1|xfSDEYEf?^q1*n5ELoR5c3t!{*Xq*hyTK~hHRv&*CnN9pZvt)JV z04B4l6q53EV%yG@7~dr-p{2j^8QU<}{?m7x^4rHyg3pg<8Er=)FFH^n+6lr$SF5v= zqFerw=(cyGFwpkx*|k&j$oAxVy_2-M9at<6y^z7mumNj?*^tLdX}sIO9%kRjr<^_O_Twf65WPf}3k8bJ zCOOW&w)m&B2I3S!aWBFfOiasx)G6qa@25ITVNCRqO1UDc;o-$3Y5rS96e5kTAV{f# zFsx#QV;#+kBW|<#yUE<*w$@WnUyJOLNsGt_aSS2Q9w?5wL*gM4kb6s1MI@bc1MLXT ziG!iw2ns}zSQy2wL|WoF!3hF7fS4noPuK81EM=*J8+WTC-o4rv!oqPNmidPs#%mMPGV2Burnu7B* z$-)SYkdh@Fxi_D_YMR8PKdibl0|Xl}cgLC{5X6d;r3se~;)-wO3;Ff+2(CH%P@AVO z8uqOMOsL@pHCo;DxBZWL)%e48+fmtrmM+dk$zHpf^< zlYSzG7cQE2{A5U5e0?6TSlY#RXbm<&10~_Ue#^4NJg?KHEL=}Y(ep|uLdi@&_E!Vl zFnxUiLTW5ibD2i*p4Jv3csuL2$|u?fS7W#uNgt+FAsVP}1V4;_kLV|LN{!3M_MKF~FFp~kh;%~;-Urc3x>Kgll yMcD65XJ?qfeq*NftC==enNc%t4w@0uF*9aLe%`qUcFSy6w{t!K4I^?-SMNW>g)t=n delta 3075 zcmb7GO>7&-72cWs;qLOEQYbQ%Z2h{T9k`GaAWodhuANkgW4pGa#0?{tp*Smo5`U!G zmF%R;(y1H)LVkdBf*?SEfVu<~+Fs(KMS=oFQlOXIf*#U6w6~%@_|Rj1TKBynWxGUr z=q~1aZ{N(mc{A^4=8I!DXQRz%)K=i33lCOadn@`YI|d&opt+s5{y5#%S;*0u3C(hh zr5LkW__|gIu?UM^R|+PJu{cnRC0G)u%~EUtXqXMM`+!DRnhgPsvJA@tjj{V#4rrVW zvk{;PwvX)xnq;GF3}}jtvk9OBZ1Nc;KNZ+wk>tsv;&n0=>*zZQQG8|DSPpee@jEg` zEb$jIkxUdTj`tLEO11fFz1pa_;%jn&q{LZzJ{*CCM2G>eDL$ab#4UQLZGvp?L0*M+ z3YvQwz*l{xsQ4Nn@pVAz8-S`G0@OU+CyZp3O#)wrPZ`aEMMdcAm|g2S7E-2w`Rchs z{MoZ-ie9zu6y0*E=I}z)tBPGUoX*?afZ6yELIxoVAOdyb07sjHNO66Yl|1Kst?9XW zlP7V^eF$j;Lp-Ks9!w!CVF0)w-2J5p|CI(o;9{3y;_C5@5u2DdwzZEbiHXNUuS}0a zcb-bsfl({H)Li$v+U}_2Q5bSS+zNdbngDK|=fxk)<77tMHcuJSqzUn)H8c3%hVX}B z>}m0a^@{^XfeZ9<%_(vI2=M$E!ea>ELzqR#i5KjHS*fm1(SGQDM!avIXj9;HXwp$9 zfPp|zmPw0r9Res_v8;6Hjsjn5R;i#9!JQxjZdqkoR@p(v>C!#=xq{)9YfaZF=w5|4 zuM{k=-rR8NPQ$xNV1~RQeN>?HZebt{F?P1ZSAMwaGyuRLi!dxt`1445K}(ALJB|w9x$$Q5J0yxL$m79+~Mrqv%v<>LvKbC?G5bzg~B};jW<0$?U1Rntx!CMHp z0{&A3nOc}td*$NcH53;RUP0JIxQ_5D!WKfGQz{_)<&ALq61o2xcH{m@yT2l%uXAbulk`?Ir zM9gKLY^%WSJ(x`)XfiY21_sKn!iYz@1$h&)AM%}IzB7GCUr<|WOKU+fUsj{r`zKGuw~I6vL>7yu{GR zhja$7gT3$2H^c7|5d!3J=8}3 z?>%_%VTQ?A*n;}$f&U-^2$aWhU&B*@sY7s}OHPxV4l*r+GUU_@oD^`5(C!O7g-8M& z7*CsIMdgP*%8X6&GvYzv-6U-m%E3KhP-z(zr4@o^LbIUR9!%5yndup2lRmCoUTTHA zlS5dAv&stLzwUC~>G!^wKBT~1LXOEOtq2$s?#Y15DjMI)E~?z^a}ibDtPsTzks5QJ78UWQXUFz+Nt zL+s`bl2!5N-1M2g68Ad%@^@(N5r7DJ0Hd9n5b;{?P18{_NC!!pnDE-rm+HOrnwTBF z*dD}5HC8QqfwtIe*7zt0 list[float]: data = opt.Ts - ideal_time = [data['tclose'], data['tgrow'], opt.getMarkOpen()] + ideal_time = [data['tclose'], data['tgrow'], opt.getMarkOpen(), data["tmovement"]] return ideal_time def _load_preset(self): @@ -21,7 +21,7 @@ class app: self.system_params = read_json("params/system_params.json") self.parser = DiagramParser(system_config=self.system_params) - self.parser.setData("") + self.parser.setData("trace_samples/2024_11_08-19_30_52.csv") #trace_samples/2024_11_08-19_30_52.csv @@ -51,6 +51,7 @@ class app: self.plotter.update_data(operator_config=self.operator_params, system_config=self.system_params, opt=self.opt_algorithm, + ideal_time=self.ideal_times, bool_dict=self.bool_dict, float_dict=self.float_dict, mode = self.mode, @@ -75,6 +76,7 @@ class app: system_config=self.system_params, opt=self.opt_algorithm, bool_dict=self.bool_dict, + ideal_time=self.ideal_times, float_dict=self.float_dict, mode = self.mode, timings_dict=self.timings_dict) diff --git a/src/gui/plot_window.py b/src/gui/plot_window.py index 1f4d6a4..a4c4e8e 100644 --- a/src/gui/plot_window.py +++ b/src/gui/plot_window.py @@ -12,7 +12,6 @@ class PlotWindow: pg.setConfigOptions(antialias=True) self.alpha = 100 #[0-255 прозрачность фона] self.opt = opt - self._getIdealTimings() self._init_ui() self.settings_button.clicked.connect(show_settings_func) @@ -21,6 +20,7 @@ class PlotWindow: system_config : dict, operator_config: dict, opt: OptAlgorithm, + ideal_time: list[float], bool_dict: dict, float_dict: dict, timings_dict: dict, @@ -29,10 +29,11 @@ class PlotWindow: self.bool_dict = bool_dict self.float_dict = float_dict self.timings_dict = timings_dict + self.idealTime = ideal_time self.theor_mode = mode self.scaler = int(system_config['UML_time_scaler']) self.WeldTime = operator_config['time_wielding'] #[sec] - self._getIdealTimings() + self.WeldData = self.opt.calcPhaseGrow(self.idealTime[1]) self._updatePlots() def _init_ui(self): @@ -92,10 +93,6 @@ class PlotWindow: self._plotRealData() self._form_idealdatGraph() - def _getIdealTimings(self): - data = self.opt.Ts - self.idealTime = [data['tclose'], data['tgrow'], self.opt.getMarkOpen(), data["tmovement"]] - self.WeldData = self.opt.calcPhaseGrow(self.idealTime[1]) def _form_idealdatGraph(self): @@ -146,7 +143,24 @@ class PlotWindow: time_data.append(time+item[1]*self.scaler) self._plotIdealData(np.array(time_data), np.array(item_data).T) self._addBackgroundSplitter([item[1]*self.scaler,item[1]*self.scaler + time], color_closure) - + + elif key == 'welding': + x = [time_data[0], time_data[-1], time_data[-1]+0.0001] + y = [item_data[0][4], item_data[0][4], item_data[0][4]] + a1, b1, c1 = self._calculate_equidistant(x, y, 0.75, 3) + self.p11.addItem(a1) + self.p11.addItem(b1) + self.p11.addItem(c1) + + elif key == 'compression': + temp = item_data[-1][4] + x = [time_data[0], time_data[-1], time_data[-1]+0.0001] + y = [temp, temp, temp] + a1, b1, c1 = self._calculate_equidistant(x, y, 2.5, 3) + self.p11.addItem(a1) + self.p11.addItem(b1) + self.p11.addItem(c1) + def _returnWeldData(self, _): return self.WeldData @@ -207,17 +221,6 @@ class PlotWindow: self.p12.setYRange(-50, 250) self.p13.setYRange(-400, 400) - def _addEquidistances(self, times, data): - a1, b1, c1 = self._calculate_equidistant('fill', max(data[4]), 2.5, self.x_splitter[1], 3) - self.p11.addItem(a1) - self.p11.addItem(b1) - self.p11.addItem(c1) - - a1, b1, c1 = self._calculate_equidistant(times, data[4], 0.75, self.x_splitter[2], 3) - self.p11.addItem(a1) - self.p11.addItem(b1) - self.p11.addItem(c1) - def _makeFiller(self, x1, y1, x2, y2, color): alpha = self.alpha @@ -227,11 +230,7 @@ class PlotWindow: return eq1, eq2, bg - def _calculate_equidistant(self, x, y, percent, splitter, color): - if str(x) == 'fill': - x = [splitter[0]+0.001, splitter[0]+0.002, splitter[1]-0.002, splitter[1]-0.001] - y = [y, y, y, y] - + def _calculate_equidistant(self, x, y, percent, color): if len(x) != len(y): raise ValueError("x и y должны быть одного размера") distance = max(y)/100*percent @@ -241,19 +240,17 @@ class PlotWindow: y_eq2 = [] for i in range(0, len(x) - 1): - if splitter[0]<= x[i] and x[i] <= splitter[1]: - - dx = x[i + 1] - x[i] - dy = y[i + 1] - y[i] - length = np.sqrt(dx ** 2 + dy ** 2) - sinA = dy/length - sinB = dx/length - - nx = -sinA*distance - ny = sinB*distance - x_eq1.append(x[i] + nx) - y_eq1.append(y[i] + ny) - x_eq2.append(x[i] - nx) - y_eq2.append(y[i] - ny) + dx = x[i + 1] - x[i] + dy = y[i + 1] - y[i] + length = np.sqrt(dx ** 2 + dy ** 2) + sinA = dy/length + sinB = dx/length + + nx = -sinA*distance + ny = sinB*distance + x_eq1.append(x[i] + nx) + y_eq1.append(y[i] + ny) + x_eq2.append(x[i] - nx) + y_eq2.append(y[i] - ny) return self._makeFiller(np.array(x_eq1), np.array(y_eq1), np.array(x_eq2), np.array(y_eq2), color) \ No newline at end of file diff --git a/src/uml/__pycache__/creator.cpython-310.pyc b/src/uml/__pycache__/creator.cpython-310.pyc index 103e6c4c8ec0f013de3fe1a8af09b1e6f539dca4..beffd91c87d68a11473bd4db676ee9daeabfc010 100644 GIT binary patch delta 1301 zcmZ`%&u<%55PtLa?GLZlo7l0lahj$k392GcDMbM_1*tR~IFzbV0!4_bay{;1*x1S2 z4Un)VNCj~!9NrBHYM(eF{s8_1)KgDBbE(u@4^$jb=WRERfwHUjX=c7}X5Q1xz2MQD z-z$||M&BO368>KP)&B)fd*p7=iGSjZg{%*Bc*;Iz@sETs;6wHnyZ*iU1J-%pR1IE- zmRjduZlwlVpK$p@$_Hj@p{O&`TUCZmz|af%5P+s@Q#P*X!=8zbr9g%>RG(v8EF8!*Pq!xcRYw9yaD@ zp21U-u+Zn|=a+(zWA*s@Sj%mL;lPJjRlD!d9+n1%{CdkN$b;m8kd+M$mEYdn2)ZTsP@&;uk zJ$Ytt2b)Rz#@=?c%H^`U@2)M4FEJAO2_q48;zYiX^}5;XMRG$8ih;URtij9b{o-T-{&3kWl=Uef;@78iTi^$*c z?F*H+-fQ<2jH8~Dt8tGKQXx%{i^gP&H1;LJA#IZzL@he7C&w3OpIGw^ppEA=xRLJHT@aZZ$!r=c;#dW_>4 z8*Gu3ieif`X%+l3M3mH7@rljTk}0;;1@TTj2YK;Tox62YMj0^BAWsWW01xtD&@m{& z7##xogMMeOqd3t0up`IG!vGAz2#ms6C<8lkE%8jdJbMuc*>A}i$RV@|;A^9e9xzE9pj?J6%CL zRx*{t!z~d`76~JfyY~V}(+0BdMm;=Ti_V0kjj{v^mUwOsGmpAdyfLr)gP2s5(6N#N zD|~Y;3VVfPy}aM|I~GnO>qYP|RoUE;olq7Kh7qtu$q6;&lL%7?S^2IKmxOHx)1w&H zGcY9USi6t;YP7zxyIs92bpwy6nVP&-__$z!r-)@+-WaiGPmE@LI}E4pui(hU52tawx9e2Opx7w diff --git a/src/uml/__pycache__/request_generator.cpython-310.pyc b/src/uml/__pycache__/request_generator.cpython-310.pyc index ac7134b483b3c6e977432b9445c92768aa14d9f3..5e2212c7c3b38439df2f082cfb441c8de8e54a91 100644 GIT binary patch delta 96 zcmeyaa7lqTpO=@50SH2pjMFVP@=9|vPMEC8-OrZ75X_*-HTe{`^<){IP%$B(5*|i2 xMjl2XMhQkaMm``*fN63k&veG1&5FFHjEr%U!}+!`hHmEL=VxT(nJgy|2>`<467>K8 delta 134 zcmcbl@Lhp7pO=@50SJ=*8K&oMm4c#3;ci$H)g{@h}N6 kPEO&O&KSJ;505D$WBgdK+0Nd;#2><{9 diff --git a/src/uml/creator.py b/src/uml/creator.py index 70c1774..fba64f7 100644 --- a/src/uml/creator.py +++ b/src/uml/creator.py @@ -14,7 +14,7 @@ class UMLCreator: for key, items in self.timings_dict.items(): if key == 'closure': ideal_time = self._ideal_time[0] elif key == 'compression': ideal_time = self._ideal_time[1] - elif key == 'welding': self.WeldTime + elif key == 'welding': ideal_time = self.WeldTime elif key == 'opening': ideal_time = self._ideal_time[2] for item in items: @@ -23,9 +23,23 @@ class UMLCreator: ideal_data.append([item[0]*self.scaler+0.0001, str(key) + '#yellow']) ideal_data.append([(item[0]+ideal_time)*self.scaler, '{-}']) + if key == 'opening': + ideal_data.append([item[1]*self.scaler+0.0001, 'coming #yellow']) + ideal_data.append([(item[1]+self._ideal_time[3])*self.scaler, '{-}']) else: real_data = [] + ideal_data = [ + [0.0, 'closure #yellow'], + [self._ideal_time[0] * self.scaler, '{-}'], + [(self._ideal_time[0] + 0.0001) * self.scaler, 'compression #yellow'], + [sum(self._ideal_time[:2]) * self.scaler, '{-}'], + [(sum(self._ideal_time[:2])+ 0.0001) * self.scaler, 'welding #yellow'], + [(sum(self._ideal_time[:2]) + self.WeldTime)*self.scaler, '{-}'], + [(sum(self._ideal_time[:2]) + 0.0001 + self.WeldTime) * self.scaler, 'opening #yellow'], + [(sum(self._ideal_time[:3]) + self.WeldTime) * self.scaler, 'coming #yellow'], + [(sum(self._ideal_time[:4]) + self.WeldTime) * self.scaler, '{-}'], + ] client_data = [ [0.0 * self.scaler, 'closure'], @@ -38,43 +52,34 @@ class UMLCreator: [0.300 * self.scaler, '{-}'], ] - ideal_data = [ - [0.0 * self.scaler, 'closure #yellow'], - [self._ideal_time[0] * self.scaler, '{-}'], - [(self._ideal_time[0] + 0.0001) * self.scaler, 'compression #yellow'], - [(self._ideal_time[0] + self._ideal_time[1]) * self.scaler, '{-}'], - [(self._ideal_time[0] + self._ideal_time[1]+ 0.0001) * self.scaler, 'welding #yellow'], - [(self._ideal_time[0] + self._ideal_time[1] + self.WeldTime)*self.scaler, '{-}'], - [(self._ideal_time[0] + self._ideal_time[1] + 0.0001 + self.WeldTime) * self.scaler, 'opening #yellow'], - [(self._ideal_time[0] + self._ideal_time[1] + self._ideal_time[2] + self.WeldTime) * self.scaler, '{-}'], - ] + return real_data, client_data, ideal_data, self.bool_dict def _generate_svg(self, real_data, client_data, ideal_data, bool_data) -> None: - try: - self._request_generator.clear() - - if not self.theor_mode: - self._request_generator.addLineStyle('biba', 'red', 2) + + self._request_generator.clear() + self._request_generator.appendStr('scale 25 as 50 pixels') + + if not self.theor_mode: + self._request_generator.addLineStyle('biba', 'red', 2) - for i, [signal, changes] in enumerate(bool_data.items()): - name = 'bool_' + str(i) - times = [] - for f in changes: - times.append([str(float(f[0])*self.scaler), f[1]]) - self._request_generator.addBinary(name, str(signal), 'biba') - self._request_generator.setTimestamps(name, times) + for i, [signal, changes] in enumerate(bool_data.items()): + name = 'bool_' + str(i) + times = [] + for f in changes: + times.append([str(float(f[0])*self.scaler), f[1]]) + self._request_generator.addBinary(name, str(signal), 'biba') + self._request_generator.setTimestamps(name, times) - self._request_generator.addConcise('RD', 'Real data') - self._request_generator.setTimestamps('RD', real_data) - - self._request_generator.addConcise('CD', 'Client data') - self._request_generator.setTimestamps('CD', client_data) - self._request_generator.addConcise('ID', 'Ideal data') - self._request_generator.setTimestamps('ID', ideal_data) + self._request_generator.addConcise('RD', 'Real data') + self._request_generator.setTimestamps('RD', real_data) + self._request_generator.addConcise('CD', 'Client data') + self._request_generator.setTimestamps('CD', client_data) + self._request_generator.addConcise('ID', 'Ideal data') + self._request_generator.setTimestamps('ID', ideal_data) + try: self._request_generator.generateSVG() - except Exception as e: print(f"SVG generate error: {e}") @@ -95,6 +100,5 @@ class UMLCreator: self.scaler = int(system_config['UML_time_scaler']) self.WeldTime = operator_config['time_wielding'] - real, client, ideal, bool_ = self._build_data() self._generate_svg(real, client, ideal, bool_) diff --git a/src/uml/request_generator.py b/src/uml/request_generator.py index 3d0fe61..a470f25 100644 --- a/src/uml/request_generator.py +++ b/src/uml/request_generator.py @@ -78,7 +78,6 @@ class Request: self.reqArr.append('}') self.reqArr.append('') - self.reqArr.append('scale 10 as 50 pixels') def _addVariables(self): for var in self.variables: self.reqArr.append(str(var))