iam-git / WellMet (public) (License: MIT) (since 2021-08-31) (hash sha1)
WellMet is pure Python framework for spatial structural reliability analysis. Or, more specifically, for "failure probability estimation and detection of failure surfaces by adaptive sequential decomposition of the design domain".
List of commits:
Subject Hash Author Date (UTC)
qt_plot: show first two dimensions for nD problems 3d39373204bfac850d07afdd8629535c54f32196 I am 2020-10-24 11:44:38
qt_plot: BoxTreeWidget added 20343ef57abdac5754dfe0c01eb40fadf8919f23 I am 2020-10-23 10:10:04
dicebox.Chrt: candidates cropping, prevent memory explosion b69739998736e6965faeacd470e0c5c34f83073f I am 2020-10-22 10:24:51
simplex.Shull: explicitly require nis on every run 05feadd5188669357141286c2e3ad45b693e480a I am 2020-10-21 09:06:01
testcases 9dbc2d85042852410aafa72e0d0cf4e15445b6f2 I am 2020-10-16 13:15:51
whitebox: description attribute added 2032b051c9a5c638b1e0807a989b77488eb374b1 Aleksei Gerasimov 2020-10-16 09:25:49
dicebox.Chrt: optimizations 6f8c6f07be9e4d26f8371adce86020533b20de03 Олёш 2020-10-05 22:39:40
dicebox.Chrt: (I hope) last optimizations 080cfa059e4e86eab9659209ec0444fe7284081e Олёш 2020-10-05 14:42:42
dicebox: Chrt is ready c71f42a245818b41b49c9ed9d82b235a713e7562 Олёш 2020-10-05 04:28:08
dicebox: WIP 680a62be35cf31854d91e96bb8debcca283fb53f Олёш 2020-10-02 02:03:44
f_models: little fix, accidentally came in mind 3944ab574ad68434d9310e25f2aff730e6204328 Олёш 2020-10-02 02:02:33
shapeshare, dicebox: let's try new names 4adeaac518cc1bd304e966c9502b19a72ec50c39 Олёш 2020-10-01 18:30:52
IS_stat: cycle fix in ISSI.delete_event_data() aa7667add8d6ebf9338d33a23c769681340c7742 Олёш 2020-09-30 23:22:41
simplex: novej bombastickej... ok, I mean, new elegant Shull object 28375fa49a07057f09f1afeb8d4916b0f1bc87ac Олёш 2020-09-30 23:18:25
blackbox, simplex: WIP f66479b0e3f8ce8866466a263cd80ba227098c82 Олёш 2020-09-29 00:57:33
blackbox, simplex: WIP 255033055fd2db7ab1445618cfe476c14b527d22 Олёш 2020-09-28 19:58:06
simplex: helper functions are prepared df48adbb92dd80421d0ec4e6c087db7919cda7c7 Олёш 2020-09-28 17:42:24
blackbox: .regen() refactoring 4064e769a19cc853028701853ff29de53782b08c Олёш 2020-09-27 01:24:34
blackbox: little refactoring c3669a2889c1b7056113c70d0b7bb1bb9aaa6593 Олёш 2020-09-26 15:13:48
IS_stat.ISSI: ZeroDivisionError fix 981eb1025f4059497172a0c6b71bee3fb9516a14 Олёш 2020-09-15 22:26:36
Commit 3d39373204bfac850d07afdd8629535c54f32196 - qt_plot: show first two dimensions for nD problems
Author: I am
Author date (UTC): 2020-10-24 11:44
Committer name: I am
Committer date (UTC): 2020-10-24 11:44
Parent(s): 20343ef57abdac5754dfe0c01eb40fadf8919f23
Signer:
Signing key:
Signing status: N
Tree: 62a515ba660613d8be01dbba8f8cd7a10e546e21
File Lines added Lines deleted
qt_plot.py 78 52
File qt_plot.py changed (mode: 100644) (index 2509847..ea911a0)
... ... class QtGuiPlot2D(QtGui.QMainWindow):
170 170
171 171
172 172 #č graphy už nemusí jít po stm widgetech #č graphy už nemusí jít po stm widgetech
173 dock = QtGui.QDockWidget("TRI_current estimation graph", self)
174 dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_current_estimations'))
175 self.dockables.append(dock)
176 self.tabifyDockWidget(self.dockables[0], dock)
177
178 173 dock = QtGui.QDockWidget("TRI_overall estimation graph", self) dock = QtGui.QDockWidget("TRI_overall estimation graph", self)
179 174 dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_overall_estimations')) dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_overall_estimations'))
180 175 self.dockables.append(dock) self.dockables.append(dock)
 
