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)
dicebox.circumtri: process filtered integration nodes as candidates too 315e2f9700d93f1379985dafa818b44df53422a2 I am 2022-12-29 13:51:52
dicebox.circumtri: return back weighted entropy 0424243e29a600ecb1d046631badbc9797e11369 I am 2022-12-28 19:11:30
qt_gui.qt_graph_widgets: reflect renewed simplex estimators 90c83c7c7e6e58d6b9044db1a5e55f9a8a7dd7cd I am 2022-12-28 16:15:40
dicebox: rework CircumTri e360b2f092c11a42b5ac1081061f2891bff3d8de I am 2022-12-28 15:52:28
simplex: make _Triangulation more clean; rework CubatureIntegration fb7dd9fef8592944fbd93a3f07b44c2355d45e20 I am 2022-12-28 15:48:20
introduce shell module, clean version of ghull b13e9b2b15d109770e0c3fbdd5bb7b2a3b5bf5fc I am 2022-12-28 15:45:27
qt_gui.qt_plot.CandidatesWidget: regression fix a75874b5a53e7b420672b582f3ff415b17a32e9b I am 2022-12-23 12:19:51
qt_gui.qt_pairwise.ContactWidget: add mask function 6f88fec7db92e5cd21826a06f42a609a3e03cb6b I am 2022-12-21 15:20:01
qt_gui.qt_pairwise.ContactWidget: add option for mixed pairs only adjacency search. 2f87e8a18908de607b8abc0779448ca3095c134c I am 2022-12-21 14:30:23
qt_gui.qt_dicebox: reflect changes in CircumTri class 9821d389240a383f0b13b7dd92cd501e1c40c537 I am 2022-12-15 09:36:16
dicebox.circumtri: employ _Exploration class. Keep naive CircumTri class in renamed module b8605fb24d55b3296ceac34afba541a5b7ee3070 I am 2022-12-15 09:33:59
convex_hull.QHull.get_exploration_vector: self -> hull fix dae47ef37b5871a98d2ea274cc35aeb2a4eebe1c I am 2022-12-15 09:30:31
qt_gui/qt_dicebox: add DumpExplorationWidget b687895f06c780418a12eea59bd052ad7cd348f3 I am 2022-12-15 01:31:14
dicebox: add helper _exploration module 836ae6cd12f1a04f1e2fc3423e46777d16ebad7d I am 2022-12-15 01:30:20
convex_hull: add get_exploration_vector() method 795259d91b64c732e60a83a1d9e3b89c2141b003 I am 2022-12-15 01:28:12
qt_gui.qt_gui: dot not create graph widgets if estimations are not present f070ed140a135a980e4436ed3779455c0e1bf399 I am 2022-12-14 02:25:45
qt_gui.gl_plot.CandidatesWidget: apply changes for GLplot too 03550040b60c67d247e26425e35fac565dd88886 Aleksei Gerasimov 2022-12-14 01:56:01
qt_gui.qt_plot.CandidatesWidget: add CandyNodes support 2357cdd92170b1f660b15c92aec695d3f7c108b3 I am 2022-12-14 01:08:30
qt_gui.qt_graph_widgets.EstimationGraph: reimplement piece of zerosafe logic 342a1b7bfddb7ba5695b3f0e017c7f75811db1f0 I am 2022-12-13 22:15:54
qt_gui.qt_graph_widgets: update x range when box runned c52052a9c3f6926d03e8c39f7642aa0a8864fdc3 I am 2022-12-13 10:23:45
Commit 315e2f9700d93f1379985dafa818b44df53422a2 - dicebox.circumtri: process filtered integration nodes as candidates too
Author: I am
Author date (UTC): 2022-12-29 13:51
Committer name: I am
Committer date (UTC): 2022-12-29 13:51
Parent(s): 0424243e29a600ecb1d046631badbc9797e11369
Signer:
Signing key:
Signing status: N
Tree: a12bdae97ed4e14ecec3cd5215757bf771c2b475
File Lines added Lines deleted
wellmet/dicebox/circumtri.py 56 12
File wellmet/dicebox/circumtri.py changed (mode: 100644) (index c585d15..f5e6a96)
4 4
5 5 import numpy as np import numpy as np
6 6 from scipy.spatial import distance from scipy.spatial import distance
7 from scipy.spatial import KDTree
7 8
8 9 import quadpy import quadpy
9 10
 
