Skip to content

Commit 5e5e40a

Browse files
committed
Merge branch 'master' of github.com:Ezetowers/taller3_final
2 parents b811893 + 981f739 commit 5e5e40a

File tree

9 files changed

+584
-257
lines changed

9 files changed

+584
-257
lines changed

MLC/GUI/Autogenerated/autogenerated.py

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Form implementation generated from reading ui file './mlc_qtcreator/arduinoconnectiontest.ui'
44
#
5-
# Created by: PyQt5 UI code generator 5.7
5+
# Created by: PyQt5 UI code generator 5.7.1
66
#
77
# WARNING! All changes made in this file will be lost!
88

@@ -48,7 +48,7 @@ def retranslateUi(self, ArduinoConnectionDialog):
4848

4949
# Form implementation generated from reading ui file './mlc_qtcreator/pinout_design.ui'
5050
#
51-
# Created by: PyQt5 UI code generator 5.7
51+
# Created by: PyQt5 UI code generator 5.7.1
5252
#
5353
# WARNING! All changes made in this file will be lost!
5454

@@ -84,7 +84,7 @@ def retranslateUi(self, ArduinoBoardDialog):
8484

8585
# Form implementation generated from reading ui file './mlc_qtcreator/mainwindow.ui'
8686
#
87-
# Created by: PyQt5 UI code generator 5.7
87+
# Created by: PyQt5 UI code generator 5.7.1
8888
#
8989
# WARNING! All changes made in this file will be lost!
9090

@@ -251,7 +251,7 @@ def retranslateUi(self, MLCManager):
251251

252252
# Form implementation generated from reading ui file './mlc_qtcreator/experiment_in_progress.ui'
253253
#
254-
# Created by: PyQt5 UI code generator 5.7
254+
# Created by: PyQt5 UI code generator 5.7.1
255255
#
256256
# WARNING! All changes made in this file will be lost!
257257

@@ -352,7 +352,7 @@ def retranslateUi(self, ExperimentInProgressWindow):
352352

353353
# Form implementation generated from reading ui file './mlc_qtcreator/experiment.ui'
354354
#
355-
# Created by: PyQt5 UI code generator 5.7
355+
# Created by: PyQt5 UI code generator 5.7.1
356356
#
357357
# WARNING! All changes made in this file will be lost!
358358