... ... class BasePlotting:
371 366 plot_widget = self.w.central_widget plot_widget = self.w.central_widget
372 367 #size=self.w.px_size*1.5 #size=self.w.px_size*1.5
373 368 pos = () #np.empty((nsim, 4)) pos = () #np.empty((nsim, 4))
374 self.failures = plot_widget.plot(pos, pen=None, symbol='x', symbolPen='r', name='Failures') # symbolBrush=0.2,
369 size = self.w.px_size * 2
370 self.failures = plot_widget.plot(pos, pen=None, symbol='x', symbolPen='r',\
371 symbolSize=size*1.5, name='Failures') # symbolBrush=0.2,
375 372 self.failures.setZValue(100) self.failures.setZValue(100)
376 373
377 self.successes = plot_widget.plot(pos, pen=None, symbol='+', symbolPen='g', name='Successes')
374 self.proxy_failures = plot_widget.plot(pos, pen=None, symbol='p', symbolPen=0.5,\
375 symbolSize=size, symbolBrush=(217,83,25), name='Proxy failures')
376 self.proxy_failures.setZValue(95)
377
378 self.successes = plot_widget.plot(pos, pen=None, symbol='+', \
379 symbolSize=size*1.5, symbolPen='g', name='Successes')
378 380 self.successes.setZValue(90) self.successes.setZValue(90)
379 381
382 self.proxy_successes = plot_widget.plot(pos, pen=None, symbol='p', symbolPen=0.5, \
383 symbolSize=size, symbolBrush=(119,172,48), name='Proxy successes')
384 self.proxy_successes.setZValue(85)
385
380 386 self.plot() self.plot()
381 387
382 388 def plot(self): def plot(self):
 
... ... class BasePlotting:
384 390
385 391 sample_box = self.w.sample_box[:nsim] sample_box = self.w.sample_box[:nsim]
386 392
387 pos = getattr(sample_box, self.w.space)
393 pos = getattr(sample_box, self.w.space)[:,:2]
388 394 failsi = sample_box.failsi failsi = sample_box.failsi
389 395
396 try: # proxy denotes to implicitly-known values
397 proxy = sample_box.proxy
398 except AttributeError:
399 proxy = np.full(nsim, False, dtype=np.bool)
400
401 mask = np.all((failsi, ~proxy), axis=0)
402 self.draw(self.failures, pos[mask])
403
404 mask = np.all((~failsi, ~proxy), axis=0)
405 self.draw(self.successes, pos[mask])
406
407 mask = np.all((failsi, proxy), axis=0)
408 self.draw(self.proxy_failures, pos[mask])
409
410 mask = np.all((~failsi, proxy), axis=0)
411 self.draw(self.proxy_successes, pos[mask])
412
413
414 @staticmethod
415 def draw(plot_item, data):
390 416 #č musím to udělat takhle #č musím to udělat takhle
391 417 #č jinač to zlobí při posunutích slajderu #č jinač to zlobí při posunutích slajderu
392 failures = pos[failsi]
393 if len(failures):
394 self.failures.setData(failures)
395 self.failures.show()
396 else:
397 self.failures.hide()
398
399 successes = pos[~failsi]
400 if len(successes):
401 self.successes.setData(successes)
402 self.successes.show()
418 if len(data):
419 plot_item.setData(data)
420 plot_item.show()
403 421 else: else:
404 self.successes.hide()
422 plot_item.hide()
405 423
406 424
407 425 class UnitCube: class UnitCube:
 
... ... class LastShot:
482 500
483 501 def plot(self): def plot(self):
484 502 if self.item.checkState() and (self.w.last_shot is not None): if self.item.checkState() and (self.w.last_shot is not None):
485 pos = getattr(self.w.last_shot, self.w.space)
503 pos = getattr(self.w.last_shot, self.w.space)[:,:2]
486 504 self.last.setData(pos) self.last.setData(pos)
487 505 self.shot.setData(pos) self.shot.setData(pos)
488 506 self.last.show() self.last.show()
 
... ... class LastShot:
498 516 class Circles: class Circles:
499 517 def __init__(self, w): def __init__(self, w):
500 518 self.w = w self.w = w
501 self.w.space_changed.connect(self.plot)
502 self.w.redraw_called.connect(self.redraw)
503
504 self.item = QtGui.QListWidgetItem('Circles')
505 self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable)
506 self.item.setCheckState(QtCore.Qt.Checked)
507 self.w.list_view.addItem(self.item)
508 self.w.list_view.itemChanged.connect(self.show_slot)
519 if self.w.sample_box.nvar == 2:
520 self.w.space_changed.connect(self.plot)
521 self.w.redraw_called.connect(self.redraw)
522
523 self.item = QtGui.QListWidgetItem('Circles')
524 self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable)
525 self.item.setCheckState(QtCore.Qt.Checked)
526 self.w.list_view.addItem(self.item)
527 self.w.list_view.itemChanged.connect(self.show_slot)
509 528
510 529
511 530 def redraw(self): def redraw(self):
 
