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)
voronoi: WIP 4b80757fa26e3d40dceac888480ec3d814f6abc9 I am 2022-10-15 17:30:11
voronoi: WIP 7cadd1d01d7f4bc3f51e785fe6ebf8cae6ff839a I am 2022-10-15 03:12:54
voronoi: clean up and comment out ContactSolver 543f8482a925ff6cf8485b9be616b5bd3c714d13 I am 2022-10-14 04:24:40
qt_gui.qt_gui: use ConvexSolver instead of ContactSolver (which did not work correctly) c1e49a9b2c3cc13886d317b460d7598f661cf216 I am 2022-10-14 04:01:06
voronoi: add fantastic ConvexSolver 2853826e5ef1abc79d3ac2fb8289b13c45211a31 I am 2022-10-14 04:00:14
qt_gui.qt_plot: add (finally!) Numbers class 4cdc658c0fcc857c23c0e39e91e7a1ce5e1b30a1 I am 2022-10-13 06:23:46
qt_gui.qt_gui: show contacts in distance matrix. Based on ContactSolver for now 21bd6101888d9f06d7d6a7c6ba2732ff30fdd68d I am 2022-10-13 04:16:41
voronoi: ContactSolver is ready. Ale je to na nic. Pomalá, potvora 28e2442b0101eac2407ed4a69c6f757ffd579cf1 I am 2022-10-13 04:14:59
voronoi: add some preliminary lines of ContactSolver. WIP 6a203b278c9fa6de7da75c402c80f78d40164fdf I am 2022-10-12 23:38:59
voronoi: přídat pár těžkých smyček. WIP 7b0ffb602ae00ab2f12dc98d34c35ec20afa3cc4 I am 2022-10-12 00:13:36
add to repo voronoi module. WIP f43768c22d88fac7c7095be02d8c9b5620153976 I am 2022-10-11 03:29:49
convex_hull.Grick: malý puntičkářský fix v get_r() cfa07257b9ebadc21f2bd295d35978072fac19e9 I am 2022-10-10 07:14:26
qt_gui.qt_plot: add Grick to Ghull widget d90b9a87c3ef0989951a45b2a22346381ce16f02 I am 2022-10-10 03:17:24
convex_hull: implement Grick convex hull aproximation d09ca2e6aca41cfc67f3303eb97b97dd9c6f1fba I am 2022-10-10 03:15:52
qt_gui.qt_gui: distance matrix viewer is ready a532e5259c081a1aff193d3b61e0104c42b08f20 I am 2022-10-08 20:52:14
qt_gui.qt_gui: prepare distance matrix window 4eaea3305643c60c35f0b22421a7e57dbe7a7817 I am 2022-10-08 02:59:01
qt_gui.qt_graph_widgets: set up x limits for all graph widgets 413d114f6a4e4b45c6cd44959cc42588bb7c8008 I am 2022-10-07 22:54:46
qt_gui.qt_plot: set up equal aspect by default 11bfe09b3e96881ef6f7c8202a6723b6e8adc03a I am 2022-10-07 21:41:18
qt_gui.qt_gui: hide "connect/disconnect" button. It wasn't really supported d9f195fe0611d6cf9a8154f0175c6c9506d56247 I am 2022-10-07 21:33:07
qt_gui.qt_plot: fix zero r cirkle (off by one error) 681397de6d075b693897d5f64004c0eb481fd36f I am 2022-10-07 20:34:44
Commit 4b80757fa26e3d40dceac888480ec3d814f6abc9 - voronoi: WIP
Author: I am
Author date (UTC): 2022-10-15 17:30
Committer name: I am
Committer date (UTC): 2022-10-15 17:30
Parent(s): 7cadd1d01d7f4bc3f51e785fe6ebf8cae6ff839a
Signer:
Signing key:
Signing status: N
Tree: 34f94f620348d2ec878d4a8f7fd71b1d845a1464
File Lines added Lines deleted
wellmet/voronoi.py 80 46
File wellmet/voronoi.py changed (mode: 100644) (index 04923de..9aacbae)
... ... class ContactVoronoi:
225 225 č kdy a jak odhady aktualizovat č kdy a jak odhady aktualizovat
226 226 č integrujeme zde všechny možné pary vzorků, č integrujeme zde všechny možné pary vzorků,
227 227 č kontakt po kontaktu, č kontakt po kontaktu,
228 č tj. oblastí ve kterých nejblížšimi jsou pár určitých vzorků
228 č tj. oblastí ve kterých nejblížšimi jsou pár určitých vzorků.
229 229 č Vyhody: č Vyhody:
230 č + Získáváme strukturální informace o problému
231 č + Nemusíme integrovat všechno. Na zelený-zelený kontakty kašleme
232 č + V rámci kontaktu entropie je neměnná, vysledný potenciál je předvidatelný
230 č + Získáváme strukturální informace o problému.
231 č + Nemusíme integrovat všechno. Na zelený-zelený kontakty kašleme.
232 č + V rámci kontaktu entropie je neměnná, potenciál taky.
233 233 č + Důraz integrace je právě na oblastéch zájmu, ne bůhví na čem u buňek. č + Důraz integrace je právě na oblastéch zájmu, ne bůhví na čem u buňek.
234 234 č + Nejsou-li body příslyšné kontaktu, tak řekneme, že kontakt neexistuje č + Nejsou-li body příslyšné kontaktu, tak řekneme, že kontakt neexistuje
235 235 č a vyhodíme ho z dalšího usuzování. U buňek člověk nikdy neví... č a vyhodíme ho z dalšího usuzování. U buňek člověk nikdy neví...
 