@@ -407,9 +407,6 @@ def setupUi(self, ExperimentWindow):
407407
self.label_7 = QtWidgets.QLabel(self.groupBox_7)
408408
self.label_7.setObjectName("label_7")
409409
self.gridLayout_6.addWidget(self.label_7, 0, 0, 1, 1)
410-
self.marker_combo = QtWidgets.QComboBox(self.groupBox_7)
411-
self.marker_combo.setObjectName("marker_combo")
412-
self.gridLayout_6.addWidget(self.marker_combo, 0, 5, 1, 1)
413410
self.overflow_color_combo = QtWidgets.QComboBox(self.groupBox_7)
414411
self.overflow_color_combo.setObjectName("overflow_color_combo")
415412
self.gridLayout_6.addWidget(self.overflow_color_combo, 6, 1, 1, 1)
@@ -431,9 +428,6 @@ def setupUi(self, ExperimentWindow):
431428
self.max_cost_combo = QtWidgets.QComboBox(self.groupBox_7)
432429
self.max_cost_combo.setObjectName("max_cost_combo")
433430
self.gridLayout_6.addWidget(self.max_cost_combo, 0, 1, 1, 1)
434-
self.label_14 = QtWidgets.QLabel(self.groupBox_7)
435-
self.label_14.setObjectName("label_14")
436-
self.gridLayout_6.addWidget(self.label_14, 0, 4, 1, 1)
437431
self.min_cost_combo = QtWidgets.QComboBox(self.groupBox_7)
438432
self.min_cost_combo.setObjectName("min_cost_combo")
439433
self.gridLayout_6.addWidget(self.min_cost_combo, 0, 3, 1, 1)
@@ -443,24 +437,24 @@ def setupUi(self, ExperimentWindow):
443437
self.valid_points_combo = QtWidgets.QComboBox(self.groupBox_7)
444438
self.valid_points_combo.setObjectName("valid_points_combo")
445439
self.gridLayout_6.addWidget(self.valid_points_combo, 1, 1, 1, 1)
446-
self.label_12 = QtWidgets.QLabel(self.groupBox_7)
447-
self.label_12.setObjectName("label_12")
448-
self.gridLayout_6.addWidget(self.label_12, 1, 2, 1, 1)
449-
self.overflow_value_combo = QtWidgets.QComboBox(self.groupBox_7)
450-
self.overflow_value_combo.setObjectName("overflow_value_combo")
451-
self.gridLayout_6.addWidget(self.overflow_value_combo, 1, 3, 1, 1)
452-
self.label_15 = QtWidgets.QLabel(self.groupBox_7)
453-
self.label_15.setObjectName("label_15")
454-
self.gridLayout_6.addWidget(self.label_15, 1, 4, 1, 1)
455-
self.points_combo = QtWidgets.QComboBox(self.groupBox_7)
456-
self.points_combo.setObjectName("points_combo")
457-
self.gridLayout_6.addWidget(self.points_combo, 1, 5, 1, 1)
458440
self.label_13 = QtWidgets.QLabel(self.groupBox_7)
459441
self.label_13.setObjectName("label_13")
460-
self.gridLayout_6.addWidget(self.label_13, 6, 2, 1, 1)
442+
self.gridLayout_6.addWidget(self.label_13, 7, 2, 1, 1)
461443
self.nan_value_combo = QtWidgets.QComboBox(self.groupBox_7)
462444
self.nan_value_combo.setObjectName("nan_value_combo")
463-
self.gridLayout_6.addWidget(self.nan_value_combo, 6, 3, 1, 1)
445+
self.gridLayout_6.addWidget(self.nan_value_combo, 7, 3, 1, 1)
446+
self.label_12 = QtWidgets.QLabel(self.groupBox_7)
447+
self.label_12.setObjectName("label_12")
448+
self.gridLayout_6.addWidget(self.label_12, 6, 2, 1, 1)
449+
self.overflow_value_combo = QtWidgets.QComboBox(self.groupBox_7)
450+
self.overflow_value_combo.setObjectName("overflow_value_combo")
451+
self.gridLayout_6.addWidget(self.overflow_value_combo, 6, 3, 1, 1)
452+
self.label_14 = QtWidgets.QLabel(self.groupBox_7)
453+
self.label_14.setObjectName("label_14")
454+
self.gridLayout_6.addWidget(self.label_14, 1, 2, 1, 1)
455+
self.marker_combo = QtWidgets.QComboBox(self.groupBox_7)
456+
self.marker_combo.setObjectName("marker_combo")
457+
self.gridLayout_6.addWidget(self.marker_combo, 1, 3, 1, 1)
464458
self.verticalLayout_4.addWidget(self.groupBox_7)
465459
self.horizontalLayout_2.addWidget(self.frame_4)
466460
self.frame_3 = QtWidgets.QFrame(self.experiment_tab)
@@ -705,7 +699,6 @@ def setupUi(self, ExperimentWindow):
705699
self.start_button.clicked.connect(ExperimentWindow.on_start_button_clicked)
706700
self.valid_points_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
707701
self.overflow_color_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
708-
self.points_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
709702
self.marker_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
710703
self.overflow_value_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
711704
self.nan_value_combo.currentTextChanged['QString'].connect(ExperimentWindow.on_chart_config_changed)
@@ -726,11 +719,10 @@ def retranslateUi(self, ExperimentWindow):
726719
self.label_8.setText(_translate("ExperimentWindow", "Overflow Color:"))
727720
self.label_11.setText(_translate("ExperimentWindow", "Min Cost:"))
728721
self.label_10.setText(_translate("ExperimentWindow", "NaN/Inf Color:"))
729-
self.label_14.setText(_translate("ExperimentWindow", "Marker Size:"))
730722
self.label_9.setText(_translate("ExperimentWindow", "Valid Points Color:"))
731-
self.label_12.setText(_translate("ExperimentWindow", "Overflow Value:"))
732-
self.label_15.setText(_translate("ExperimentWindow", "Visualized Points:"))
733723
self.label_13.setText(_translate("ExperimentWindow", "NaN/Inf Value:"))
724+
self.label_12.setText(_translate("ExperimentWindow", "Overflow Value:"))
725+
self.label_14.setText(_translate("ExperimentWindow", "Marker Size:"))
734726
self.groupBox_2.setTitle(_translate("ExperimentWindow", "Scripts"))
735727
self.ev_edit_button.setText(_translate("ExperimentWindow", "Edit"))
736728
self.preev_edit_button.setText(_translate("ExperimentWindow", "Edit"))
@@ -774,7 +766,7 @@ def retranslateUi(self, ExperimentWindow):
774766