... ... class Triangulation:
603 622 def __init__(self, w): def __init__(self, w):
604 623
605 624 self.w = w self.w = w
606 self.w.box_runned.connect(self.update)
607 self.w.space_changed.connect(self.replot)
608 self.w.redraw_called.connect(self.redraw)
609
610 self.item = QtGui.QListWidgetItem('Triangulation')
611 self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable)
612 self.item.setCheckState(QtCore.Qt.Unchecked)
613 self.w.list_view.addItem(self.item)
614
615
616 self.w.list_view.itemChanged.connect(self.show_slot)
625 if self.w.sample_box.nvar == 2:
626 self.w.box_runned.connect(self.update)
627 self.w.space_changed.connect(self.replot)
628 self.w.redraw_called.connect(self.redraw)
629
630 self.item = QtGui.QListWidgetItem('Triangulation')
631 self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable)
632 self.item.setCheckState(QtCore.Qt.Unchecked)
633 self.w.list_view.addItem(self.item)
634
635
636 self.w.list_view.itemChanged.connect(self.show_slot)
617 637
618 638
619 639
 
... ... class FastSimplexEstimationWidget(QtGui.QSplitter):
1243 1263
1244 1264 #č teď tečičky #č teď tečičky
1245 1265 for nodes, plot_item, cell_stats in self.simplices: for nodes, plot_item, cell_stats in self.simplices:
1246 pos = getattr(nodes, self.sb_item.space)
1266 pos = getattr(nodes, self.sb_item.space)[:,:2]
1247 1267 plot_item.setData(pos) plot_item.setData(pos)
1248 1268 #plot_item.show() #plot_item.show()
1249 1269 # keep the GUI responsive :) # keep the GUI responsive :)
 
... ... class FastSimplexEstimationWidget(QtGui.QSplitter):
1358 1378 # #
1359 1379 # tečičky # tečičky
1360 1380 # #
1361 pos = getattr(nodes, self.sb_item.space)
1381 pos = getattr(nodes, self.sb_item.space)[:,:2]
1362 1382 event = cell_stats['event'] event = cell_stats['event']
1363 1383 cell_probability = cell_stats['cell_probability'] cell_probability = cell_stats['cell_probability']
1364 1384 if event in self.max_simplices: if event in self.max_simplices:
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1531 1551 def on_space_changed(self, *args, **kwargs): def on_space_changed(self, *args, **kwargs):
1532 1552 # teď tečičky # teď tečičky
1533 1553 for nodes, plot_item, cell_stats in self.cells: for nodes, plot_item, cell_stats in self.cells:
1534 pos = getattr(nodes, self.sb_item.space)
1554 pos = getattr(nodes, self.sb_item.space)[:,:2]
1535 1555 plot_item.setData(pos) plot_item.setData(pos)
1536 1556
1537 1557
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1632 1652
1633 1653
1634 1654 def node_pf_scatter_plot(self, nodes, cell_stats): def node_pf_scatter_plot(self, nodes, cell_stats):
1635 pos = getattr(nodes, self.sb_item.space)
1655 pos = getattr(nodes, self.sb_item.space)[:,:2]
1636 1656 symbol_size = self.param.getValues()['node (pixel) size'][0] symbol_size = self.param.getValues()['node (pixel) size'][0]
1637 1657 plot_widget = self.sb_item.central_widget plot_widget = self.sb_item.central_widget
1638 1658 # zas, нет ножек - нет мультиков # zas, нет ножек - нет мультиков
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1687 1707 plot_widget.removeItem(plot_item) plot_widget.removeItem(plot_item)
1688 1708
1689 1709 # draw # draw
1690 pos = getattr(nodes, self.sb_item.space)
1710 pos = getattr(nodes, self.sb_item.space)[:,:2]
1691 1711 #x, y = (*getattr(nodes, self.sb_item.space).T,) #x, y = (*getattr(nodes, self.sb_item.space).T,)
1692 1712
1693 1713 event = cell_stats['event'] event = cell_stats['event']
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1701 1721 else: else:
1702 1722 # draw tečičky # draw tečičky
1703 1723 # #
1704 pos = getattr(nodes, self.sb_item.space)
1724 pos = getattr(nodes, self.sb_item.space)[:,:2]
1705 1725
1706 1726 event = cell_stats['event'] event = cell_stats['event']
1707 1727 color = self.get_color(event) color = self.get_color(event)
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1742 1762 for cell in self.cells: for cell in self.cells:
1743 1763 nodes, plot_item, cell_stats = cell nodes, plot_item, cell_stats = cell
1744 1764 # draw # draw
1745 pos = getattr(nodes, self.sb_item.space)
1765 pos = getattr(nodes, self.sb_item.space)[:,:2]
1746 1766 #x, y = (*getattr(nodes, self.sb_item.space).T,) #x, y = (*getattr(nodes, self.sb_item.space).T,)
1747 1767
1748 1768 event = cell_stats['event'] event = cell_stats['event']
 
