PaIRS-UniNa 0.2.3__cp312-cp312-macosx_10_9_universal2.whl → 0.2.5__cp312-cp312-macosx_10_9_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of PaIRS-UniNa might be problematic. Click here for more details.
- PaIRS_UniNa/Changes.txt +50 -6
- PaIRS_UniNa/Custom_Top.py +1 -1
- PaIRS_UniNa/Explorer.py +70 -42
- PaIRS_UniNa/Input_Tab.py +17 -5
- PaIRS_UniNa/Input_Tab_CalVi.py +1 -0
- PaIRS_UniNa/Input_Tab_tools.py +85 -40
- PaIRS_UniNa/Output_Tab.py +110 -17
- PaIRS_UniNa/PaIRS_PIV.py +56 -1
- PaIRS_UniNa/PaIRS_pypacks.py +148 -9
- PaIRS_UniNa/Process_Tab.py +6 -11
- PaIRS_UniNa/Process_Tab_Disp.py +11 -4
- PaIRS_UniNa/TabTools.py +121 -42
- PaIRS_UniNa/Vis_Tab.py +423 -126
- PaIRS_UniNa/Vis_Tab_CalVi.py +23 -5
- PaIRS_UniNa/Whatsnew.py +15 -6
- PaIRS_UniNa/_PaIRS_PIV.so +0 -0
- PaIRS_UniNa/__init__.py +2 -2
- PaIRS_UniNa/addwidgets_ps.py +50 -39
- PaIRS_UniNa/gPaIRS.py +500 -148
- PaIRS_UniNa/icons/bugfix.png +0 -0
- PaIRS_UniNa/icons/pylog.png +0 -0
- PaIRS_UniNa/icons/python_warning.png +0 -0
- PaIRS_UniNa/icons/queue.png +0 -0
- PaIRS_UniNa/icons/save_and_stop.png +0 -0
- PaIRS_UniNa/icons/star.png +0 -0
- PaIRS_UniNa/icons/step_inheritance.png +0 -0
- PaIRS_UniNa/icons/uninitialized.png +0 -0
- PaIRS_UniNa/icons/window.png +0 -0
- PaIRS_UniNa/parForMulti.py +7 -5
- PaIRS_UniNa/parForWorkers.py +101 -124
- PaIRS_UniNa/pivParFor.py +2 -2
- PaIRS_UniNa/preProcParFor.py +4 -4
- PaIRS_UniNa/procTools.py +25 -13
- PaIRS_UniNa/rqrdpckgs.txt +8 -0
- PaIRS_UniNa/stereoPivParFor.py +2 -2
- PaIRS_UniNa/tabSplitter.py +4 -2
- PaIRS_UniNa/ui_Log_Tab.py +8 -6
- PaIRS_UniNa/ui_Output_Tab.py +6 -3
- PaIRS_UniNa/ui_Process_Tab.py +19 -19
- PaIRS_UniNa/ui_Process_Tab_Disp.py +173 -2
- PaIRS_UniNa/ui_Vis_Tab.py +331 -195
- PaIRS_UniNa/ui_gPairs.py +81 -39
- PaIRS_UniNa/ui_infoPaIRS.py +128 -6
- PaIRS_UniNa/whatsnew.txt +6 -7
- {PaIRS_UniNa-0.2.3.dist-info → pairs_unina-0.2.5.dist-info}/METADATA +39 -23
- {PaIRS_UniNa-0.2.3.dist-info → pairs_unina-0.2.5.dist-info}/RECORD +48 -44
- {PaIRS_UniNa-0.2.3.dist-info → pairs_unina-0.2.5.dist-info}/WHEEL +1 -1
- PaIRS_UniNa/icons/order.png +0 -0
- PaIRS_UniNa/icons/order_reverse.png +0 -0
- PaIRS_UniNa/icons/pencil_bw.png +0 -0
- PaIRS_UniNa/icons/run_piv.png +0 -0
- PaIRS_UniNa-0.2.3.dist-info/LICENSE +0 -19
- {PaIRS_UniNa-0.2.3.dist-info → pairs_unina-0.2.5.dist-info}/top_level.txt +0 -0
PaIRS_UniNa/ui_gPairs.py
CHANGED
|
@@ -2,7 +2,7 @@ from .addwidgets_ps import icons_path
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
################################################################################
|
|
5
|
-
## Form generated from reading UI file '
|
|
5
|
+
## Form generated from reading UI file 'gPairsgdPnui.ui'
|
|
6
6
|
##
|
|
7
7
|
## Created by: Qt User Interface Compiler version 6.7.2
|
|
8
8
|
##
|
|
@@ -203,6 +203,20 @@ class Ui_gPairs(object):
|
|
|
203
203
|
|
|
204
204
|
self.horizontalLayout_10.addWidget(self.button_colormode)
|
|
205
205
|
|
|
206
|
+
self.button_packissue = QToolButton(self.w_Buttons_Run)
|
|
207
|
+
self.button_packissue.setObjectName(u"button_packissue")
|
|
208
|
+
self.button_packissue.setMinimumSize(QSize(30, 30))
|
|
209
|
+
self.button_packissue.setMaximumSize(QSize(30, 30))
|
|
210
|
+
self.button_packissue.setFont(font1)
|
|
211
|
+
self.button_packissue.setStyleSheet(u"QToolButton{border: none}")
|
|
212
|
+
icon15 = QIcon()
|
|
213
|
+
icon15.addFile(u""+ icons_path +"python_warning.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
214
|
+
self.button_packissue.setIcon(icon15)
|
|
215
|
+
self.button_packissue.setIconSize(QSize(24, 24))
|
|
216
|
+
self.button_packissue.setCheckable(False)
|
|
217
|
+
|
|
218
|
+
self.horizontalLayout_10.addWidget(self.button_packissue)
|
|
219
|
+
|
|
206
220
|
self.hs_logo = QSpacerItem(200, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
207
221
|
|
|
208
222
|
self.horizontalLayout_10.addItem(self.hs_logo)
|
|
@@ -267,9 +281,9 @@ class Ui_gPairs(object):
|
|
|
267
281
|
self.button_pause.setFont(font1)
|
|
268
282
|
self.button_pause.setToolTipDuration(-1)
|
|
269
283
|
self.button_pause.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
self.button_pause.setIcon(
|
|
284
|
+
icon16 = QIcon()
|
|
285
|
+
icon16.addFile(u""+ icons_path +"pause.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
286
|
+
self.button_pause.setIcon(icon16)
|
|
273
287
|
self.button_pause.setIconSize(QSize(28, 28))
|
|
274
288
|
self.button_pause.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
275
289
|
self.button_pause.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
@@ -303,7 +317,7 @@ class Ui_gPairs(object):
|
|
|
303
317
|
|
|
304
318
|
self.horizontalLayout_10.addWidget(self.button_Run)
|
|
305
319
|
|
|
306
|
-
self.horizontalLayout_10.setStretch(
|
|
320
|
+
self.horizontalLayout_10.setStretch(4, 1)
|
|
307
321
|
|
|
308
322
|
self.verticalLayout.addWidget(self.w_Buttons_Run)
|
|
309
323
|
|
|
@@ -427,9 +441,9 @@ class Ui_gPairs(object):
|
|
|
427
441
|
self.button_Run_CalVi.setMinimumSize(QSize(80, 40))
|
|
428
442
|
self.button_Run_CalVi.setMaximumSize(QSize(80, 40))
|
|
429
443
|
self.button_Run_CalVi.setFont(font4)
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
self.button_Run_CalVi.setIcon(
|
|
444
|
+
icon17 = QIcon()
|
|
445
|
+
icon17.addFile(u""+ icons_path +"play.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
446
|
+
self.button_Run_CalVi.setIcon(icon17)
|
|
433
447
|
|
|
434
448
|
self.horizontalLayout_2.addWidget(self.button_Run_CalVi)
|
|
435
449
|
|
|
@@ -440,9 +454,9 @@ class Ui_gPairs(object):
|
|
|
440
454
|
self.button_Abort_CalVi.setMinimumSize(QSize(80, 40))
|
|
441
455
|
self.button_Abort_CalVi.setMaximumSize(QSize(80, 40))
|
|
442
456
|
self.button_Abort_CalVi.setFont(font4)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
self.button_Abort_CalVi.setIcon(
|
|
457
|
+
icon18 = QIcon()
|
|
458
|
+
icon18.addFile(u""+ icons_path +"abort.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
459
|
+
self.button_Abort_CalVi.setIcon(icon18)
|
|
446
460
|
|
|
447
461
|
self.horizontalLayout_2.addWidget(self.button_Abort_CalVi)
|
|
448
462
|
|
|
@@ -455,9 +469,9 @@ class Ui_gPairs(object):
|
|
|
455
469
|
self.button_restore_undo.setFont(font1)
|
|
456
470
|
self.button_restore_undo.setToolTipDuration(-1)
|
|
457
471
|
self.button_restore_undo.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
self.button_restore_undo.setIcon(
|
|
472
|
+
icon19 = QIcon()
|
|
473
|
+
icon19.addFile(u""+ icons_path +"restore_undo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
474
|
+
self.button_restore_undo.setIcon(icon19)
|
|
461
475
|
self.button_restore_undo.setIconSize(QSize(28, 28))
|
|
462
476
|
self.button_restore_undo.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
463
477
|
self.button_restore_undo.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
@@ -473,15 +487,33 @@ class Ui_gPairs(object):
|
|
|
473
487
|
self.button_reset_step.setFont(font1)
|
|
474
488
|
self.button_reset_step.setToolTipDuration(-1)
|
|
475
489
|
self.button_reset_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
self.button_reset_step.setIcon(
|
|
490
|
+
icon20 = QIcon()
|
|
491
|
+
icon20.addFile(u""+ icons_path +"reset.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
492
|
+
self.button_reset_step.setIcon(icon20)
|
|
479
493
|
self.button_reset_step.setIconSize(QSize(28, 28))
|
|
480
494
|
self.button_reset_step.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
481
495
|
self.button_reset_step.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
482
496
|
|
|
483
497
|
self.horizontalLayout_2.addWidget(self.button_reset_step)
|
|
484
498
|
|
|
499
|
+
self.button_step_inherit = QToolButton(self.w_header)
|
|
500
|
+
self.button_step_inherit.setObjectName(u"button_step_inherit")
|
|
501
|
+
sizePolicy.setHeightForWidth(self.button_step_inherit.sizePolicy().hasHeightForWidth())
|
|
502
|
+
self.button_step_inherit.setSizePolicy(sizePolicy)
|
|
503
|
+
self.button_step_inherit.setMinimumSize(QSize(36, 36))
|
|
504
|
+
self.button_step_inherit.setMaximumSize(QSize(36, 36))
|
|
505
|
+
self.button_step_inherit.setFont(font1)
|
|
506
|
+
self.button_step_inherit.setToolTipDuration(-1)
|
|
507
|
+
self.button_step_inherit.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
508
|
+
icon21 = QIcon()
|
|
509
|
+
icon21.addFile(u""+ icons_path +"step_inheritance.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
510
|
+
self.button_step_inherit.setIcon(icon21)
|
|
511
|
+
self.button_step_inherit.setIconSize(QSize(28, 28))
|
|
512
|
+
self.button_step_inherit.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
513
|
+
self.button_step_inherit.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
514
|
+
|
|
515
|
+
self.horizontalLayout_2.addWidget(self.button_step_inherit)
|
|
516
|
+
|
|
485
517
|
self.button_copy_step = QToolButton(self.w_header)
|
|
486
518
|
self.button_copy_step.setObjectName(u"button_copy_step")
|
|
487
519
|
sizePolicy.setHeightForWidth(self.button_copy_step.sizePolicy().hasHeightForWidth())
|
|
@@ -491,9 +523,9 @@ class Ui_gPairs(object):
|
|
|
491
523
|
self.button_copy_step.setFont(font1)
|
|
492
524
|
self.button_copy_step.setToolTipDuration(-1)
|
|
493
525
|
self.button_copy_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
self.button_copy_step.setIcon(
|
|
526
|
+
icon22 = QIcon()
|
|
527
|
+
icon22.addFile(u""+ icons_path +"copy_process.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
528
|
+
self.button_copy_step.setIcon(icon22)
|
|
497
529
|
self.button_copy_step.setIconSize(QSize(28, 28))
|
|
498
530
|
self.button_copy_step.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
499
531
|
self.button_copy_step.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
@@ -509,9 +541,9 @@ class Ui_gPairs(object):
|
|
|
509
541
|
self.button_link_step.setFont(font1)
|
|
510
542
|
self.button_link_step.setToolTipDuration(-1)
|
|
511
543
|
self.button_link_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
self.button_link_step.setIcon(
|
|
544
|
+
icon23 = QIcon()
|
|
545
|
+
icon23.addFile(u""+ icons_path +"unlink.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
546
|
+
self.button_link_step.setIcon(icon23)
|
|
515
547
|
self.button_link_step.setIconSize(QSize(28, 28))
|
|
516
548
|
self.button_link_step.setCheckable(True)
|
|
517
549
|
self.button_link_step.setChecked(False)
|
|
@@ -525,9 +557,9 @@ class Ui_gPairs(object):
|
|
|
525
557
|
self.workspace_icon.setMinimumSize(QSize(60, 60))
|
|
526
558
|
self.workspace_icon.setMaximumSize(QSize(60, 60))
|
|
527
559
|
self.workspace_icon.setStyleSheet(u"QPushButton{border: none,;background: none}")
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
self.workspace_icon.setIcon(
|
|
560
|
+
icon24 = QIcon()
|
|
561
|
+
icon24.addFile(u""+ icons_path +"workspace.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
562
|
+
self.workspace_icon.setIcon(icon24)
|
|
531
563
|
self.workspace_icon.setIconSize(QSize(60, 60))
|
|
532
564
|
|
|
533
565
|
self.horizontalLayout_2.addWidget(self.workspace_icon)
|
|
@@ -596,9 +628,9 @@ class Ui_gPairs(object):
|
|
|
596
628
|
self.title_icon.setMinimumSize(QSize(60, 60))
|
|
597
629
|
self.title_icon.setMaximumSize(QSize(60, 60))
|
|
598
630
|
self.title_icon.setStyleSheet(u"QPushButton{border: none,;background: none}")
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
self.title_icon.setIcon(
|
|
631
|
+
icon25 = QIcon()
|
|
632
|
+
icon25.addFile(u""+ icons_path +"project.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
633
|
+
self.title_icon.setIcon(icon25)
|
|
602
634
|
self.title_icon.setIconSize(QSize(60, 60))
|
|
603
635
|
|
|
604
636
|
self.horizontalLayout_2.addWidget(self.title_icon)
|
|
@@ -657,7 +689,7 @@ class Ui_gPairs(object):
|
|
|
657
689
|
gPairs.setStatusBar(self.statusbar)
|
|
658
690
|
self.menubar = QMenuBar(gPairs)
|
|
659
691
|
self.menubar.setObjectName(u"menubar")
|
|
660
|
-
self.menubar.setGeometry(QRect(0, 0, 1800,
|
|
692
|
+
self.menubar.setGeometry(QRect(0, 0, 1800, 43))
|
|
661
693
|
self.menubar.setFont(font)
|
|
662
694
|
self.menubar.setNativeMenuBar(False)
|
|
663
695
|
self.menuFile = QMenu(self.menubar)
|
|
@@ -666,14 +698,14 @@ class Ui_gPairs(object):
|
|
|
666
698
|
self.menuHelp.setObjectName(u"menuHelp")
|
|
667
699
|
self.menu = QMenu(self.menubar)
|
|
668
700
|
self.menu.setObjectName(u"menu")
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
self.menu.setIcon(
|
|
701
|
+
icon26 = QIcon()
|
|
702
|
+
icon26.addFile(u""+ icons_path +"flaticon_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
703
|
+
self.menu.setIcon(icon26)
|
|
672
704
|
self.menuPaIRS = QMenu(self.menu)
|
|
673
705
|
self.menuPaIRS.setObjectName(u"menuPaIRS")
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
self.menuPaIRS.setIcon(
|
|
706
|
+
icon27 = QIcon()
|
|
707
|
+
icon27.addFile(u""+ icons_path +"logo_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
708
|
+
self.menuPaIRS.setIcon(icon27)
|
|
677
709
|
gPairs.setMenuBar(self.menubar)
|
|
678
710
|
QWidget.setTabOrder(self.button_PaIRS_download, self.button_colormode)
|
|
679
711
|
QWidget.setTabOrder(self.button_colormode, self.spin_nworkers)
|
|
@@ -681,8 +713,10 @@ class Ui_gPairs(object):
|
|
|
681
713
|
QWidget.setTabOrder(self.button_pause, self.button_Run)
|
|
682
714
|
QWidget.setTabOrder(self.button_Run, self.button_Run_CalVi)
|
|
683
715
|
QWidget.setTabOrder(self.button_Run_CalVi, self.button_Abort_CalVi)
|
|
684
|
-
QWidget.setTabOrder(self.button_Abort_CalVi, self.
|
|
685
|
-
QWidget.setTabOrder(self.
|
|
716
|
+
QWidget.setTabOrder(self.button_Abort_CalVi, self.button_restore_undo)
|
|
717
|
+
QWidget.setTabOrder(self.button_restore_undo, self.button_reset_step)
|
|
718
|
+
QWidget.setTabOrder(self.button_reset_step, self.button_step_inherit)
|
|
719
|
+
QWidget.setTabOrder(self.button_step_inherit, self.button_copy_step)
|
|
686
720
|
QWidget.setTabOrder(self.button_copy_step, self.button_link_step)
|
|
687
721
|
QWidget.setTabOrder(self.button_link_step, self.workspace_icon)
|
|
688
722
|
QWidget.setTabOrder(self.workspace_icon, self.title_icon)
|
|
@@ -755,6 +789,10 @@ class Ui_gPairs(object):
|
|
|
755
789
|
self.button_colormode.setToolTip(QCoreApplication.translate("gPairs", u"Change color mode", None))
|
|
756
790
|
#endif // QT_CONFIG(tooltip)
|
|
757
791
|
self.button_colormode.setText("")
|
|
792
|
+
#if QT_CONFIG(tooltip)
|
|
793
|
+
self.button_packissue.setToolTip(QCoreApplication.translate("gPairs", u"Package requirements not satisfied", None))
|
|
794
|
+
#endif // QT_CONFIG(tooltip)
|
|
795
|
+
self.button_packissue.setText("")
|
|
758
796
|
self.label_updating_import.setText("")
|
|
759
797
|
self.label_updating_pairs.setText("")
|
|
760
798
|
#if QT_CONFIG(tooltip)
|
|
@@ -791,7 +829,7 @@ class Ui_gPairs(object):
|
|
|
791
829
|
#endif // QT_CONFIG(tooltip)
|
|
792
830
|
self.button_Run_CalVi.setText(QCoreApplication.translate("gPairs", u"Run", None))
|
|
793
831
|
#if QT_CONFIG(shortcut)
|
|
794
|
-
self.button_Run_CalVi.setShortcut(QCoreApplication.translate("gPairs", u"Ctrl+Return", None))
|
|
832
|
+
self.button_Run_CalVi.setShortcut(QCoreApplication.translate("gPairs", u"Ctrl+Shift+Return", None))
|
|
795
833
|
#endif // QT_CONFIG(shortcut)
|
|
796
834
|
#if QT_CONFIG(tooltip)
|
|
797
835
|
self.button_Abort_CalVi.setToolTip(QCoreApplication.translate("gPairs", u"Stop the process without saving results", None))
|
|
@@ -808,6 +846,10 @@ class Ui_gPairs(object):
|
|
|
808
846
|
self.button_reset_step.setToolTip(QCoreApplication.translate("gPairs", u"Reset the current process step", None))
|
|
809
847
|
#endif // QT_CONFIG(tooltip)
|
|
810
848
|
self.button_reset_step.setText("")
|
|
849
|
+
#if QT_CONFIG(tooltip)
|
|
850
|
+
self.button_step_inherit.setToolTip(QCoreApplication.translate("gPairs", u"Copy input/output data from another step", None))
|
|
851
|
+
#endif // QT_CONFIG(tooltip)
|
|
852
|
+
self.button_step_inherit.setText("")
|
|
811
853
|
#if QT_CONFIG(tooltip)
|
|
812
854
|
self.button_copy_step.setToolTip(QCoreApplication.translate("gPairs", u"Copy settings from another process step", None))
|
|
813
855
|
#endif // QT_CONFIG(tooltip)
|
PaIRS_UniNa/ui_infoPaIRS.py
CHANGED
|
@@ -2,9 +2,9 @@ from .addwidgets_ps import icons_path
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
################################################################################
|
|
5
|
-
## Form generated from reading UI file '
|
|
5
|
+
## Form generated from reading UI file 'infoPaIRSWjIuhO.ui'
|
|
6
6
|
##
|
|
7
|
-
## Created by: Qt User Interface Compiler version 6.
|
|
7
|
+
## Created by: Qt User Interface Compiler version 6.9.1
|
|
8
8
|
##
|
|
9
9
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
|
10
10
|
################################################################################
|
|
@@ -172,7 +172,7 @@ class Ui_InfoPaiRS(object):
|
|
|
172
172
|
self.scrollArea_ger_cv.setWidgetResizable(True)
|
|
173
173
|
self.scrollAreaWidgetContents_ger_cv = QWidget()
|
|
174
174
|
self.scrollAreaWidgetContents_ger_cv.setObjectName(u"scrollAreaWidgetContents_ger_cv")
|
|
175
|
-
self.scrollAreaWidgetContents_ger_cv.setGeometry(QRect(0, 0,
|
|
175
|
+
self.scrollAreaWidgetContents_ger_cv.setGeometry(QRect(0, 0, 494, 266))
|
|
176
176
|
self.verticalLayout = QVBoxLayout(self.scrollAreaWidgetContents_ger_cv)
|
|
177
177
|
self.verticalLayout.setSpacing(0)
|
|
178
178
|
self.verticalLayout.setObjectName(u"verticalLayout")
|
|
@@ -247,7 +247,7 @@ class Ui_InfoPaiRS(object):
|
|
|
247
247
|
self.scrollArea_tom_cv.setWidgetResizable(True)
|
|
248
248
|
self.scrollAreaWidgetContents_tom_cv = QWidget()
|
|
249
249
|
self.scrollAreaWidgetContents_tom_cv.setObjectName(u"scrollAreaWidgetContents_tom_cv")
|
|
250
|
-
self.scrollAreaWidgetContents_tom_cv.setGeometry(QRect(0, 0,
|
|
250
|
+
self.scrollAreaWidgetContents_tom_cv.setGeometry(QRect(0, 0, 494, 266))
|
|
251
251
|
self.verticalLayout_2 = QVBoxLayout(self.scrollAreaWidgetContents_tom_cv)
|
|
252
252
|
self.verticalLayout_2.setSpacing(0)
|
|
253
253
|
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
|
@@ -325,7 +325,7 @@ class Ui_InfoPaiRS(object):
|
|
|
325
325
|
self.scrollArea_list_ref.setWidgetResizable(True)
|
|
326
326
|
self.scrollAreaWidgetContents = QWidget()
|
|
327
327
|
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
|
|
328
|
-
self.scrollAreaWidgetContents.setGeometry(QRect(0, 0,
|
|
328
|
+
self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 649, 582))
|
|
329
329
|
self.scrollAreaWidgetContents.setStyleSheet(u"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
|
330
330
|
"<ui version=\"4.0\">\n"
|
|
331
331
|
" <widget name=\"__qt_fake_top_level\">\n"
|
|
@@ -389,13 +389,133 @@ class Ui_InfoPaiRS(object):
|
|
|
389
389
|
self.horizontalLayout_2.addWidget(self.scrollArea_list_ref)
|
|
390
390
|
|
|
391
391
|
self.tabWidget.addTab(self.references, "")
|
|
392
|
+
self.requirements = QWidget()
|
|
393
|
+
self.requirements.setObjectName(u"requirements")
|
|
394
|
+
self.horizontalLayout_3 = QHBoxLayout(self.requirements)
|
|
395
|
+
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
|
396
|
+
self.scrollArea_req = QScrollArea(self.requirements)
|
|
397
|
+
self.scrollArea_req.setObjectName(u"scrollArea_req")
|
|
398
|
+
self.scrollArea_req.setStyleSheet(u" QScrollArea {\n"
|
|
399
|
+
" border: 1pix solid gray;\n"
|
|
400
|
+
" }\n"
|
|
401
|
+
"\n"
|
|
402
|
+
"QScrollBar:horizontal\n"
|
|
403
|
+
" {\n"
|
|
404
|
+
" height: 15px;\n"
|
|
405
|
+
" margin: 3px 0px 3px 0px;\n"
|
|
406
|
+
" border: 1px transparent #2A2929;\n"
|
|
407
|
+
" border-radius: 4px;\n"
|
|
408
|
+
" background-color: rgba(200,200,200,50); /* #2A2929; */\n"
|
|
409
|
+
" }\n"
|
|
410
|
+
"\n"
|
|
411
|
+
"QScrollBar::handle:horizontal\n"
|
|
412
|
+
" {\n"
|
|
413
|
+
" background-color: rgba(180,180,180,180); /* #605F5F; */\n"
|
|
414
|
+
" min-width: 30px;\n"
|
|
415
|
+
" border-radius: 4px;\n"
|
|
416
|
+
" }\n"
|
|
417
|
+
"\n"
|
|
418
|
+
"QScrollBar:vertical\n"
|
|
419
|
+
" {\n"
|
|
420
|
+
" background-color: rgba(200,200,200,50); ;\n"
|
|
421
|
+
" width: 15px;\n"
|
|
422
|
+
" margin: 10px 3px 10px 3px;\n"
|
|
423
|
+
" border: 1px transparent #2A2929;\n"
|
|
424
|
+
" border-radius: 4px;\n"
|
|
425
|
+
" }\n"
|
|
426
|
+
"\n"
|
|
427
|
+
"QScrollBar::handle:vertical\n"
|
|
428
|
+
" {\n"
|
|
429
|
+
" background-color: rgba(180,180,180,180); /* #605F5F; */\n"
|
|
430
|
+
" min-height: 30px;\n"
|
|
431
|
+
" border-radius: 4px;\n"
|
|
432
|
+
" }\n"
|
|
433
|
+
"\n"
|
|
434
|
+
"QScrollBar::add-line {\n"
|
|
435
|
+
" border: none;\n"
|
|
436
|
+
" "
|
|
437
|
+
" background: none;\n"
|
|
438
|
+
" }\n"
|
|
439
|
+
"\n"
|
|
440
|
+
"QScrollBar::sub-line {\n"
|
|
441
|
+
" border: none;\n"
|
|
442
|
+
" background: none;\n"
|
|
443
|
+
" }\n"
|
|
444
|
+
"")
|
|
445
|
+
self.scrollArea_req.setWidgetResizable(True)
|
|
446
|
+
self.scrollAreaWidgetContents_2 = QWidget()
|
|
447
|
+
self.scrollAreaWidgetContents_2.setObjectName(u"scrollAreaWidgetContents_2")
|
|
448
|
+
self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0, 664, 558))
|
|
449
|
+
self.scrollAreaWidgetContents_2.setStyleSheet(u"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
|
450
|
+
"<ui version=\"4.0\">\n"
|
|
451
|
+
" <widget name=\"__qt_fake_top_level\">\n"
|
|
452
|
+
" <widget class=\"QLabel\" name=\"list_ref\">\n"
|
|
453
|
+
" <property name=\"geometry\">\n"
|
|
454
|
+
" <rect>\n"
|
|
455
|
+
" <x>20</x>\n"
|
|
456
|
+
" <y>12</y>\n"
|
|
457
|
+
" <width>636</width>\n"
|
|
458
|
+
" <height>433</height>\n"
|
|
459
|
+
" </rect>\n"
|
|
460
|
+
" </property>\n"
|
|
461
|
+
" <property name=\"text\">\n"
|
|
462
|
+
" <string><html><head/><body><p align="justify"><span style=" font-size:11pt;">Please cite the following works if you intend to use PaIRS-UniNa for your purposes: </span></p><p align="justify"><span style=" font-size:11pt; font-weight:700;">[1] </span><span style=" font-size:11pt;">Astarita, T., &amp; Cardone, G. (2005). &quot;Analysis of interpolation schemes for image deformation methods in PIV&quot;. </span><span style=" font-size:11pt; font-style:italic;">Experiments in Fluids</span"
|
|
463
|
+
"><span style=" font-size:11pt;">, 38(2), 233-243.doi: </span><a href="https://doi.org/10.1007/s00348-004-0902-3"><span style=" text-decoration: underline; color:#0000ff;">10.1007/s00348-004-0902-3</span></a><span style=" font-size:11pt;">. </span></p><p align="justify"><span style=" font-size:11pt; font-weight:700;">[2] </span><span style=" font-size:11pt;">Astarita, T. (2006). &quot;Analysis of interpolation schemes for image deformation methods in PIV: effect of noise on the accuracy and spatial resolution&quot;. </span><span style=" font-size:11pt; font-style:italic;">Experiments in Fluids</span><span style=" font-size:11pt;">, vol. 40 (6): 977-987. doi: </span><a href="https://doi.org/10.1007/s00348-006-0139-4"><span style=" text-decoration: underline; color:#0000ff;">1"
|
|
464
|
+
"0.1007/s00348-006-0139-4</span></a><span style=" font-size:11pt;">. </span></p><p align="justify"><span style=" font-size:11pt; font-weight:700;">[3] </span><span style=" font-size:11pt;">Astarita, T. (2007). &quot;Analysis of weighting windows for image deformation methods in PIV.&quot; </span><span style=" font-size:11pt; font-style:italic;">Experiments in Fluids</span><span style=" font-size:11pt;">, 43(6), 859-872. doi: </span><a href="https://doi.org/10.1007/s00348-007-0314-2"><span style=" text-decoration: underline; color:#0000ff;">10.1007/s00348-007-0314-2</span></a><span style=" font-size:11pt;">. </span></p><p align="justify"><span style=" font-size:11pt; font-weight:700;">[4]</span><span style=" font-size:11pt;"> Astarita, T. "
|
|
465
|
+
"(2008). &quot;Analysis of velocity interpolation schemes for image deformation methods in PIV&quot;. </span><span style=" font-size:11pt; font-style:italic;">Experiments in Fluids</span><span style=" font-size:11pt;">, 45(2), 257-266. doi: </span><a href="https://doi.org/10.1007/s00348-008-0475-7"><span style=" text-decoration: underline; color:#0000ff;">10.1007/s00348-008-0475-7</span></a><span style=" font-size:11pt;">. </span></p><p align="justify"><span style=" font-size:11pt; font-weight:700;">[5] </span><span style=" font-size:11pt;">Astarita, T. (2009). &quot;Adaptive space resolution for PIV&quot;. </span><span style=" font-size:11pt; font-style:italic;">Experiments in Fluids</span><span style=" font-size:11pt;">, 46(6), 1115-1123. doi: </span><a href="http"
|
|
466
|
+
"s://doi.org/10.1007/s00348-009-0618-5"><span style=" text-decoration: underline; color:#0000ff;">10.1007/s00348-009-0618-5</span></a><span style=" font-size:11pt;">. </span></p></body></html></string>\n"
|
|
467
|
+
" </property>\n"
|
|
468
|
+
" <property name=\"textFormat\">\n"
|
|
469
|
+
" <enum>Qt::RichText</enum>\n"
|
|
470
|
+
" </property>\n"
|
|
471
|
+
" <property name=\"alignment\">\n"
|
|
472
|
+
" <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>\n"
|
|
473
|
+
" </property>\n"
|
|
474
|
+
" <property name=\"wordWrap\">\n"
|
|
475
|
+
" <bool>true</bool>\n"
|
|
476
|
+
" </property>\n"
|
|
477
|
+
" <property name=\"margin\">\n"
|
|
478
|
+
" <number>5</number>\n"
|
|
479
|
+
" </property>\n"
|
|
480
|
+
" <property name=\"openExternalLinks\">\n"
|
|
481
|
+
" <bool>true</bool>\n"
|
|
482
|
+
" </property>\n"
|
|
483
|
+
" <property name=\"textInteractionFlags\">\n"
|
|
484
|
+
" <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>\n"
|
|
485
|
+
" </property>\n"
|
|
486
|
+
" </widget>\n"
|
|
487
|
+
" </widget>\n"
|
|
488
|
+
" <resour"
|
|
489
|
+
"ces/>\n"
|
|
490
|
+
"</ui>\n"
|
|
491
|
+
"")
|
|
492
|
+
self.horizontalLayout_4 = QHBoxLayout(self.scrollAreaWidgetContents_2)
|
|
493
|
+
self.horizontalLayout_4.setSpacing(0)
|
|
494
|
+
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
|
|
495
|
+
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
|
|
496
|
+
self.req = QLabel(self.scrollAreaWidgetContents_2)
|
|
497
|
+
self.req.setObjectName(u"req")
|
|
498
|
+
self.req.setTextFormat(Qt.TextFormat.RichText)
|
|
499
|
+
self.req.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignTop)
|
|
500
|
+
self.req.setWordWrap(True)
|
|
501
|
+
self.req.setMargin(5)
|
|
502
|
+
self.req.setOpenExternalLinks(True)
|
|
503
|
+
self.req.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByKeyboard|Qt.TextInteractionFlag.LinksAccessibleByMouse|Qt.TextInteractionFlag.TextBrowserInteraction|Qt.TextInteractionFlag.TextSelectableByKeyboard|Qt.TextInteractionFlag.TextSelectableByMouse)
|
|
504
|
+
|
|
505
|
+
self.horizontalLayout_4.addWidget(self.req)
|
|
506
|
+
|
|
507
|
+
self.scrollArea_req.setWidget(self.scrollAreaWidgetContents_2)
|
|
508
|
+
|
|
509
|
+
self.horizontalLayout_3.addWidget(self.scrollArea_req)
|
|
510
|
+
|
|
511
|
+
self.tabWidget.addTab(self.requirements, "")
|
|
392
512
|
|
|
393
513
|
self.horizontalLayout.addWidget(self.tabWidget)
|
|
394
514
|
|
|
395
515
|
InfoPaiRS.setCentralWidget(self.centralwidget)
|
|
396
516
|
self.menubar = QMenuBar(InfoPaiRS)
|
|
397
517
|
self.menubar.setObjectName(u"menubar")
|
|
398
|
-
self.menubar.setGeometry(QRect(0, 0, 700,
|
|
518
|
+
self.menubar.setGeometry(QRect(0, 0, 700, 33))
|
|
399
519
|
InfoPaiRS.setMenuBar(self.menubar)
|
|
400
520
|
|
|
401
521
|
self.retranslateUi(InfoPaiRS)
|
|
@@ -425,5 +545,7 @@ class Ui_InfoPaiRS(object):
|
|
|
425
545
|
">IEEE Transactions on Pattern Analysis and Machine Intelligence, </span><span style=\" font-size:11pt;\">44(6), 3185-3196</span><span style=\" font-size:11pt; font-weight:700;\">.</span><span style=\" font-size:11pt;\"> doi: </span><a href=\"https://doi.org/10.1109/TPAMI.2020.3046467\"><span style=\" text-decoration: underline; color:#0000ff;\">10.1109/TPAMI.2020.3046467</span></a><span style=\" font-size:11pt;\">. <br/><br/></span><span style=\" font-size:11pt; font-weight:700;\">[2] </span><span style=\" font-size:11pt;\">Paolillo, G., & Astarita, T. (2021). "On the PIV/PTV uncertainty related to calibration of camera systems with refractive surfaces". </span><span style=\" font-size:11pt; font-style:italic;\">Measurement Science and Technology</span><span style=\" font-size:11pt;\">, 32(9), 094006. doi: </span><a href=\"https://doi.org/10.1088/1361-6501/abf3fc\"><span style=\" text-decoration: underline; color:#0000ff;\">10.1088/1361-6501/abf3fc</span></a><span style=\" font-size:11pt;\">. </s"
|
|
426
546
|
"pan></p></body></html>", None))
|
|
427
547
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.references), QCoreApplication.translate("InfoPaiRS", u"References", None))
|
|
548
|
+
self.req.setText(QCoreApplication.translate("InfoPaiRS", u"<html><head/><body><p align=\"justify\"><br/></p></body></html>", None))
|
|
549
|
+
self.tabWidget.setTabText(self.tabWidget.indexOf(self.requirements), QCoreApplication.translate("InfoPaiRS", u"Requirements", None))
|
|
428
550
|
# retranslateUi
|
|
429
551
|
|
PaIRS_UniNa/whatsnew.txt
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* The guide of PaIRS-UniNa v0.2 is finally available! Read it at <a href="https://www.pairs.unina.it/web/PaIRS-UniNa-v020-Guide.pdf"><span style=" text-decoration: underline; color:#0000ff; font-size:11pt">www.pairs.unina.it</a> and unleash the full potential and tricks of this amazing interface for yourself!
|
|
1
|
+
% Fixed critical bugs in launching PIV and stereoscopic PIV processes in special cases.<br><br>Fixed tooltip crash introduced by PySide 6.9.<br><br>Fixed minor bugs in process context menu and copy/link functionality.<br><br>Resolved display bugs in image selection tree and map visualization.<br>
|
|
2
|
+
& PaIRS now checks the compatibility of installed Python packages — if mismatches are detected, the user is warned.<br><br>Disparity maps are now saved in the output folder, along with the constants of the laser sheet plane equation, and can also be visualized in Vis.<br><br>Vis now includes a view restriction tool, allowing the field of view to be limited to the size of the interrogation window.<br>
|
|
3
|
+
* New worker execution logic improves control and robustness during processing.<br><br>Improved GUI responsiveness when defining steps and navigating the process tree.<br><br>Enhanced plotting: coordinate/value display under the cursor is now cleaner and more readable.<br>
|
|
4
|
+
§ Releases for Python 3.9 are no longer provided!<br><br>New Python 3.13 builds are now available!<br>
|
|
5
|
+
|
|
6
|
+
# !=critical issue, %=bugfix, &=announcement, *=improvement, £=bold font without icon, §=python distribution
|
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: PaIRS_UniNa
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: PaIRS - Particle Image Reconstruction Software
|
|
5
5
|
Home-page: https://pairs.unina.it/
|
|
6
6
|
Author: Gerardo Paolillo and Tommaso Astarita
|
|
7
7
|
Author-email: etfd@unina.it
|
|
8
|
-
License:
|
|
8
|
+
License: LGPL-3.0-or-later
|
|
9
9
|
Keywords: PIV,PaIRS
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
|
|
12
11
|
Classifier: Operating System :: MacOS
|
|
13
12
|
Classifier: Operating System :: Microsoft :: Windows
|
|
14
13
|
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.10
|
|
16
15
|
Description-Content-Type: text/markdown
|
|
17
|
-
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist: pillow
|
|
16
|
+
Requires-Dist: scipy>=1.14.0
|
|
17
|
+
Requires-Dist: matplotlib>=3.9.0
|
|
18
|
+
Requires-Dist: pillow>=10.4.0
|
|
21
19
|
Requires-Dist: numpy>=2.0.0
|
|
22
|
-
Requires-Dist: pyside6>=6.7
|
|
23
|
-
Requires-Dist: unidecode
|
|
24
|
-
Requires-Dist: psutil
|
|
20
|
+
Requires-Dist: pyside6>=6.7.0
|
|
21
|
+
Requires-Dist: unidecode>=1.3.0
|
|
22
|
+
Requires-Dist: psutil>=6.0.0
|
|
23
|
+
Dynamic: author
|
|
24
|
+
Dynamic: author-email
|
|
25
|
+
Dynamic: classifier
|
|
26
|
+
Dynamic: description
|
|
27
|
+
Dynamic: description-content-type
|
|
28
|
+
Dynamic: home-page
|
|
29
|
+
Dynamic: keywords
|
|
30
|
+
Dynamic: license
|
|
31
|
+
Dynamic: requires-dist
|
|
32
|
+
Dynamic: requires-python
|
|
33
|
+
Dynamic: summary
|
|
25
34
|
|
|
26
35
|
# PaIRS-UniNa: **Pa**rticle **I**mage **R**econstruction **S**oftware - **Uni**versity of **Na**ples "Federico II"
|
|
27
36
|
**PaIRS-UniNa** is a project developed by the Experimental Thermo Fluid-Dynamics (ETFD) group of University of Naples "Federico II" since 2000.
|
|
@@ -34,25 +43,32 @@ The current release of PaIRS-UniNa features the module for the 2D planar PIV ana
|
|
|
34
43
|
|
|
35
44
|
CalVi is the calibration module of PaIRS-UniNa and allows accurate optical calibration of single and multiple camera bundles with the camera models mostly used in the PIV community: polynomials, rational functions and the pinhole camera model. Among the other features, it supports camera calibration procedures working with unknown positions and orientations of the calibration target and the integration of the pinhole camera model with a refractive correction model for cylindrical geometries (based on ray-tracing and Snell's law).
|
|
36
45
|
|
|
37
|
-
PaIRS-UniNa is supported by Python 3.
|
|
46
|
+
PaIRS-UniNa is supported by Python 3.10+ and is compatible with all the operating systems, however, the PaIRS-PIV library relies on OpemMP library, which must be installed on the macOS platform. On the other side, PaIRS requires, among other packages, `SciPy` and `matplotlib`.
|
|
38
47
|
|
|
39
48
|
For further information, please visit [PaIRS website](https://www.pairs.unina.it/).
|
|
40
49
|
|
|
41
|
-
## What's new in PaIRS-UniNa 0.2.
|
|
50
|
+
## What's new in PaIRS-UniNa 0.2.5
|
|
42
51
|
|
|
43
|
-
|
|
52
|
+
### Bug fixes:
|
|
53
|
+
- fixed bugs in launching PIV and stereoscopic PIV processes in special cases;
|
|
54
|
+
- fixed tooltip crash introduced by PySide 6.9;
|
|
55
|
+
- corrected package import errors and context menu bugs;
|
|
56
|
+
- resolved multiple visual glitches in image tree selection and map visualization.
|
|
44
57
|
|
|
45
|
-
|
|
58
|
+
### New features:
|
|
59
|
+
- implemented version control of required Python packages with automatic compatibility check and warning;
|
|
60
|
+
- disparity maps are now automatically saved in the output folder and can be visualized in Vis;
|
|
61
|
+
- added tools for restricting view in Vis based on interrogation window size and shifting the view window interactively.
|
|
46
62
|
|
|
47
|
-
###
|
|
63
|
+
### User-interface enhancements:
|
|
64
|
+
- redesigned the execution logic of internal workers for improved control and robustness;
|
|
65
|
+
- improved formatting and display of coordinates and variable values when moving the cursor during map visualization;
|
|
66
|
+
- updated button labels and layout for clarity and consistency.
|
|
48
67
|
|
|
49
|
-
|
|
68
|
+
### Distribution:
|
|
69
|
+
- Support for Python 3.9 has been discontinued;
|
|
70
|
+
- Python 3.13 builds have been successfully created and tested.
|
|
50
71
|
|
|
51
|
-
Introduced the "Laser Equation Plane" box in the Output tab to specify the initial attempt in the disparity step or to independently assign the constant values of the laser plane during the stereoscopic PIV step.
|
|
52
|
-
|
|
53
|
-
Improved stability and interface performance.
|
|
54
|
-
|
|
55
|
-
The guide of PaIRS-UniNa v0.2 is now available. Discover all the information you need for advanced software usage at [www.pairs.unina.it](https://www.pairs.unina.it/web/PaIRS-UniNa-v020-Guide.pdf).
|
|
56
72
|
|
|
57
73
|
## Installation
|
|
58
74
|
All PaIRS-UniNa wheels are distributed under LGPLv3+ licences. The installation can be performed with:
|