775767
# Form implementation generated from reading ui file './mlc_qtcreator/genealogy.ui'
776768
#
777-
# Created by: PyQt5 UI code generator 5.7
769+
# Created by: PyQt5 UI code generator 5.7.1
778770
#
779771
# WARNING! All changes made in this file will be lost!
780772

@@ -813,7 +805,7 @@ def retranslateUi(self, GenealogyWindow):
813805

814806
# Form implementation generated from reading ui file './mlc_qtcreator/board_config_design.ui'
815807
#
816-
# Created by: PyQt5 UI code generator 5.7
808+
# Created by: PyQt5 UI code generator 5.7.1
817809
#
818810
# WARNING! All changes made in this file will be lost!
819811

@@ -1086,7 +1078,7 @@ def retranslateUi(self, BoardConfigurationWindow):
10861078

10871079
# Form implementation generated from reading ui file './mlc_qtcreator/edit_properties.ui'
10881080
#
1089-
# Created by: PyQt5 UI code generator 5.7
1081+
# Created by: PyQt5 UI code generator 5.7.1
10901082
#
10911083
# WARNING! All changes made in this file will be lost!
10921084

MLC/GUI/Autogenerated/mlc_qtcreator/experiment.ui

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@
8181
</property>
8282
</widget>
8383
</item>
84-
<item row="0" column="5">
85-
<widget class="QComboBox" name="marker_combo"/>
86-
</item>
8784
<item row="6" column="1">
8885
<widget class="QComboBox" name="overflow_color_combo"/>
8986
</item>
@@ -120,13 +117,6 @@
120117
<item row="0" column="1">
121118
<widget class="QComboBox" name="max_cost_combo"/>
122119
</item>
123-
<item row="0" column="4">
124-
<widget class="QLabel" name="label_14">
125-
<property name="text">
126-
<string>Marker Size:</string>
127-
</property>
128-
</widget>
129-
</item>
130120
<item row="0" column="3">
131121
<widget class="QComboBox" name="min_cost_combo"/>
132122
</item>
@@ -140,35 +130,35 @@
140130
<item row="1" column="1">
141131
<widget class="QComboBox" name="valid_points_combo"/>
142132
</item>
143-
<item row="1" column="2">
144-
<widget class="QLabel" name="label_12">
133+
<item row="7" column="2">
134+
<widget class="QLabel" name="label_13">
145135
<property name="text">
146-
<string>Overflow Value:</string>
136+
<string>NaN/Inf Value:</string>
147137
</property>
148138
</widget>
149139
</item>
150-
<item row="1" column="3">
151-
<widget class="QComboBox" name="overflow_value_combo"/>
140+
<item row="7" column="3">
141+
<widget class="QComboBox" name="nan_value_combo"/>
152142
</item>
153-
<item row="1" column="4">
154-
<widget class="QLabel" name="label_15">
143+
<item row="6" column="2">
144+
<widget class="QLabel" name="label_12">
155145
<property name="text">
156-
<string>Visualized Points:</string>
146+
<string>Overflow Value:</string>
157147
</property>
158148
</widget>
159149
</item>
160-
<item row="1" column="5">
161-
<widget class="QComboBox" name="points_combo"/>
150+
<item row="6" column="3">
151+
<widget class="QComboBox" name="overflow_value_combo"/>
162152
</item>
163-
<item row="6" column="2">
164-
<widget class="QLabel" name="label_13">
153+
<item row="1" column="2">
154+
<widget class="QLabel" name="label_14">
165155
<property name="text">
166-
<string>NaN/Inf Value:</string>
156+
<string>Marker Size:</string>
167157
</property>
168158
</widget>
169159
</item>
170-
<item row="6" column="3">
171-
<widget class="QComboBox" name="nan_value_combo"/>
160+
<item row="1" column="3">
161+
<widget class="QComboBox" name="marker_combo"/>
172162
</item>
173163
</layout>
174164
</widget>
@@ -862,22 +852,6 @@
862852
</hint>
863853
</hints>
864854
</connection>
865-
<connection>
866-
<sender>points_combo</sender>
867-
<signal>currentTextChanged(QString)</signal>
868-
<receiver>ExperimentWindow</receiver>
869-
<slot>on_chart_config_changed(QString)</slot>
870-
<hints>
871-
<hint type="sourcelabel">
872-
<x>203</x>
873-
<y>484</y>
874-
</hint>
875-
<hint type="destinationlabel">
876-
<x>480</x>
877-
<y>273</y>
878-
</hint>
879-
</hints>
880-
</connection>
881855
<connection>
882856
<sender>marker_combo</sender>
883857
<signal>currentTextChanged(QString)</signal>