... ... class VoronoiEstimationWidget(QtGui.QSplitter):
1781 1801
1782 1802 # draw tečičky # draw tečičky
1783 1803 # #
1784 pos = getattr(nodes, self.sb_item.space)
1804 pos = getattr(nodes, self.sb_item.space)[:,:2]
1785 1805 #x, y = (*getattr(nodes, self.sb_item.space).T,) #x, y = (*getattr(nodes, self.sb_item.space).T,)
1786 1806
1787 1807 #symbolSize = np.sqrt(nodes.w / min(nodes.w)) # not bad #symbolSize = np.sqrt(nodes.w / min(nodes.w)) # not bad
 
... ... class CandidatesWidget(pg.LayoutWidget):
1927 1947 minvalue = mincb minvalue = mincb
1928 1948
1929 1949 #č zvlášť nakreslím maximální hodnotu #č zvlášť nakreslím maximální hodnotu
1930 pos = getattr(maxitem, self.sb_item.space)
1950 pos = getattr(maxitem, self.sb_item.space)[:,:2]
1931 1951 max_item = plot_widget.plot(pos, data=maxvalue, pen=None, symbol='t1',\ max_item = plot_widget.plot(pos, data=maxvalue, pen=None, symbol='t1',\
1932 1952 symbolBrush=color_map.mapToQColor(1)) symbolBrush=color_map.mapToQColor(1))
1933 1953 max_item.setZValue(130) max_item.setZValue(130)
 
... ... class CandidatesWidget(pg.LayoutWidget):
1944 1964 values = array[mask] values = array[mask]
1945 1965 norm_values = (values - minvalue) / (maxvalue - minvalue) norm_values = (values - minvalue) / (maxvalue - minvalue)
1946 1966
1947 pos = getattr(cb, self.sb_item.space)[mask]
1967 pos = getattr(cb, self.sb_item.space)[mask][:,:2]
1948 1968
1949 1969 #č sehnal jsem toto ze zdrojaků pyqtgraph #č sehnal jsem toto ze zdrojaků pyqtgraph
1950 1970 style = dict(pen=None, symbol='o', symbolSize=self.sb_item.px_size, symbolPen=pg.mkPen(None)) style = dict(pen=None, symbol='o', symbolSize=self.sb_item.px_size, symbolPen=pg.mkPen(None))
 
... ... class BoxTreeWidget(pg.LayoutWidget):
2007 2027 self.addWidget(self.btn, row=0, col=0) self.addWidget(self.btn, row=0, col=0)
2008 2028 self.btn.clicked.connect(self.update) self.btn.clicked.connect(self.update)
2009 2029
2010 self.tree = pg.DataTreeWidget(self, data=self.get_data(samplebox_item))
2030 #self.tree = pg.DataTreeWidget(self, data=self.get_data(samplebox_item))
2031 self.tree = pg.DataTreeWidget(self, data=dict())
2011 2032 self.addWidget(self.tree, row=1, col=0) self.addWidget(self.tree, row=1, col=0)
2012 2033
2013 2034 def update(self, *args, **kwargs): def update(self, *args, **kwargs):
2014 self.tree.setData(self.get_data(self.sb_item), hideRoot=True)
2035 try:
2036 self.tree.setData(self.get_data(self.sb_item), hideRoot=True)
2037 except BaseException as e:
2038 msg = ""
2039 error_msg = self.__class__.__name__ + ": " + msg + repr(e)
2040 print(error_msg)
2015 2041
2016 2042 @staticmethod @staticmethod
2017 2043 def get_data(self): #č nenechej si splest tím "self", je to prostě reference na QtGuiPlot2D def get_data(self): #č nenechej si splest tím "self", je to prostě reference na QtGuiPlot2D
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/iam-git/WellMet

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/iam-git/WellMet

Clone this repository using git:
git clone git://git.rocketgit.com/user/iam-git/WellMet

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main