From c5339f95e9887402adfe9da9177728adda7a1462 Mon Sep 17 00:00:00 2001 From: leo Date: Mon, 23 May 2022 21:51:58 +0200 Subject: [PATCH] jit imports --- Car.py | 13 ++-- CarController.py | 165 ++++++++++++++++++++++++----------------------- Map.py | 13 +++- globalImport.py | 8 +++ 4 files changed, 112 insertions(+), 87 deletions(-) create mode 100644 globalImport.py diff --git a/Car.py b/Car.py index b96eb95..8fa1b49 100644 --- a/Car.py +++ b/Car.py @@ -1,14 +1,17 @@ import sumolib from math import dist, ceil, sqrt, log, cos, sin, atan2, pi from random import randint, uniform -from PySide6.QtGui import QPainter, QColor -from PySide6.QtCore import QPointF, Signal, QObject, Qt from itertools import islice import time +import globalImport -class updateSignals(QObject): - updateDisp = Signal(tuple) - addGraphPt = Signal(tuple) +def pysideImports(): + globalImport("PySide6.QtGui", ["QPainter", "QColor"]) + globalImport("PySide6.QtCore", ["QPointF", "Signal", "QObject", "Qt"]) + + class updateSignals(QObject): + updateDisp = Signal(tuple) + addGraphPt = Signal(tuple) class Car(): CLIGNO_NONE = 0 diff --git a/CarController.py b/CarController.py index 51d25ba..dd846d1 100644 --- a/CarController.py +++ b/CarController.py @@ -1,99 +1,102 @@ import sumolib from Car import Car from Flow import Flow -from carInfo import Ui_carInfo -from varEdit import Ui_varEdit -from PySide6.QtWidgets import QWidget, QLabel, QToolBox -from PySide6.QtCore import Qt, Slot, Signal, QThread -from PySide6.QtCharts import QChart, QSplineSeries, QLineSeries -from PySide6.QtGui import QColor from math import ceil, dist +import globalImport -class carInfo(QWidget): - def __init__(self,parent): - super().__init__() - self.ui = Ui_carInfo() - self.ui.setupUi(self) - self.maxV = 0 - self.parent = parent - self.pointsCount = [0] * 4 - self.minX = 0 +def pysideImports(): + globalImport("carInfo", "Ui_carInfo") + globalImport("varEdit", "Ui_varEdit") + globalImport("PySide6.QtWidgets", ["QWidget, QLabel, QToolBox"]) + globalImport("PySide6.QtCore", ["Qt", "Slot", "Signal", "QThread"]) + globalImport("PySide6.QtCharts", ["QChart", "QSplineSeries", "QLineSeries"]) + globalImport("PySide6.QtGui", ["QColor"]) - self.chart = self.ui.speedGraph.chart() - #self.chart.setAnimationOptions(QChart.AllAnimations) + class carInfo(QWidget): + def __init__(self,parent): + super().__init__() + self.ui = Ui_carInfo() + self.ui.setupUi(self) + self.maxV = 0 + self.parent = parent + self.pointsCount = [0] * 4 + self.minX = 0 - speedsNames = ["vmax","vsec","Vitesse (m.s^-1)","inter vsec"] - self.speedSeries = [] - for ind,s in enumerate(speedsNames): - self.speedSeries.append(QLineSeries()) - self.speedSeries[ind].setName(s) - # self.speedSeries[ind].setPointsVisible() - self.chart.addSeries(self.speedSeries[ind]) - self.chart.createDefaultAxes() - - @Slot(tuple) - def addSpeedPoint(self,params): - ind=params[0] - if self.parent.currentWidget() != self: - return - t=params[1] - val=params[2] - if(self.pointsCount[ind] > 200): - self.speedSeries[ind].remove(0) - self.minX = max(self.minX,self.speedSeries[ind].at(0).x()) - self.pointsCount[ind] -= 1 - self.speedSeries[ind].append(t,val) - self.pointsCount[ind] += 1 + self.chart = self.ui.speedGraph.chart() + #self.chart.setAnimationOptions(QChart.AllAnimations) - if self.speedSeries[ind].count()>2: - i = self.speedSeries[ind].count()-1 - pm2 = self.speedSeries[ind].at(i-2) - pm1 = self.speedSeries[ind].at(i-1) - pm0 = self.speedSeries[ind].at(i) - diffL = (pm1.y() - pm2.y())/(pm1.x() - pm2.x()) - diffR = (pm0.y() - pm1.y())/(pm0.x() - pm1.x()) - diff2 = diffR - diffL - if diff2 == 0: - self.speedSeries[ind].remove(i-1) + speedsNames = ["vmax","vsec","Vitesse (m.s^-1)","inter vsec"] + self.speedSeries = [] + for ind,s in enumerate(speedsNames): + self.speedSeries.append(QLineSeries()) + self.speedSeries[ind].setName(s) + # self.speedSeries[ind].setPointsVisible() + self.chart.addSeries(self.speedSeries[ind]) + self.chart.createDefaultAxes() + + @Slot(tuple) + def addSpeedPoint(self,params): + ind=params[0] + if self.parent.currentWidget() != self: + return + t=params[1] + val=params[2] + if(self.pointsCount[ind] > 200): + self.speedSeries[ind].remove(0) + self.minX = max(self.minX,self.speedSeries[ind].at(0).x()) self.pointsCount[ind] -= 1 + self.speedSeries[ind].append(t,val) + self.pointsCount[ind] += 1 - xAxis = self.chart.axes(Qt.Horizontal,self.speedSeries[ind])[0] - xAxis.setRange(self.minX,t) + if self.speedSeries[ind].count()>2: + i = self.speedSeries[ind].count()-1 + pm2 = self.speedSeries[ind].at(i-2) + pm1 = self.speedSeries[ind].at(i-1) + pm0 = self.speedSeries[ind].at(i) + diffL = (pm1.y() - pm2.y())/(pm1.x() - pm2.x()) + diffR = (pm0.y() - pm1.y())/(pm0.x() - pm1.x()) + diff2 = diffR - diffL + if diff2 == 0: + self.speedSeries[ind].remove(i-1) + self.pointsCount[ind] -= 1 - if val>self.maxV: - self.maxV = val - yAxis = self.chart.axes(Qt.Vertical, self.speedSeries[ind])[0] - yAxis.setMax(ceil(val+1)) + xAxis = self.chart.axes(Qt.Horizontal,self.speedSeries[ind])[0] + xAxis.setRange(self.minX,t) - self.ui.speedGraph.update() - - @Slot(tuple) - def setVal(self,params): - key = params[0] - val = params[1] - obj = self.findChild(QLabel,key) - if obj is None: - return - obj.setText(f"{key} : {val}") - obj.update() + if val>self.maxV: + self.maxV = val + yAxis = self.chart.axes(Qt.Vertical, self.speedSeries[ind])[0] + yAxis.setMax(ceil(val+1)) -class varEdit(QWidget): - def __init__(self, parent, carController, varName, value): - super().__init__() - self.ui = Ui_varEdit() - self.ui.setupUi(self) + self.ui.speedGraph.update() + + @Slot(tuple) + def setVal(self,params): + key = params[0] + val = params[1] + obj = self.findChild(QLabel,key) + if obj is None: + return + obj.setText(f"{key} : {val}") + obj.update() - self.hookName = varName - self.ui.name.setText(varName) - self.ui.value.setValue(value) + class varEdit(QWidget): + def __init__(self, parent, carController, varName, value): + super().__init__() + self.ui = Ui_varEdit() + self.ui.setupUi(self) - self.CC = carController + self.hookName = varName + self.ui.name.setText(varName) + self.ui.value.setValue(value) - self.ui.value.valueChanged.connect(self.valueChanged) + self.CC = carController - def valueChanged(self): - value = self.ui.value.value() - self.CC.updateConstant(self.hookName, value) + self.ui.value.valueChanged.connect(self.valueChanged) + + def valueChanged(self): + value = self.ui.value.value() + self.CC.updateConstant(self.hookName, value) class CarController: def __init__(self, parentMap): @@ -115,7 +118,9 @@ class CarController: self.vroomEnable=True - def addParent(self, mainWindow): + def addParent(self, mainWindow): + pysideImports() + self.infoWidget=mainWindow.findChild(QToolBox, "carInfos") varWidget = mainWindow.ui.constEdit diff --git a/Map.py b/Map.py index e0f5d56..41c5a8e 100644 --- a/Map.py +++ b/Map.py @@ -3,8 +3,16 @@ # mais si on se decide à utiliser notre propre format dans le futur ça facilitera la transition import sumolib -from PySide6.QtGui import QPainter, QPolygonF -from PySide6.QtCore import Qt, QPointF, QThread +import globalImport + +imported = False + +def pysideImports(): + if imported: + return + globalImport("PySide6.QtGui", ["QPainter", "QPolygonF"]) + globalImport("PySide6.QtCore", ["Qt", "QPointF", "QThread"]) + imported = True def safeCall(func): def inner(*args, **kwargs): @@ -29,6 +37,7 @@ class Map: @safeCall def draw(self, painter): + pysideImports() for edge in self.net.getEdges(): color=Qt.white if(edge.getFunction()=="internal"): diff --git a/globalImport.py b/globalImport.py new file mode 100644 index 0000000..ed80e74 --- /dev/null +++ b/globalImport.py @@ -0,0 +1,8 @@ +def globalImport(namespace, childrens=None): + if childrens is None: + globals()[namespace] = __import__(namespace) + elif isinstance(childrens, str): + globals()[namespace] = __import__(f"{namespace}.{childrens}") + else: + for c in childrens: + globals()[c] = __import__(f"{namespace}.{c}")