MLC/GUI/Experiment/ChartConfiguration.py

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22

3+
import math
34
import numpy as np
45
import os
56
import random
@@ -47,9 +48,8 @@ def __init__(self, autogenerated_object):
4748
self._overflow_value_combo = self._autogenerated_object.overflow_value_combo
4849
self._valid_points_combo = self._autogenerated_object.valid_points_combo
4950
self._marker_combo = self._autogenerated_object.marker_combo
50-
self._points_combo = self._autogenerated_object.points_combo
5151

52-
def init(self):
52+
def init(self, population_size):
5353
# Variable used to determine when the chart can be updated
5454
self._update_chart = False
5555
# Load the colors in the combos
@@ -68,18 +68,14 @@ def init(self):
6868
ChartConfiguration.MARKER_SIZE_VALUES[1] +
6969
ChartConfiguration.MARKER_SIZE_VALUES[2],
7070
ChartConfiguration.MARKER_SIZE_VALUES[2])])
71-
self._points_combo.addItems([str(x) for x in xrange(ChartConfiguration.AMOUNT_POINTS[0],
72-
ChartConfiguration.AMOUNT_POINTS[1] +
73-
ChartConfiguration.AMOUNT_POINTS[2],
74-
ChartConfiguration.AMOUNT_POINTS[2])])
7571
self._set_defaults()
76-
self._create_new_chart()
72+
self._create_new_chart(population_size)
7773
self._update_chart = True
7874

79-
def update_chart(self):
75+
def update_chart(self, population_size, indiv_costs):
8076
if self._update_chart:
8177
self._set_default_overflow_and_nan_values()
82-
self._create_new_chart()
78+
self._create_new_chart(population_size, indiv_costs)
8379