... ... class CircumTri(_Exploration):
205 206
206 207
207 208 #č teď je to kolbek, který volá Triangulation #č teď je to kolbek, který volá Triangulation
208 def _on_mixed_added(bx, simplex, indices, vertices_model, _nodes, _vol, fr, wfr, _mfpdf):
209 def _on_mixed_added(bx, simplex, indices, vertices_model, nodes, _vol, fr, wfr, _mfpdf):
209 210
210 211 circum_center = bx.CC.get_circumcenter(vertices_model) circum_center = bx.CC.get_circumcenter(vertices_model)
211 212 r = distance.euclidean(circum_center, vertices_model[0]) r = distance.euclidean(circum_center, vertices_model[0])
 
... ... class CircumTri(_Exploration):
215 216 circum_pdf = float(circum_node.pdf(bx.tri_space)) circum_pdf = float(circum_node.pdf(bx.tri_space))
216 217 circum_potential = r * circum_pdf**(1/bx.nvar) circum_potential = r * circum_pdf**(1/bx.nvar)
217 218
218 # circum rating
219 if bx.weighted_entropy:
220 entropy = get_entropy(wfr)
219 failsi = bx.Tri.failsi[indices]
220
221
222 tree = KDTree(vertices_model, compact_nodes=False, balanced_tree=False)
223
224 #č konkretně tato třída je pevně napojena na G prostor
225 #č ale bacha, kbyby se to změnilo...
226 dd, ii = tree.query(nodes.G, k=2)
227
228 failsi_pair = failsi[ii]
229 mask = np.logical_xor(failsi_pair[:,0], failsi_pair[:,1])
230 #mask = np.sum(failsi[ii], axis=1) == 1
231 if np.any(mask):
232 nodes = nodes[mask]
233
234 dr = distance.cdist(nodes.G, [circum_center]).flatten()
235 nodes_pdf = nodes.pdf('G')
236 node_potentials = (r - dr) * nodes_pdf**(1/bx.nvar)
237
238
239 max_node = np.nanargmax(node_potentials)
240 max_node_potential = node_potentials[max_node]
221 241 else: else:
222 entropy = get_entropy(fr)
223 circum_rating = circum_potential * entropy
242 max_node_potential = -np.inf
243
244
245
246 if max_node_potential > circum_potential:
247 result_node = nodes[max_node]
248 result_potential = max_node_potential
249
250 d1, d2 = dd[mask][max_node]
251 if bx.weighted_entropy:
252 ii = ii[mask][max_node]
253 pdf1, pdf2 = bx.Tri.PDF[indices][ii]
254 entropy = get_entropy(pdf1 * d2 / (pdf1 * d2 + pdf2 * d1))
255 else:
256 entropy = get_entropy(d1 / (d1 + d2))
257 result_rating = max_node_potential * entropy
258 else:
259 result_node = circum_node
260 result_potential = circum_potential
261 # circum rating
262 if bx.weighted_entropy:
263 entropy = get_entropy(wfr)
264 else:
265 entropy = get_entropy(fr)
266 result_rating = circum_potential * entropy
224 267
225 268
226 269 #č nodes příjdou zabalené do CandyNodes. Ty mají .attrs a .kwargs #č nodes příjdou zabalené do CandyNodes. Ty mají .attrs a .kwargs
227 270 if bx.store_candidates_metainformation: if bx.store_candidates_metainformation:
228 circum_node = CandyNodes(circum_node)
229 circum_node.potential = circum_potential
230 circum_node.rating = circum_rating
231 bx.candidates_index[simplex] = circum_node
232 bx.potential_index[simplex] = circum_potential
233 bx.rating_index[simplex] = circum_rating
271 result_node = CandyNodes(result_node)
272 result_node.potential = result_potential
273 result_node.rating = result_rating
274
275 bx.candidates_index[simplex] = result_node
276 bx.potential_index[simplex] = result_potential
277 bx.rating_index[simplex] = result_rating
234 278
235 279
236 280
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