BERATools 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.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.
- beratools/__init__.py +1 -7
- beratools/core/algo_centerline.py +491 -351
- beratools/core/algo_common.py +497 -0
- beratools/core/algo_cost.py +192 -0
- beratools/core/{dijkstra_algorithm.py → algo_dijkstra.py} +503 -460
- beratools/core/algo_footprint_rel.py +577 -0
- beratools/core/algo_line_grouping.py +944 -0
- beratools/core/algo_merge_lines.py +214 -0
- beratools/core/algo_split_with_lines.py +304 -0
- beratools/core/algo_tiler.py +428 -0
- beratools/core/algo_vertex_optimization.py +469 -0
- beratools/core/constants.py +52 -86
- beratools/core/logger.py +76 -85
- beratools/core/tool_base.py +196 -133
- beratools/gui/__init__.py +11 -15
- beratools/gui/{beratools.json → assets/beratools.json} +2185 -2300
- beratools/gui/batch_processing_dlg.py +513 -463
- beratools/gui/bt_data.py +481 -487
- beratools/gui/bt_gui_main.py +710 -691
- beratools/gui/main.py +26 -0
- beratools/gui/map_window.py +162 -146
- beratools/gui/tool_widgets.py +725 -493
- beratools/tools/Beratools_r_script.r +1120 -1120
- beratools/tools/Ht_metrics.py +116 -116
- beratools/tools/__init__.py +7 -7
- beratools/tools/batch_processing.py +136 -132
- beratools/tools/canopy_threshold_relative.py +672 -670
- beratools/tools/canopycostraster.py +222 -222
- beratools/tools/centerline.py +136 -176
- beratools/tools/common.py +857 -885
- beratools/tools/fl_regen_csf.py +428 -428
- beratools/tools/forest_line_attributes.py +408 -408
- beratools/tools/line_footprint_absolute.py +213 -363
- beratools/tools/line_footprint_fixed.py +436 -282
- beratools/tools/line_footprint_functions.py +733 -720
- beratools/tools/line_footprint_relative.py +73 -64
- beratools/tools/line_grouping.py +45 -0
- beratools/tools/ln_relative_metrics.py +615 -615
- beratools/tools/r_cal_lpi_elai.r +24 -24
- beratools/tools/r_generate_pd_focalraster.r +100 -100
- beratools/tools/r_interface.py +79 -79
- beratools/tools/r_point_density.r +8 -8
- beratools/tools/rpy_chm2trees.py +86 -86
- beratools/tools/rpy_dsm_chm_by.py +81 -81
- beratools/tools/rpy_dtm_by.py +63 -63
- beratools/tools/rpy_find_cellsize.py +43 -43
- beratools/tools/rpy_gnd_csf.py +74 -74
- beratools/tools/rpy_hummock_hollow.py +85 -85
- beratools/tools/rpy_hummock_hollow_raster.py +71 -71
- beratools/tools/rpy_las_info.py +51 -51
- beratools/tools/rpy_laz2las.py +40 -40
- beratools/tools/rpy_lpi_elai_lascat.py +466 -466
- beratools/tools/rpy_normalized_lidar_by.py +56 -56
- beratools/tools/rpy_percent_above_dbh.py +80 -80
- beratools/tools/rpy_points2trees.py +88 -88
- beratools/tools/rpy_vegcoverage.py +94 -94
- beratools/tools/tiler.py +48 -206
- beratools/tools/tool_template.py +69 -54
- beratools/tools/vertex_optimization.py +61 -620
- beratools/tools/zonal_threshold.py +144 -144
- beratools-0.2.2.dist-info/METADATA +108 -0
- beratools-0.2.2.dist-info/RECORD +74 -0
- {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/WHEEL +1 -1
- {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/licenses/LICENSE +22 -22
- beratools/gui/cli.py +0 -18
- beratools/gui/gui.json +0 -8
- beratools/gui_tk/ASCII Banners.txt +0 -248
- beratools/gui_tk/__init__.py +0 -20
- beratools/gui_tk/beratools_main.py +0 -515
- beratools/gui_tk/bt_widgets.py +0 -442
- beratools/gui_tk/cli.py +0 -18
- beratools/gui_tk/img/BERALogo.png +0 -0
- beratools/gui_tk/img/closed.gif +0 -0
- beratools/gui_tk/img/closed.png +0 -0
- beratools/gui_tk/img/open.gif +0 -0
- beratools/gui_tk/img/open.png +0 -0
- beratools/gui_tk/img/tool.gif +0 -0
- beratools/gui_tk/img/tool.png +0 -0
- beratools/gui_tk/main.py +0 -14
- beratools/gui_tk/map_window.py +0 -144
- beratools/gui_tk/runner.py +0 -1481
- beratools/gui_tk/tooltip.py +0 -55
- beratools/third_party/pyqtlet2/__init__.py +0 -9
- beratools/third_party/pyqtlet2/leaflet/__init__.py +0 -26
- beratools/third_party/pyqtlet2/leaflet/control/__init__.py +0 -6
- beratools/third_party/pyqtlet2/leaflet/control/control.py +0 -59
- beratools/third_party/pyqtlet2/leaflet/control/draw.py +0 -52
- beratools/third_party/pyqtlet2/leaflet/control/layers.py +0 -20
- beratools/third_party/pyqtlet2/leaflet/core/Parser.py +0 -24
- beratools/third_party/pyqtlet2/leaflet/core/__init__.py +0 -2
- beratools/third_party/pyqtlet2/leaflet/core/evented.py +0 -180
- beratools/third_party/pyqtlet2/leaflet/layer/__init__.py +0 -5
- beratools/third_party/pyqtlet2/leaflet/layer/featuregroup.py +0 -34
- beratools/third_party/pyqtlet2/leaflet/layer/icon/__init__.py +0 -1
- beratools/third_party/pyqtlet2/leaflet/layer/icon/icon.py +0 -30
- beratools/third_party/pyqtlet2/leaflet/layer/imageoverlay.py +0 -18
- beratools/third_party/pyqtlet2/leaflet/layer/layer.py +0 -105
- beratools/third_party/pyqtlet2/leaflet/layer/layergroup.py +0 -45
- beratools/third_party/pyqtlet2/leaflet/layer/marker/__init__.py +0 -1
- beratools/third_party/pyqtlet2/leaflet/layer/marker/marker.py +0 -91
- beratools/third_party/pyqtlet2/leaflet/layer/tile/__init__.py +0 -2
- beratools/third_party/pyqtlet2/leaflet/layer/tile/gridlayer.py +0 -4
- beratools/third_party/pyqtlet2/leaflet/layer/tile/tilelayer.py +0 -16
- beratools/third_party/pyqtlet2/leaflet/layer/vector/__init__.py +0 -5
- beratools/third_party/pyqtlet2/leaflet/layer/vector/circle.py +0 -15
- beratools/third_party/pyqtlet2/leaflet/layer/vector/circlemarker.py +0 -18
- beratools/third_party/pyqtlet2/leaflet/layer/vector/path.py +0 -5
- beratools/third_party/pyqtlet2/leaflet/layer/vector/polygon.py +0 -14
- beratools/third_party/pyqtlet2/leaflet/layer/vector/polyline.py +0 -18
- beratools/third_party/pyqtlet2/leaflet/layer/vector/rectangle.py +0 -14
- beratools/third_party/pyqtlet2/leaflet/map/__init__.py +0 -1
- beratools/third_party/pyqtlet2/leaflet/map/map.py +0 -220
- beratools/third_party/pyqtlet2/mapwidget.py +0 -45
- beratools/third_party/pyqtlet2/web/custom.js +0 -43
- beratools/third_party/pyqtlet2/web/map.html +0 -23
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers-2x.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon-2x.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-shadow.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.css +0 -656
- beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.js +0 -6
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.codeclimate.yml +0 -14
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.editorconfig +0 -4
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.gitattributes +0 -22
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.travis.yml +0 -43
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/LICENSE +0 -20
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers-2x.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon-2x.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-shadow.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet-2x.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.png +0 -0
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.svg +0 -156
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.css +0 -10
- beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.js +0 -10
- beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/LICENSE +0 -22
- beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/leaflet.rotatedMarker.js +0 -57
- beratools/tools/forest_line_ecosite.py +0 -216
- beratools/tools/lapis_all.py +0 -103
- beratools/tools/least_cost_path_from_chm.py +0 -152
- beratools-0.2.0.dist-info/METADATA +0 -63
- beratools-0.2.0.dist-info/RECORD +0 -142
- /beratools/gui/{img → assets}/BERALogo.png +0 -0
- /beratools/gui/{img → assets}/closed.gif +0 -0
- /beratools/gui/{img → assets}/closed.png +0 -0
- /beratools/{gui_tk → gui/assets}/gui.json +0 -0
- /beratools/gui/{img → assets}/open.gif +0 -0
- /beratools/gui/{img → assets}/open.png +0 -0
- /beratools/gui/{img → assets}/tool.gif +0 -0
- /beratools/gui/{img → assets}/tool.png +0 -0
- {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/entry_points.txt +0 -0
beratools/core/logger.py
CHANGED
|
@@ -1,85 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
rotating_handler = logging.handlers.RotatingFileHandler(
|
|
78
|
-
filename=log_file, maxBytes=5*1000*1000, backupCount=5
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
rotating_handler.setLevel(self.file_level)
|
|
82
|
-
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
83
|
-
rotating_handler.setFormatter(formatter)
|
|
84
|
-
logging.getLogger().addHandler(rotating_handler)
|
|
85
|
-
logging.getLogger().addFilter(NoParsingFilter())
|
|
1
|
+
"""
|
|
2
|
+
Copyright (C) 2025 Applied Geospatial Research Group.
|
|
3
|
+
|
|
4
|
+
This script is licensed under the GNU General Public License v3.0.
|
|
5
|
+
See <https://gnu.org/licenses/gpl-3.0> for full license details.
|
|
6
|
+
|
|
7
|
+
Author: Richard Zeng
|
|
8
|
+
|
|
9
|
+
Description:
|
|
10
|
+
This script is part of the BERA Tools.
|
|
11
|
+
Webpage: https://github.com/appliedgrg/beratools
|
|
12
|
+
|
|
13
|
+
The purpose of this script is to provide logger functions.
|
|
14
|
+
"""
|
|
15
|
+
import logging
|
|
16
|
+
import logging.handlers
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
from beratools.gui.bt_data import BTData
|
|
20
|
+
|
|
21
|
+
bt = BTData()
|
|
22
|
+
|
|
23
|
+
class NoParsingFilter(logging.Filter):
|
|
24
|
+
def filter(self, record):
|
|
25
|
+
return not record.getMessage().startswith("parsing")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Logger(object):
|
|
29
|
+
def __init__(self, name, console_level=logging.INFO, file_level=logging.INFO):
|
|
30
|
+
self.logger = logging.getLogger(name)
|
|
31
|
+
self.name = name
|
|
32
|
+
self.console_level = console_level
|
|
33
|
+
self.file_level = file_level
|
|
34
|
+
|
|
35
|
+
self.setup_logger()
|
|
36
|
+
|
|
37
|
+
def get_logger(self):
|
|
38
|
+
return self.logger
|
|
39
|
+
|
|
40
|
+
def print(self, msg, flush=True):
|
|
41
|
+
"""
|
|
42
|
+
Re-define print in logging.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
msg :
|
|
46
|
+
flush :
|
|
47
|
+
|
|
48
|
+
"""
|
|
49
|
+
self.logger.info(msg)
|
|
50
|
+
if flush:
|
|
51
|
+
for handler in self.logger.handlers:
|
|
52
|
+
handler.flush()
|
|
53
|
+
|
|
54
|
+
def setup_logger(self):
|
|
55
|
+
# Change root logger level from WARNING (default) to NOTSET
|
|
56
|
+
# in order for all messages to be delegated.
|
|
57
|
+
logging.getLogger().setLevel(logging.NOTSET)
|
|
58
|
+
log_file = bt.get_logger_file_name(self.name)
|
|
59
|
+
|
|
60
|
+
# Add stdout handler, with level INFO
|
|
61
|
+
console_handler = logging.StreamHandler(sys.stdout)
|
|
62
|
+
console_handler.setLevel(self.console_level)
|
|
63
|
+
formatter = logging.Formatter("%(message)s")
|
|
64
|
+
console_handler.setFormatter(formatter)
|
|
65
|
+
logging.getLogger().addHandler(console_handler)
|
|
66
|
+
|
|
67
|
+
# Add file rotating handler, 5MB size limit, 5 backups
|
|
68
|
+
rotating_handler = logging.handlers.RotatingFileHandler(
|
|
69
|
+
filename=log_file, maxBytes=5*1000*1000, backupCount=5
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
rotating_handler.setLevel(self.file_level)
|
|
73
|
+
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
74
|
+
rotating_handler.setFormatter(formatter)
|
|
75
|
+
logging.getLogger().addHandler(rotating_handler)
|
|
76
|
+
logging.getLogger().addFilter(NoParsingFilter())
|
beratools/core/tool_base.py
CHANGED
|
@@ -1,133 +1,196 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
1
|
+
"""
|
|
2
|
+
Copyright (C) 2025 Applied Geospatial Research Group.
|
|
3
|
+
|
|
4
|
+
This script is licensed under the GNU General Public License v3.0.
|
|
5
|
+
See <https://gnu.org/licenses/gpl-3.0> for full license details.
|
|
6
|
+
|
|
7
|
+
Author: Richard Zeng
|
|
8
|
+
|
|
9
|
+
Description:
|
|
10
|
+
This script is part of the BERA Tools.
|
|
11
|
+
Webpage: https://github.com/appliedgrg/beratools
|
|
12
|
+
|
|
13
|
+
The purpose of this script is to provide fundamental utilities for tools.
|
|
14
|
+
"""
|
|
15
|
+
import concurrent.futures as con_futures
|
|
16
|
+
import warnings
|
|
17
|
+
from multiprocessing.pool import Pool
|
|
18
|
+
|
|
19
|
+
# import dask.distributed as dask_dist
|
|
20
|
+
import geopandas as gpd
|
|
21
|
+
import pandas as pd
|
|
22
|
+
|
|
23
|
+
# from dask import config as dask_cfg
|
|
24
|
+
from tqdm.auto import tqdm
|
|
25
|
+
|
|
26
|
+
# import ray
|
|
27
|
+
import beratools.core.constants as bt_const
|
|
28
|
+
|
|
29
|
+
# settings for dask
|
|
30
|
+
# dask_cfg.set({"distributed.scheduler.worker-ttl": None})
|
|
31
|
+
# warnings.simplefilter("ignore", dask_dist.comm.core.CommClosedError)
|
|
32
|
+
warnings.simplefilter(action="ignore", category=FutureWarning)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ToolBase(object):
|
|
36
|
+
"""Base class for tools."""
|
|
37
|
+
|
|
38
|
+
def __init__(self):
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
def execute_multiprocessing(self):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def result_is_valid(result):
|
|
46
|
+
if type(result) is list or type(result) is tuple:
|
|
47
|
+
if len(result) > 0:
|
|
48
|
+
return True
|
|
49
|
+
elif (
|
|
50
|
+
type(result) is pd.DataFrame
|
|
51
|
+
or type(result) is gpd.GeoDataFrame
|
|
52
|
+
or type(result) is pd.Series
|
|
53
|
+
or type(result) is gpd.GeoSeries
|
|
54
|
+
):
|
|
55
|
+
if not result.empty:
|
|
56
|
+
return True
|
|
57
|
+
elif result:
|
|
58
|
+
return True
|
|
59
|
+
|
|
60
|
+
return False
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def print_msg(app_name, step, total_steps):
|
|
64
|
+
print(f' "PROGRESS_LABEL {app_name} {step} of {total_steps}" ', flush=True)
|
|
65
|
+
print(f' %{step / total_steps * 100} ', flush=True)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def execute_multiprocessing(
|
|
69
|
+
in_func,
|
|
70
|
+
in_data,
|
|
71
|
+
app_name,
|
|
72
|
+
processes,
|
|
73
|
+
workers=1,
|
|
74
|
+
mode=bt_const.PARALLEL_MODE,
|
|
75
|
+
verbose=False,
|
|
76
|
+
scheduler_file="dask_scheduler.json",
|
|
77
|
+
):
|
|
78
|
+
out_result = []
|
|
79
|
+
step = 0
|
|
80
|
+
total_steps = len(in_data)
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
if mode == bt_const.ParallelMode.MULTIPROCESSING:
|
|
84
|
+
print("Multiprocessing started...", flush=True)
|
|
85
|
+
print("Using {} CPU cores".format(processes), flush=True)
|
|
86
|
+
|
|
87
|
+
with Pool(processes) as pool:
|
|
88
|
+
# print(multiprocessing.active_children())
|
|
89
|
+
with tqdm(total=total_steps, disable=verbose) as pbar:
|
|
90
|
+
for result in pool.imap_unordered(in_func, in_data):
|
|
91
|
+
if result_is_valid(result):
|
|
92
|
+
out_result.append(result)
|
|
93
|
+
|
|
94
|
+
step += 1
|
|
95
|
+
if verbose:
|
|
96
|
+
print_msg(app_name, step, total_steps)
|
|
97
|
+
else:
|
|
98
|
+
pbar.update()
|
|
99
|
+
|
|
100
|
+
pool.close()
|
|
101
|
+
pool.join()
|
|
102
|
+
elif mode == bt_const.ParallelMode.SEQUENTIAL:
|
|
103
|
+
print("Sequential processing started...", flush=True)
|
|
104
|
+
with tqdm(total=total_steps, disable=verbose) as pbar:
|
|
105
|
+
for line in in_data:
|
|
106
|
+
result_item = in_func(line)
|
|
107
|
+
if result_is_valid(result_item):
|
|
108
|
+
out_result.append(result_item)
|
|
109
|
+
|
|
110
|
+
step += 1
|
|
111
|
+
if verbose:
|
|
112
|
+
print_msg(app_name, step, total_steps)
|
|
113
|
+
else:
|
|
114
|
+
pbar.update()
|
|
115
|
+
elif mode == bt_const.ParallelMode.CONCURRENT:
|
|
116
|
+
print("Concurrent processing started...", flush=True)
|
|
117
|
+
print("Using {} CPU cores".format(processes), flush=True)
|
|
118
|
+
with con_futures.ProcessPoolExecutor(max_workers=processes) as executor:
|
|
119
|
+
futures = [executor.submit(in_func, line) for line in in_data]
|
|
120
|
+
with tqdm(total=total_steps, disable=verbose) as pbar:
|
|
121
|
+
for future in con_futures.as_completed(futures):
|
|
122
|
+
result_item = future.result()
|
|
123
|
+
if result_is_valid(result_item):
|
|
124
|
+
out_result.append(result_item)
|
|
125
|
+
|
|
126
|
+
step += 1
|
|
127
|
+
if verbose:
|
|
128
|
+
print_msg(app_name, step, total_steps)
|
|
129
|
+
else:
|
|
130
|
+
pbar.update()
|
|
131
|
+
# elif mode == bt_const.ParallelMode.DASK:
|
|
132
|
+
# print("Dask processing started...", flush=True)
|
|
133
|
+
# print("Using {} CPU cores".format(processes), flush=True)
|
|
134
|
+
# dask_client = dask_dist.Client(threads_per_worker=1, n_workers=processes)
|
|
135
|
+
# print(f"Local Dask client: {dask_client}")
|
|
136
|
+
# try:
|
|
137
|
+
# print('start processing')
|
|
138
|
+
# result = dask_client.map(in_func, in_data)
|
|
139
|
+
# seq = dask_dist.as_completed(result)
|
|
140
|
+
|
|
141
|
+
# with tqdm(total=total_steps, disable=verbose) as pbar:
|
|
142
|
+
# for i in seq:
|
|
143
|
+
# if result_is_valid(result):
|
|
144
|
+
# out_result.append(i.result())
|
|
145
|
+
|
|
146
|
+
# step += 1
|
|
147
|
+
# if verbose:
|
|
148
|
+
# print_msg(app_name, step, total_steps)
|
|
149
|
+
# else:
|
|
150
|
+
# pbar.update()
|
|
151
|
+
# except Exception as e:
|
|
152
|
+
# print(f'ParallelMode.DASK: {e}')
|
|
153
|
+
# dask_client.close()
|
|
154
|
+
|
|
155
|
+
# dask_client.close()
|
|
156
|
+
# elif mode == bt_const.ParallelMode.SLURM:
|
|
157
|
+
# print("Slurm Dask processing started...", flush=True)
|
|
158
|
+
# dask_client = dask_dist.Client(scheduler_file=scheduler_file)
|
|
159
|
+
# print(f"Slurm cluster Dask client: {dask_client}")
|
|
160
|
+
# try:
|
|
161
|
+
# print("start processing")
|
|
162
|
+
# result = dask_client.map(in_func, in_data)
|
|
163
|
+
# seq = dask_dist.as_completed(result)
|
|
164
|
+
# dask_dist.progress(result)
|
|
165
|
+
|
|
166
|
+
# for i in seq:
|
|
167
|
+
# if result_is_valid(result):
|
|
168
|
+
# out_result.append(i.result())
|
|
169
|
+
# except Exception as e:
|
|
170
|
+
# print(f'ParallelMode.SLURM: {e}')
|
|
171
|
+
# dask_client.close()
|
|
172
|
+
|
|
173
|
+
# dask_client.close()
|
|
174
|
+
# ! important !
|
|
175
|
+
# comment temporarily, man enable later if need to use ray
|
|
176
|
+
# elif mode == bt_const.ParallelMode.RAY:
|
|
177
|
+
# ray.init(log_to_driver=False)
|
|
178
|
+
# process_single_line_ray = ray.remote(in_func)
|
|
179
|
+
# result_ids = [process_single_line_ray.remote(item) for item in in_data]
|
|
180
|
+
#
|
|
181
|
+
# while len(result_ids):
|
|
182
|
+
# done_id, result_ids = ray.wait(result_ids)
|
|
183
|
+
# result_item = ray.get(done_id[0])
|
|
184
|
+
#
|
|
185
|
+
# if result_is_valid(result_item):
|
|
186
|
+
# out_result.append(result_item)
|
|
187
|
+
#
|
|
188
|
+
# step += 1
|
|
189
|
+
# print_msg(app_name, step, total_steps)
|
|
190
|
+
|
|
191
|
+
# ray.shutdown()
|
|
192
|
+
except Exception as e:
|
|
193
|
+
print(e)
|
|
194
|
+
return None
|
|
195
|
+
|
|
196
|
+
return out_result
|
beratools/gui/__init__.py
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
"""Top-level package for BERA Tools."""
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def gui_main():
|
|
14
|
-
runner()
|
|
15
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
"""Top-level package for BERA Tools."""
|
|
4
|
+
from beratools.gui.bt_gui_main import *
|
|
5
|
+
|
|
6
|
+
name = 'gui'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def gui_main():
|
|
10
|
+
runner()
|
|
11
|
+
|