8480
def chart_params(self):
8581
chart_params = {"max_cost": int(self._max_cost_combo.currentText()),
@@ -96,7 +92,6 @@ def _set_defaults(self):
9692
self._min_cost_combo.setCurrentIndex(0)
9793
self._max_cost_combo.setCurrentIndex(self._max_cost_combo.count() - 1)
9894
self._marker_combo.setCurrentIndex(self._marker_combo.count() / 2 - 1)
99-
self._points_combo.setCurrentIndex(0)
10095
self._valid_points_combo.setCurrentIndex(int(self._valid_points_combo.findText("DarkGreen")))
10196
self._overflow_color_combo.setCurrentIndex(int(self._overflow_color_combo.findText("Red")))
10297
self._nan_color_combo.setCurrentIndex(int(self._nan_color_combo.findText("Magenta")))
@@ -148,7 +143,7 @@ def _refresh_overflow_and_nan_combos(self):
148143
self._nan_value_combo.setCurrentIndex(
149144
self._nan_value_combo.findText(str(nan_value)))
150145

151-
def _create_new_chart(self):
146+
def _create_new_chart(self, population_size, indiv_costs=None):
152147
# Insert the widget into the widget
153148
chart_conf_layout = self._autogenerated_object.chart_conf_layout
154149

@@ -177,30 +172,39 @@ def _create_new_chart(self):
177172
# Yellow: Nan and Inf points
178173
indiv_chart.add_scatter(marker_size=marker_size, color=nan_color, legend="Nan or Inf")
179174

180-
amount_points = int(self._points_combo.currentText())
175+
amount_points = int(population_size)
181176
indiv_canvas = indiv_chart.get_widget()
182177
indiv_canvas.chart().axisX().setRange(1, amount_points)
183178

184-
min_range = int(self._min_cost_combo.currentText())
185-
max_range = int(self._max_cost_combo.currentText())
186-
indiv_canvas.chart().axisY().setRange(min_range, max_range)
187-
self._max_cost = 0
188-
189-
# Add Points
190-
for index in xrange(1, amount_points + 1):
191-
if index % 11 == 0:
192-
# Add an overflow point every 11 points
193-
overflow_value = int(self._overflow_value_combo.currentText())
194-
indiv_chart.append_point(1, index, overflow_value)
195-
elif index % 17 == 0:
196-
# Add a nan point every 17 points
197-
nan_value = int(self._nan_value_combo.currentText())
198-
indiv_chart.append_point(2, index, nan_value)
199-
else:
200-
# Draw a cosine
201-
amp = max_range / 2
202-
value = amp * np.cos(2 * np.pi * index / amount_points) + amp
203-
indiv_chart.append_point(0, index, value)
179+
min_cost = int(self._min_cost_combo.currentText())
180+
max_cost = int(self._max_cost_combo.currentText())
181+
indiv_canvas.chart().axisY().setRange(min_cost, max_cost)
182+
183+
overflow_value = int(self._overflow_value_combo.currentText())
184+
nan_value = int(self._nan_value_combo.currentText())
185+
if not indiv_costs:
186+
# Add Points
187+
for index in xrange(1, amount_points + 1):
188+
if index % 11 == 0:
189+
# Add an overflow point every 11 points
190+
indiv_chart.append_point(1, index, overflow_value)
191+
elif index % 17 == 0:
192+
# Add a nan point every 17 points
193+
indiv_chart.append_point(2, index, nan_value)
194+
else:
195+
# Draw a cosine
196+
amp = max_cost / 2
197+
value = amp * np.cos(2 * np.pi * index / amount_points) + amp
198+
indiv_chart.append_point(0, index, value)
199+
else:
200+
for index in xrange(1, amount_points + 1):
201+
indiv_cost = indiv_costs[index - 1]
202+
if indiv_cost > max_cost:
203+
indiv_chart.append_point(1, index, overflow_value)
204+
elif math.isnan(indiv_cost) or math.isinf(indiv_cost):
205+
indiv_chart.append_point(2, index, nan_value)
206+
else:
207+
indiv_chart.append_point(0, index, indiv_cost)
204208

205209
# Remove all previous widgets before rendering again
206210
for i in reversed(range(chart_conf_layout.count())):

MLC/GUI/Experiment/ExperimentInProgress.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def continue_experiment(self):
5151

5252
def cancel_experiment(self):
5353
self._condition.acquire()
54+
self._experiment_stopped = False
5455
self._experiment_cancelled = True
5556
self._condition.notify()
5657
self._condition.release()
@@ -148,7 +149,7 @@ def _update_dialog(self, indivs_per_gen_counter, total_indivs_counter, gen_count
148149
self._update_current_gen_experiment(indivs_per_gen_counter, cost)
149150

150151
def _simulation_finished(self):
151-
logger.debug('{0} [SIM_FINISHED] - Executing simulation_finished function'.format(self._log_prefix))
152+
logger.debug('{0} [SIM_FINISHED] - Executing _simulation_finished function'.format(self._log_prefix))
152153
self._parent_signal.emit(self._experiment_condition.experiment_cancelled())
153154

154155
def _update_current_gen_experiment(self, indiv_index, cost):
@@ -290,7 +291,9 @@ def close_window(self):
290291
self._dialog.close()
291292

292293
def _check_if_project_stopped_or_cancelled(self):
293-
if self._experiment_condition.wait_if_experiment_stopped():
294-
# Check if the experiment was cancelled
295-
if self._experiment_condition.experiment_cancelled():
296-
raise ThreadCancelException()
294+
self._experiment_condition.wait_if_experiment_stopped()
295+
# Check if the experiment was cancelled
296+
if self._experiment_condition.experiment_cancelled():
297+
logger.debug('{0} [CHECK_IF_PROJECT_CANCELLED] - Raising ThreadCancelException'
298+
.format(self._log_prefix))
299+
raise ThreadCancelException()

0 commit comments

Comments
 (0)