... ... class ContactVoronoi:
246 246 č 1b. I když nepatří střed usečky mezí vzorky "a" a "b" do kontaktu, č 1b. I když nepatří střed usečky mezí vzorky "a" a "b" do kontaktu,
247 247 č kontakt pořad může existovat. č kontakt pořad může existovat.
248 248 č 1c. Jde-li kontakt do nekonečna, pořad může (i když nemusí) č 1c. Jde-li kontakt do nekonečna, pořad může (i když nemusí)
249 č existovat část, která patří do (QHull) konvexní obálky
250 č 2. (Při přidani vzorku "c"). Neexistují-li kontakty mezi vzorky "c" a "a",
251 č a mezi "c" a "b", tak přídaní "c" nemohlo kontakt mezi "a" a "b" ovlivnit
249 č existovat část, která patří do (QHull) konvexní obálky.
250 č 2. Při přidani vzorku "d" musíme aktualizovat všechny vazby všech
251 č sousedících s tím d-čkem vzorků. To je právě proto, že oblast kontaktu
252 č jsou DVA sousedících vzorků. I když vzorek "d" nemá kontakt s "c",
253 č pouze s "a" a "b", pořád můžou existovat bodíky "ac" a "bc", pro které
254 č "c" a "d" stanou nejbližší.
255
256 č Neplatí:
257 č 2. (Při přidani vzorku "c"). Jakože neexistují-li kontakty mezi vzorky "c" a "a",
258 č a mezi "c" a "b", tak přídaní "c" nemmůže kontakt mezi "a" a "b" ovlivnit.
252 259 """ """
253 260 def __init__(self, sample_box, hull, model_space='G', \ def __init__(self, sample_box, hull, model_space='G', \
254 261 p_norm=2, ns=1000, p_base=0.5, auto_update=True, \ p_norm=2, ns=1000, p_base=0.5, auto_update=True, \
 
... ... class ContactVoronoi:
271 278 self._nsim = 0 self._nsim = 0
272 279 self.nodes = WardrobeDict() self.nodes = WardrobeDict()
273 280 # checklist # checklist
274 self.couples = {} #č
275 self.direct_contacts = {}
281 #č defaultdict zajistí, že na nás dycky čeka seznam,
282 #č do kterého můžeme přidávat indexy bodíků
283 self.couples = collections.defaultdict(list)
276 284 self.couples_stats = {} self.couples_stats = {}
277 self.mixed_couples = set()
278 self.red_couples = set()
285 self.mixed_couples = {}
286 self.red_couples = {}
279 287 #č uvnitř třídy ještě můžeme ordnung dodržovat #č uvnitř třídy ještě můžeme ordnung dodržovat
280 self._indices_to_update = set()
288 self._indices_to_update = set() # set of couples to update
281 289 self._nodes_to_check_outsides = [] self._nodes_to_check_outsides = []
282 290
283 291
 
... ... class ContactVoronoi:
288 296 """ """
289 297 ## checklist ## checklist
290 298 self.couples = {} # dict of active contacts {couple_indices: list of nodes} self.couples = {} # dict of active contacts {couple_indices: list of nodes}
291 self.direct_contacts = {} # dict of direct contacts {couple_indices: node_idx}
292 299 self.couples_stats = {} self.couples_stats = {}
293 self.mixed_couples = set()
294 self.red_couples = set()
295 self._add_indices_to_update(j) # set of all the "j"s for the mutual updates
300 self.mixed_couples = {} ##č pár slovníků reprezentativních sad vzorků
301 self.red_couples = {} ## {couple_indices: node_idx}
302 self._add_indices_to_update(j)
296 303 self._nodes_to_check_outsides = [] #č seznam indexů, projedu jednoduše smyčkou self._nodes_to_check_outsides = [] #č seznam indexů, projedu jednoduše smyčkou
297 304 """ """
298 305
299 306 def _update(self): def _update(self):
300 307 if self.auto_update: if self.auto_update:
308 ##č můžeme udělat obraceně -
309 ##č je-li to nutné, nechť si uživatel třídy
310 ##č zajístí správnost autsajdů
311 ##č a teprvé poté volá update()
312 #č Ale nebudeme. Po aktualizaci něco i zmízí,
313 #č tak si ušetříme kus práce
301 314 self.update() self.update()
302 315 self.update_outside() self.update_outside()
303 316
 
... ... class ContactVoronoi:
356 369
357 370
358 371 #č project páry na update #č project páry na update
359 #č pokud _nsim > 0, tak není možné, že by nebyly apdejty
360 #č "nejmenší" pár je (1, 0), takže
361 #č "i" může být v rozmězí od 1 do _nsim-1 (včetně)
362 #č u prvního indexu musíme dodržovat pořadí procházky
363 for i in range(self._nsim - 1, 0, -1):
364 if i in self._indices_to_update:
365 self._indices_to_update.remove(i)
366 for j in self._indices_to_update:
367 if ((i, j) in self.mixed_couples) or ((i, j) in self.red_couples):
368 self.update_couple((i, j))
369
370 #č nechcu ani kontrolovat zda-li, jestli, není-li. Mouchy.
371 #if
372 # break
372 for couple_indices in self._indices_to_update:
373 #č nepodporuje slovník množinové operace
374 if couple_indices in self.couples:
375 #č i kdyby někdo (nelegálně!) přímo volal update_couple()
376 #č žádná katastrofa se dít nebude
377 #č defaultdict vytvoří prazdný seznam,
378 #č ale bez bodíků se aktualizace brzy skončí :)
379 self.update_couple(couple_indices)
380 self._indices_to_update.clear()
381
382 #č neplatí. Bohužel
383 # #č pokud _nsim > 0, tak není možné, že by nebyly apdejty
384 # #č "nejmenší" pár je (1, 0), takže
385 # #č "i" může být v rozmězí od 1 do _nsim-1 (včetně)
386 # #č u prvního indexu musíme dodržovat pořadí procházky
387 # for i in range(self._nsim - 1, 0, -1):
388 # if i in self._indices_to_update:
389 # self._indices_to_update.remove(i)
390 # for j in self._indices_to_update:
391 # if ((i, j) in self.mixed_couples) or ((i, j) in self.red_couples):
392 # self.update_couple((i, j))
393 #
394 # #č nechcu ani kontrolovat zda-li, jestli, není-li. Mouchy.
395 # #if
396 # # break
373 397
374 398
375 399
 
... ... class ContactVoronoi:
379 403 #č i-té indexy jsou ty čerstvé, přes ně iterujeme #č i-té indexy jsou ty čerstvé, přes ně iterujeme
380 404 #č j-té - ty bežné, protí ním rozhodujeme #č j-té - ty bežné, protí ním rozhodujeme
381 405 if j < self._nsim: if j < self._nsim:
382 self._indices_to_update.add(j)
406 for k in range(j):
407 self._indices_to_update.add((j, k))
408 for k in range(j+1, self._nsim):
409 self._indices_to_update.add((k, j))
410
411 #č no nevím tedy co je rychlejší
412 #č triviální funkce,
413 #č neco hračky s pythonovými iteratoráma
414 # for k in range(self._nsim):
415 # #č budou tam tedy i páry druhu (j, j), (k, k)
416 # #č ale to nevadí - na updejtu
417 # #č funkce je nenajde je v databazí
418 # #č a na ně vykašle
419 # self._indices_to_update.add((max(j,k), min(j,k)))
383 420
384 421
385 422 def update_couple(self, couple_indices, event_id): def update_couple(self, couple_indices, event_id):
 
... ... class ContactVoronoi:
757 794
758 795 idx = self.nodes.add(nodes) idx = self.nodes.add(nodes)
759 796 ## checklist ## checklist
760 #self.couples #č další kód, kdyby něco
761 self.direct_contacts[couple_indices] = idx
762 #self._nodes_to_check_outsides #č nemůže být outside
797 self.couples[couple_indices].append(idx)
798 #self.couples_stats #č nevím
799 #self.mixed_couples
800 #self.red_couples
801 #self._add_indices_to_update(j) #č vždyť já nevím, jestli se jedná o aktualizaci
802 self._nodes_to_check_outsides.append(idx)
763 803
764 804 # -1 = 'outside', 0=success, 1=failure, 2=mix # -1 = 'outside', 0=success, 1=failure, 2=mix
765 if (event_id == 2) and (self.on_add_mixed is not None):
766 self.on_add_mixed(idx)
805 if event_id == 2:
806 self.mixed_couples.add(couple_indices)
807 if self.on_add_mixed is not None:
808 self.on_add_mixed(idx)
809 else:
810 self.red_couples.add(couple_indices)
767 811
768 ## checklist
769 self.couples = {} # dict of active contacts {couple_indices: list of nodes}
770 self.direct_contacts = {} # dict of direct contacts {couple_indices: node_idx}
771 self.couples_stats = {}
772 self.mixed_couples = set()
773 self.red_couples = set()
774 self._add_indices_to_update(j) # set of all the "j"s for the mutual updates
775 self._nodes_to_check_outsides = [] #č seznam indexů, projedu jednoduše smyčkou
776 812
777 self.red_couples.add((i, j))
778 813
779 self.mixed_couples.add((i, j))
780 814
781 815
782 816
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