pyfemtet 0.4.25__py3-none-any.whl → 0.5.0__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.
Potentially problematic release.
This version of pyfemtet might be problematic. Click here for more details.
- pyfemtet/__init__.py +1 -1
- pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo +0 -0
- pyfemtet/message/locales/ja/LC_MESSAGES/messages.po +114 -62
- pyfemtet/message/locales/messages.pot +114 -62
- pyfemtet/message/messages.py +6 -2
- pyfemtet/opt/__init__.py +2 -2
- pyfemtet/opt/_femopt.py +27 -46
- pyfemtet/opt/_femopt_core.py +50 -33
- pyfemtet/opt/_test_utils/__init__.py +0 -0
- pyfemtet/opt/_test_utils/control_femtet.py +45 -0
- pyfemtet/opt/_test_utils/hyper_sphere.py +24 -0
- pyfemtet/opt/_test_utils/record_history.py +72 -0
- pyfemtet/opt/interface/_femtet.py +39 -1
- pyfemtet/opt/optimizer/__init__.py +12 -0
- pyfemtet/opt/{opt → optimizer}/_base.py +30 -9
- pyfemtet/opt/{opt → optimizer}/_optuna.py +15 -34
- pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py +331 -0
- pyfemtet/opt/{opt → optimizer}/_scipy.py +10 -6
- pyfemtet/opt/{opt → optimizer}/_scipy_scalar.py +24 -12
- pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric_test_result.reccsv +1 -1
- pyfemtet/opt/{femprj_sample → samples/femprj_sample}/her_ex40_parametric.py +10 -8
- pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +18 -0
- pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/her_ex40_parametric_jp.py +10 -8
- pyfemtet/opt/visualization/complex_components/main_figure_creator.py +69 -0
- pyfemtet/opt/visualization/complex_components/main_graph.py +299 -14
- pyfemtet/opt/visualization/process_monitor/pages.py +1 -1
- pyfemtet/opt/visualization/result_viewer/application.py +1 -1
- pyfemtet/opt/visualization/result_viewer/pages.py +9 -9
- {pyfemtet-0.4.25.dist-info → pyfemtet-0.5.0.dist-info}/METADATA +1 -1
- pyfemtet-0.5.0.dist-info/RECORD +112 -0
- pyfemtet/_test_util.py +0 -135
- pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -18
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.pdt +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.jpg +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.pdt +0 -0
- pyfemtet/opt/opt/__init__.py +0 -12
- pyfemtet/opt/opt/_optuna_botorch_helper.py +0 -209
- pyfemtet-0.4.25.dist-info/RECORD +0 -140
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/.gitignore +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF - True.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.prt +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.SLDPRT +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/her_ex40_parametric.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric_parallel.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric.femprj +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric_parallel.py +0 -0
- /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric_test_result.reccsv +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/ParametricIF_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/ParametricIF_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_NX_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_NX_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_SW_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_SW_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gal_ex58_parametric_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gal_ex58_parametric_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gau_ex08_parametric_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gau_ex08_parametric_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/her_ex40_parametric_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_parallel_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_jp.femprj +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_jp.py +0 -0
- /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_parallel_jp.py +0 -0
- {pyfemtet-0.4.25.dist-info → pyfemtet-0.5.0.dist-info}/LICENSE +0 -0
- {pyfemtet-0.4.25.dist-info → pyfemtet-0.5.0.dist-info}/WHEEL +0 -0
- {pyfemtet-0.4.25.dist-info → pyfemtet-0.5.0.dist-info}/entry_points.txt +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from dash.development.base_component import Component
|
|
3
3
|
|
|
4
4
|
# callback
|
|
5
|
-
from dash import Output, Input, State, no_update, callback_context
|
|
5
|
+
from dash import Output, Input, State, no_update, callback_context, ALL
|
|
6
6
|
from dash.exceptions import PreventUpdate
|
|
7
7
|
|
|
8
8
|
# components
|
|
@@ -21,7 +21,7 @@ import json
|
|
|
21
21
|
import numpy as np
|
|
22
22
|
|
|
23
23
|
from pyfemtet.opt.visualization.complex_components import main_figure_creator
|
|
24
|
-
from pyfemtet.opt.visualization.base import
|
|
24
|
+
from pyfemtet.opt.visualization.base import AbstractPage, logger
|
|
25
25
|
from pyfemtet.message import Msg
|
|
26
26
|
|
|
27
27
|
|
|
@@ -45,12 +45,17 @@ class MainGraph(AbstractPage):
|
|
|
45
45
|
| | | graph <-------- ToolTip
|
|
46
46
|
| | +---------+ | |
|
|
47
47
|
| +-------------+ |
|
|
48
|
+
+-----------------+
|
|
49
|
+
| | <- CardFooter (depends on tab)
|
|
48
50
|
+=================+
|
|
49
51
|
|
|
50
52
|
Data(data-selection)
|
|
51
53
|
|
|
52
54
|
"""
|
|
53
55
|
|
|
56
|
+
TAB_ID_OBJECTIVE_PLOT = 'tab-objectives-plot'
|
|
57
|
+
TAB_ID_HYPERVOLUME_PLOT = 'tab-hypervolume-plot'
|
|
58
|
+
|
|
54
59
|
def __init__(self):
|
|
55
60
|
self.setup_figure_creator()
|
|
56
61
|
super().__init__()
|
|
@@ -60,12 +65,17 @@ class MainGraph(AbstractPage):
|
|
|
60
65
|
# list[0] is the default tab
|
|
61
66
|
self.figure_creators = [
|
|
62
67
|
dict(
|
|
63
|
-
tab_id='tab-
|
|
64
|
-
label=Msg.
|
|
68
|
+
tab_id='tab-objectives-scatterplot',
|
|
69
|
+
label=Msg.TAB_LABEL_OBJECTIVE_SCATTERPLOT,
|
|
65
70
|
creator=main_figure_creator.get_default_figure,
|
|
66
71
|
),
|
|
67
72
|
dict(
|
|
68
|
-
tab_id=
|
|
73
|
+
tab_id=self.TAB_ID_OBJECTIVE_PLOT,
|
|
74
|
+
label=Msg.TAB_LABEL_OBJECTIVE_PLOT,
|
|
75
|
+
creator=main_figure_creator.get_objective_plot,
|
|
76
|
+
),
|
|
77
|
+
dict(
|
|
78
|
+
tab_id=self.TAB_ID_HYPERVOLUME_PLOT,
|
|
69
79
|
label='Hypervolume',
|
|
70
80
|
creator=main_figure_creator.get_hypervolume_plot,
|
|
71
81
|
),
|
|
@@ -76,13 +86,65 @@ class MainGraph(AbstractPage):
|
|
|
76
86
|
self.location = dcc.Location(id='main-graph-location', refresh=True)
|
|
77
87
|
|
|
78
88
|
# setup header
|
|
79
|
-
|
|
89
|
+
tab_list = []
|
|
90
|
+
for d in self.figure_creators:
|
|
91
|
+
is_objective_plot = d['tab_id'] == self.TAB_ID_OBJECTIVE_PLOT # Objective plot tab is only shown in obj_names > 3. Set this via callback.
|
|
92
|
+
is_hypervolume_plot = d['tab_id'] == self.TAB_ID_HYPERVOLUME_PLOT # same above
|
|
93
|
+
|
|
94
|
+
if is_objective_plot or is_hypervolume_plot:
|
|
95
|
+
style = {'display': 'none'}
|
|
96
|
+
else:
|
|
97
|
+
style = None
|
|
98
|
+
|
|
99
|
+
tab_list.append(
|
|
100
|
+
dbc.Tab(
|
|
101
|
+
label=d['label'],
|
|
102
|
+
tab_id=d['tab_id'],
|
|
103
|
+
tab_style=style,
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
self.tab_list = tab_list
|
|
80
107
|
self.tabs = dbc.Tabs(self.tab_list, id='main-graph-tabs')
|
|
81
108
|
self.card_header = dbc.CardHeader(self.tabs)
|
|
82
109
|
|
|
83
110
|
# setup body
|
|
84
111
|
self.tooltip = dcc.Tooltip(id='main-graph-tooltip')
|
|
85
112
|
|
|
113
|
+
# setup footer components for objective plot
|
|
114
|
+
self.axis1_dropdown = dbc.DropdownMenu()
|
|
115
|
+
self.axis2_dropdown = dbc.DropdownMenu()
|
|
116
|
+
self.axis3_dropdown = dbc.DropdownMenu()
|
|
117
|
+
self.switch_3d = dbc.Checklist(
|
|
118
|
+
options=[
|
|
119
|
+
dict(
|
|
120
|
+
label="3D",
|
|
121
|
+
disabled=False,
|
|
122
|
+
value=False,
|
|
123
|
+
)
|
|
124
|
+
],
|
|
125
|
+
switch=True,
|
|
126
|
+
value=[],
|
|
127
|
+
)
|
|
128
|
+
self.objective_plot_controller: html.Div = html.Div(
|
|
129
|
+
[
|
|
130
|
+
self.switch_3d,
|
|
131
|
+
dbc.Stack(
|
|
132
|
+
children=['X axis', self.axis1_dropdown],
|
|
133
|
+
direction='horizontal', gap=2),
|
|
134
|
+
dbc.Stack(
|
|
135
|
+
children=['Y axis', self.axis2_dropdown],
|
|
136
|
+
direction='horizontal', gap=2),
|
|
137
|
+
dbc.Stack(
|
|
138
|
+
children=['Z axis', self.axis3_dropdown],
|
|
139
|
+
direction='horizontal', gap=2),
|
|
140
|
+
]
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
# setup footer
|
|
144
|
+
self.card_footer: dbc.CardFooter = dbc.CardFooter(
|
|
145
|
+
self.objective_plot_controller
|
|
146
|
+
)
|
|
147
|
+
|
|
86
148
|
# set kwargs of Graph to reconstruct Graph in ProcessMonitor.
|
|
87
149
|
self.graph_kwargs = dict(
|
|
88
150
|
id='main-graph',
|
|
@@ -127,6 +189,7 @@ class MainGraph(AbstractPage):
|
|
|
127
189
|
self.data_length,
|
|
128
190
|
self.card_header,
|
|
129
191
|
self.card_body,
|
|
192
|
+
self.card_footer,
|
|
130
193
|
self.selection_data,
|
|
131
194
|
],
|
|
132
195
|
# style=FLEXBOX_STYLE_ALLOW_VERTICAL_FILL,
|
|
@@ -140,15 +203,236 @@ class MainGraph(AbstractPage):
|
|
|
140
203
|
|
|
141
204
|
app = self.application.app
|
|
142
205
|
|
|
143
|
-
# =====
|
|
206
|
+
# ===== Change visibility of plot tab =====
|
|
207
|
+
objective_plot_tab = [t for t in self.tab_list if t.tab_id == self.TAB_ID_OBJECTIVE_PLOT][0]
|
|
208
|
+
hypervolume_plot_tab = [t for t in self.tab_list if t.tab_id == self.TAB_ID_HYPERVOLUME_PLOT][0]
|
|
209
|
+
@app.callback(
|
|
210
|
+
output=(
|
|
211
|
+
Output(objective_plot_tab, 'tab_style'),
|
|
212
|
+
Output(hypervolume_plot_tab, 'tab_style'),
|
|
213
|
+
),
|
|
214
|
+
inputs=dict(
|
|
215
|
+
_=(
|
|
216
|
+
Input(self.tabs, 'active_tab'),
|
|
217
|
+
Input(self.location, 'pathname'),
|
|
218
|
+
),
|
|
219
|
+
current_styles=dict(
|
|
220
|
+
obj=State(objective_plot_tab, 'tab_style'),
|
|
221
|
+
hv=State(hypervolume_plot_tab, 'tab_style'),
|
|
222
|
+
),
|
|
223
|
+
),
|
|
224
|
+
prevent_initial_call=True,
|
|
225
|
+
)
|
|
226
|
+
def set_disabled(_, current_styles):
|
|
227
|
+
obj_style: dict = no_update
|
|
228
|
+
hv_style: dict = no_update
|
|
229
|
+
|
|
230
|
+
# load history
|
|
231
|
+
if self.application.history is None:
|
|
232
|
+
raise PreventUpdate
|
|
233
|
+
obj_names = self.application.history.obj_names
|
|
234
|
+
|
|
235
|
+
# show objective plot with 3 or more objectives
|
|
236
|
+
if len(obj_names) < 3:
|
|
237
|
+
if 'display' not in current_styles['obj'].keys():
|
|
238
|
+
obj_style = current_styles['obj']
|
|
239
|
+
obj_style.update({'display': 'none'})
|
|
240
|
+
else:
|
|
241
|
+
if 'display' in current_styles['obj'].keys():
|
|
242
|
+
obj_style = current_styles['obj']
|
|
243
|
+
obj_style.pop('display')
|
|
244
|
+
|
|
245
|
+
# show hypervolume plot with 2 or more objectives
|
|
246
|
+
if len(obj_names) < 2:
|
|
247
|
+
if 'display' not in current_styles['hv'].keys():
|
|
248
|
+
hv_style = current_styles['hv']
|
|
249
|
+
hv_style.update({'display': 'none'})
|
|
250
|
+
else:
|
|
251
|
+
if 'display' in current_styles['hv'].keys():
|
|
252
|
+
hv_style = current_styles['hv']
|
|
253
|
+
hv_style.pop('display')
|
|
254
|
+
|
|
255
|
+
return obj_style, hv_style
|
|
256
|
+
|
|
257
|
+
# ===== Change visibility of dropdown menus =====
|
|
258
|
+
@app.callback(
|
|
259
|
+
Output(self.objective_plot_controller, 'hidden'),
|
|
260
|
+
Input(self.tabs, 'active_tab'),
|
|
261
|
+
prevent_initial_call=True,
|
|
262
|
+
)
|
|
263
|
+
def invisible_controller(active_tab):
|
|
264
|
+
return active_tab != self.TAB_ID_OBJECTIVE_PLOT
|
|
265
|
+
|
|
266
|
+
# ===== Change accessibility of axis3 dropdown =====
|
|
267
|
+
@app.callback(
|
|
268
|
+
Output(self.axis3_dropdown, 'disabled'),
|
|
269
|
+
Input(self.switch_3d, 'value'),
|
|
270
|
+
Input(self.location, 'pathname'),
|
|
271
|
+
prevent_initial_call=True,
|
|
272
|
+
)
|
|
273
|
+
def disable_axis_3_dropdown_menu(is_3d, _):
|
|
274
|
+
return not is_3d
|
|
275
|
+
|
|
276
|
+
# ===== Initialize Dropdown menus =====
|
|
277
|
+
@app.callback(
|
|
278
|
+
output=dict(
|
|
279
|
+
items_list=[
|
|
280
|
+
Output(self.axis1_dropdown, 'children'),
|
|
281
|
+
Output(self.axis2_dropdown, 'children'),
|
|
282
|
+
Output(self.axis3_dropdown, 'children'),
|
|
283
|
+
],
|
|
284
|
+
labels=[
|
|
285
|
+
Output(self.axis1_dropdown, 'label'),
|
|
286
|
+
Output(self.axis2_dropdown, 'label'),
|
|
287
|
+
Output(self.axis3_dropdown, 'label'),
|
|
288
|
+
]
|
|
289
|
+
),
|
|
290
|
+
inputs=[Input(self.location, 'pathname')],
|
|
291
|
+
prevent_initial_call=True,
|
|
292
|
+
)
|
|
293
|
+
def init_dropdown_menus(*_, **__):
|
|
294
|
+
# just in case
|
|
295
|
+
if callback_context.triggered_id is None:
|
|
296
|
+
raise PreventUpdate
|
|
297
|
+
|
|
298
|
+
# load history
|
|
299
|
+
if self.application.history is None:
|
|
300
|
+
logger.error(Msg.ERR_NO_HISTORY_SELECTED)
|
|
301
|
+
raise PreventUpdate
|
|
302
|
+
|
|
303
|
+
# assert 3 or more objectives
|
|
304
|
+
obj_names = self.application.history.obj_names
|
|
305
|
+
if len(obj_names) < 3:
|
|
306
|
+
raise PreventUpdate
|
|
307
|
+
|
|
308
|
+
# add dropdown item to dropdown
|
|
309
|
+
axis1_dropdown_items = []
|
|
310
|
+
axis2_dropdown_items = []
|
|
311
|
+
axis3_dropdown_items = []
|
|
312
|
+
|
|
313
|
+
for i, obj_name in enumerate(obj_names):
|
|
314
|
+
axis1_dropdown_items.append(
|
|
315
|
+
dbc.DropdownMenuItem(
|
|
316
|
+
children=obj_name,
|
|
317
|
+
id={'type': 'objective-axis1-dropdown-menu-item', 'index': obj_name},
|
|
318
|
+
)
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
axis2_dropdown_items.append(
|
|
322
|
+
dbc.DropdownMenuItem(
|
|
323
|
+
children=obj_name,
|
|
324
|
+
id={'type': 'objective-axis2-dropdown-menu-item', 'index': obj_name},
|
|
325
|
+
)
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
axis3_dropdown_items.append(
|
|
329
|
+
dbc.DropdownMenuItem(
|
|
330
|
+
children=obj_name,
|
|
331
|
+
id={'type': 'objective-axis3-dropdown-menu-item', 'index': obj_name},
|
|
332
|
+
)
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
items_list = [axis1_dropdown_items, axis2_dropdown_items, axis3_dropdown_items]
|
|
336
|
+
|
|
337
|
+
ret = dict(
|
|
338
|
+
items_list=items_list,
|
|
339
|
+
labels=obj_names[:3],
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
return ret
|
|
343
|
+
|
|
344
|
+
# ===== Update Dropdown menus =====
|
|
345
|
+
@app.callback(
|
|
346
|
+
output=dict(
|
|
347
|
+
label_1=Output(self.axis1_dropdown, 'label', allow_duplicate=True), # label of dropdown
|
|
348
|
+
label_2=Output(self.axis2_dropdown, 'label', allow_duplicate=True),
|
|
349
|
+
label_3=Output(self.axis3_dropdown, 'label', allow_duplicate=True),
|
|
350
|
+
),
|
|
351
|
+
inputs=dict(
|
|
352
|
+
_=( # when the dropdown item is clicked
|
|
353
|
+
Input({'type': 'objective-axis1-dropdown-menu-item', 'index': ALL}, 'n_clicks'),
|
|
354
|
+
Input({'type': 'objective-axis2-dropdown-menu-item', 'index': ALL}, 'n_clicks'),
|
|
355
|
+
Input({'type': 'objective-axis3-dropdown-menu-item', 'index': ALL}, 'n_clicks'),
|
|
356
|
+
),
|
|
357
|
+
current_labels=dict( # for exclusive selection
|
|
358
|
+
label_1=State(self.axis1_dropdown, 'label'),
|
|
359
|
+
label_2=State(self.axis2_dropdown, 'label'),
|
|
360
|
+
label_3=State(self.axis3_dropdown, 'label'),
|
|
361
|
+
),
|
|
362
|
+
),
|
|
363
|
+
prevent_initial_call=True,
|
|
364
|
+
)
|
|
365
|
+
def update_dropdowns(_, current_labels):
|
|
366
|
+
# just in case
|
|
367
|
+
if callback_context.triggered_id is None:
|
|
368
|
+
raise PreventUpdate
|
|
369
|
+
|
|
370
|
+
# load history
|
|
371
|
+
if self.application.history is None:
|
|
372
|
+
logger.error(Msg.ERR_NO_HISTORY_SELECTED)
|
|
373
|
+
raise PreventUpdate
|
|
374
|
+
obj_names = self.application.history.obj_names
|
|
375
|
+
|
|
376
|
+
if len(obj_names) < 3:
|
|
377
|
+
raise PreventUpdate
|
|
378
|
+
|
|
379
|
+
# default return values
|
|
380
|
+
ret = dict(
|
|
381
|
+
label_1=no_update,
|
|
382
|
+
label_2=no_update,
|
|
383
|
+
label_3=no_update,
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
# ===== update dropdown label =====
|
|
387
|
+
new_label = callback_context.triggered_id['index']
|
|
388
|
+
|
|
389
|
+
# example of triggerd_id: {'index': 'max_displacement', 'type': 'objective-axis1-dropdown-menu-item'}
|
|
390
|
+
if callback_context.triggered_id['type'] == 'objective-axis1-dropdown-menu-item':
|
|
391
|
+
ret["label_1"] = new_label
|
|
392
|
+
if current_labels["label_2"] == new_label:
|
|
393
|
+
ret["label_2"] = current_labels["label_1"]
|
|
394
|
+
if current_labels["label_3"] == new_label:
|
|
395
|
+
ret["label_3"] = current_labels["label_1"]
|
|
396
|
+
if callback_context.triggered_id['type'] == 'objective-axis2-dropdown-menu-item':
|
|
397
|
+
ret["label_2"] = new_label
|
|
398
|
+
if current_labels["label_3"] == new_label:
|
|
399
|
+
ret["label_3"] = current_labels["label_2"]
|
|
400
|
+
if current_labels["label_1"] == new_label:
|
|
401
|
+
ret["label_1"] = current_labels["label_2"]
|
|
402
|
+
if callback_context.triggered_id['type'] == 'objective-axis3-dropdown-menu-item':
|
|
403
|
+
ret["label_3"] = new_label
|
|
404
|
+
if current_labels["label_1"] == new_label:
|
|
405
|
+
ret["label_1"] = current_labels["label_3"]
|
|
406
|
+
if current_labels["label_2"] == new_label:
|
|
407
|
+
ret["label_2"] = current_labels["label_3"]
|
|
408
|
+
|
|
409
|
+
return ret
|
|
410
|
+
|
|
411
|
+
# ===== Update Graph (by tab selection or dropdown changed) =====
|
|
144
412
|
@app.callback(
|
|
145
413
|
Output(self.graph.id, 'figure'),
|
|
146
414
|
Output(self.data_length.id, self.data_length_prop), # To determine whether Process Monitor should update the graph, the main graph remembers the current amount of data.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
415
|
+
inputs=dict(
|
|
416
|
+
active_tab_id=Input(self.tabs.id, 'active_tab'),
|
|
417
|
+
_=Input(self.dummy, 'children'),
|
|
418
|
+
is_3d=Input(self.switch_3d, 'value'),
|
|
419
|
+
obj_names=(
|
|
420
|
+
Input(self.axis1_dropdown, 'label'),
|
|
421
|
+
Input(self.axis2_dropdown, 'label'),
|
|
422
|
+
Input(self.axis3_dropdown, 'label'),
|
|
423
|
+
),
|
|
424
|
+
),
|
|
425
|
+
prevent_initial_call=False,
|
|
426
|
+
)
|
|
427
|
+
def redraw_main_graph(active_tab_id, _, is_3d, obj_names):
|
|
428
|
+
kwargs = {}
|
|
429
|
+
if active_tab_id == self.TAB_ID_OBJECTIVE_PLOT:
|
|
430
|
+
if not is_3d:
|
|
431
|
+
obj_names = obj_names[:-1]
|
|
432
|
+
kwargs = dict(
|
|
433
|
+
obj_names=obj_names
|
|
434
|
+
)
|
|
435
|
+
figure, length = self.get_fig_by_tab_id(active_tab_id, with_length=True, kwargs=kwargs)
|
|
152
436
|
return figure, length
|
|
153
437
|
|
|
154
438
|
# ===== Save Selection =====
|
|
@@ -248,7 +532,7 @@ class MainGraph(AbstractPage):
|
|
|
248
532
|
img_url = 'data:image/jpeg;base64, ' + encoded_image
|
|
249
533
|
return html.Img(src=img_url, style={"width": "200px"}) if img_url is not None else html.Div()
|
|
250
534
|
|
|
251
|
-
def get_fig_by_tab_id(self, tab_id, with_length=False):
|
|
535
|
+
def get_fig_by_tab_id(self, tab_id, with_length=False, kwargs: dict = None):
|
|
252
536
|
# If the history is not loaded, do nothing
|
|
253
537
|
if self.application.history is None:
|
|
254
538
|
raise PreventUpdate
|
|
@@ -264,7 +548,8 @@ class MainGraph(AbstractPage):
|
|
|
264
548
|
|
|
265
549
|
# create figure
|
|
266
550
|
df = self.data_accessor()
|
|
267
|
-
|
|
551
|
+
kwargs = kwargs or {}
|
|
552
|
+
fig = creator(self.application.history, df, **kwargs)
|
|
268
553
|
if with_length:
|
|
269
554
|
return fig, len(df)
|
|
270
555
|
else:
|
|
@@ -522,6 +522,7 @@ class Tutorial(AbstractPage):
|
|
|
522
522
|
Input(self.tutorial_mode_switch, 'value'),
|
|
523
523
|
Input(self.load_sample_csv_button, 'n_clicks'), # load button clicked
|
|
524
524
|
Input(self.main_graph.selection_data, self.main_graph.selection_data_property), # selection changed
|
|
525
|
+
Input(self.femtet_control.femtet_state.id, self.femtet_control.femtet_state_prop), # connection established
|
|
525
526
|
Input(self.control_visibility_input_dummy, 'children'),
|
|
526
527
|
State(self.load_sample_csv_badge, 'style'), # switch visibility
|
|
527
528
|
State(self.load_sample_csv_div, 'style'), # switch visibility
|
|
@@ -533,9 +534,10 @@ class Tutorial(AbstractPage):
|
|
|
533
534
|
)
|
|
534
535
|
def control_visibility(
|
|
535
536
|
is_tutorial,
|
|
536
|
-
_1,
|
|
537
|
-
selection_data,
|
|
538
|
-
_2,
|
|
537
|
+
_1, # load_sample clicked
|
|
538
|
+
selection_data, # data selected
|
|
539
|
+
_2, # result of connect_femtet clicked
|
|
540
|
+
_3, # dummy component loaded
|
|
539
541
|
load_sample_csv_badge_current_style,
|
|
540
542
|
load_sample_csv_div_current_style,
|
|
541
543
|
file_picker_current_style,
|
|
@@ -596,13 +598,12 @@ class Tutorial(AbstractPage):
|
|
|
596
598
|
|
|
597
599
|
# if history is not None,
|
|
598
600
|
else:
|
|
599
|
-
|
|
600
|
-
#
|
|
601
|
+
# if a point is already selected,
|
|
602
|
+
# show badge to open-pdt or connect-femtet
|
|
601
603
|
if self.check_point_selected(selection_data):
|
|
602
|
-
|
|
604
|
+
|
|
603
605
|
# if femtet is connected, show badge to open-pdt
|
|
604
606
|
if self.femtet_control.check_femtet_state() is FemtetState.connected:
|
|
605
|
-
print(2)
|
|
606
607
|
ret[open_pdt_badge_style] = self.control_visibility_by_style(
|
|
607
608
|
True,
|
|
608
609
|
open_pdt_badge_current_style,
|
|
@@ -610,7 +611,6 @@ class Tutorial(AbstractPage):
|
|
|
610
611
|
|
|
611
612
|
# else, show femtet-connect badge
|
|
612
613
|
else:
|
|
613
|
-
print('3')
|
|
614
614
|
ret[connect_femtet_badge_style] = self.control_visibility_by_style(
|
|
615
615
|
True,
|
|
616
616
|
connect_femtet_badge_current_style,
|
|
@@ -646,7 +646,7 @@ class Tutorial(AbstractPage):
|
|
|
646
646
|
# get sample file
|
|
647
647
|
import pyfemtet
|
|
648
648
|
package_root = os.path.dirname(pyfemtet.__file__)
|
|
649
|
-
sample_dir = os.path.join(package_root, 'opt', 'femprj_sample') # FIXME: locale によってパスを変える
|
|
649
|
+
sample_dir = os.path.join(package_root, 'opt', 'samples', 'femprj_sample') # FIXME: locale によってパスを変える
|
|
650
650
|
path = os.path.join(sample_dir, 'wat_ex14_parametric_test_result.reccsv')
|
|
651
651
|
|
|
652
652
|
if not os.path.exists(path):
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
pyfemtet/__init__.py,sha256=pVYhOkVS5PHJd_cIEx6PTaY6VggXFTC3pqWdf0I8zao,21
|
|
2
|
+
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
3
|
+
pyfemtet/dispatch_extensions.py,sha256=XVZajbjh7mb6NG4Hq8qff2TJWab75r4Hd59cIvCRsVg,16213
|
|
4
|
+
pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
|
|
5
|
+
pyfemtet/message/1. make_pot.bat,sha256=oS38xYsaUnQAuKwUR8hZJFgt3AKBU993fWFDSg2ROz4,570
|
|
6
|
+
pyfemtet/message/2. make_mo.bat,sha256=nqUi3Cze7JGKkYItlch8ZG2gSbRNZiS2ltuCS7DbmG8,154
|
|
7
|
+
pyfemtet/message/__init__.py,sha256=gE1-XX_PzHj9BbhqPaK5VcIHuv6_Tec5qlPMC3IRiBg,100
|
|
8
|
+
pyfemtet/message/babel.cfg,sha256=rlvsm_EjDU2ki-OLVPG3toWspVuVA0JFAFvFp2U-By4,72
|
|
9
|
+
pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo,sha256=hbW3KO524_lFYIhU-QGMhHMW4LHnxyecnptFD55ECMo,18332
|
|
10
|
+
pyfemtet/message/locales/ja/LC_MESSAGES/messages.po,sha256=f8rimJEqmLdlrE7JBwETm-Gq2-USOZcSEpnzMqBqk88,23617
|
|
11
|
+
pyfemtet/message/locales/messages.pot,sha256=_gVMy6qaSU7Qu6zIY8KQizb1XpTZ0ijLKbnnk4lAAdg,13635
|
|
12
|
+
pyfemtet/message/messages.py,sha256=i0cOOV8NnBeT1gG-tqgnu_3dIym1hZG8Hzg38sh_Qeo,13187
|
|
13
|
+
pyfemtet/opt/__init__.py,sha256=MPrUWeLZLrJ-ApVckn8dsn3QmRH13aPzit5JgaoshG8,696
|
|
14
|
+
pyfemtet/opt/_femopt.py,sha256=V1D0n8WgzDRE6NbvRzJdhxXiqHh7GGRAmvS7jyQDGfA,26611
|
|
15
|
+
pyfemtet/opt/_femopt_core.py,sha256=ocn7qOMCDRXuS-3DRXgGIo1hGnewUYSUxE7BuvqCXMY,27858
|
|
16
|
+
pyfemtet/opt/_test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
pyfemtet/opt/_test_utils/control_femtet.py,sha256=Oy2MmNS-LhUXF9rKLa8AXAfJhppIQI8Nha8LmEZflmk,1169
|
|
18
|
+
pyfemtet/opt/_test_utils/hyper_sphere.py,sha256=nQhw8EIY0DwvcTqrbKhkxiITLZifr4-nG77E-_6ggmA,700
|
|
19
|
+
pyfemtet/opt/_test_utils/record_history.py,sha256=qg5kNURiFHr40YN4f4s9Q6JNed-1y5ysQFXwIbYpKZw,2512
|
|
20
|
+
pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
|
|
21
|
+
pyfemtet/opt/interface/_base.py,sha256=I4pJttLeRW-6WWMuCNynwxWPwriiGZk20vHLVcfixZY,2332
|
|
22
|
+
pyfemtet/opt/interface/_femtet.py,sha256=PjmwRpkY99i4Tstva6ahlG8beqQytkJsAbT9nU_d64A,35956
|
|
23
|
+
pyfemtet/opt/interface/_femtet_parametric.py,sha256=KDG8SB43AgwuhpCStjvx10G0RzyHhga6k4dfvp0gvYU,2175
|
|
24
|
+
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
25
|
+
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=cibPOhsUAvTDJa1xdEhVClZjwPkEx2kBmi61vyTJHUs,5514
|
|
26
|
+
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=P7VH0i_o-X9OUe6AGaLF1fACPeHNrMjcrOBCA3MMrI4,3092
|
|
27
|
+
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=Ldr8Esa5xZ-D_E5uIXBTF2DHslXVMFDYOsqTd8FhY1M,6242
|
|
28
|
+
pyfemtet/opt/optimizer/__init__.py,sha256=wdz7PXkcSJ9Z2OHoegfGvYrnj_OAyU39BvDyiy3QnVw,407
|
|
29
|
+
pyfemtet/opt/optimizer/_base.py,sha256=lKCDGoAtOLwqNaP7qfqYJ69AHxq9YZVivTP14VHYxZU,12136
|
|
30
|
+
pyfemtet/opt/optimizer/_optuna.py,sha256=3u48LeUF7nYhCoOcAzkjw5cibM5MTb2mjQrks4pohhM,11575
|
|
31
|
+
pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py,sha256=BumqEi3PxXSCwZxaBAY9qFSSiz00zkJUS75UL7vwjwQ,12180
|
|
32
|
+
pyfemtet/opt/optimizer/_scipy.py,sha256=M3q25VuRazDzXUWC25z7hGbNq2Qg9158NjTSNBvi2pk,4347
|
|
33
|
+
pyfemtet/opt/optimizer/_scipy_scalar.py,sha256=YmErX4s_ywVIn861-D06d-TvDWi0rp843Jit3x80qtU,3202
|
|
34
|
+
pyfemtet/opt/parameter.py,sha256=YLE9lmYRaZA8isnTPJnbYXpUn6zsJFW4xg03QaSWey8,3950
|
|
35
|
+
pyfemtet/opt/prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
pyfemtet/opt/prediction/base.py,sha256=q4lDqrOtAkiWG-OblQEddnEVj29Q-EJE3-O5QTOb3Q4,1761
|
|
37
|
+
pyfemtet/opt/prediction/single_task_gp.py,sha256=VbsVllzXzCGqkM1fC61Ouqwuv3ddS5INbFwDG8v-d6g,3303
|
|
38
|
+
pyfemtet/opt/samples/femprj_sample/.gitignore,sha256=hx-5Hhaf7kpHe1wvWWfJqjPfObg-zf9CTI4joNh2Hk4,28
|
|
39
|
+
pyfemtet/opt/samples/femprj_sample/ParametricIF - True.femprj,sha256=tCd29CUXmyJ0VH6cV0xTdjQMLBPkCk0UrFwvRbyrcYA,431415
|
|
40
|
+
pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj,sha256=9BtDHmc3cdom0Zq33DTdZ0mDAsIUY6i8SRkkg-n7GO0,442090
|
|
41
|
+
pyfemtet/opt/samples/femprj_sample/ParametricIF.py,sha256=oXzchBZEbH69xacDht5HDnbZzKwapXsn6bp9qihY17Y,707
|
|
42
|
+
pyfemtet/opt/samples/femprj_sample/ParametricIF_test_result.reccsv,sha256=TiOAqEDMub6SCGYClBv1JvQxphDOY3iIdr_pMmGgJ9M,2859
|
|
43
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.femprj,sha256=KC8JlHqHzqgyKriK911QSnQByQpRlw-SX5OSQ_GNe5M,149193
|
|
44
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
45
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.py,sha256=_wrpHQ6NlNJ9js0PwR3tfuxXt5fxORTa9h8BvjiWOcg,4621
|
|
46
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_NX_test_result.reccsv,sha256=hFxjat32G71F3XE_UtC9zzi5HZxu0Q0MXjU9e1xVIDM,4710
|
|
47
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.SLDPRT,sha256=jjBi4aRRwZPK-4-YRKDC4eO_Ch2jwd7M7chvJlnBbZU,97158
|
|
48
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.femprj,sha256=knN0bBTHm5CqExLdmxdJvPldJ6ahnQesKt974qRjWh4,126837
|
|
49
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.py,sha256=JoGQSwH3yJnABxyd-WJfrwMkhd1UV0yYF2L2RvMFXmc,4559
|
|
50
|
+
pyfemtet/opt/samples/femprj_sample/cad_ex01_SW_test_result.reccsv,sha256=NS0Zik2c1mbMdGa0hGJaRQdCD08Bltx84n9QzP5CjPo,4736
|
|
51
|
+
pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.femprj,sha256=dbanN3W2eX_ciZ0wZGqK60mc4edSVh5G2OqbbMKyFng,74898
|
|
52
|
+
pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.py,sha256=RxLSXFs0SqUjlug_JZAKlkJhqJdQCY3Y3F-DtSQRtVM,2458
|
|
53
|
+
pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric_test_result.reccsv,sha256=NOaYmpmrhn9WMbIaLWFlR0IvRheGqcqu0J9Nf3JQnfo,1131
|
|
54
|
+
pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.femprj,sha256=Yb9ILeTEKx5xfJGk8IZH_DVlgkpGB33Vy9-LGIEQboY,279251
|
|
55
|
+
pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.py,sha256=5KazqJ5wRbGs0dBMJslZ1eRCUWq8j3k1mqlhyB8M0g8,1929
|
|
56
|
+
pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric_test_result.reccsv,sha256=yZ9aHthiKIBY_NMOz94Jl2dyHIH-GWMvukgHk4ZeT_o,3474
|
|
57
|
+
pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.femprj,sha256=LLAUDlUo1dIpRzlKPs1lvACzJQxjnWW3xAGAodYEqRM,117221
|
|
58
|
+
pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.py,sha256=47Lqul9LDlbMB2Bvcn_B6wzrdNvQp1ksYSDRUZfR76Q,4846
|
|
59
|
+
pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv,sha256=0yWqTpmpAtFvYRRyk2zneAVnl_5qJDeVwG4aeIWxXv8,3679
|
|
60
|
+
pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.femprj,sha256=z2NHFJWiuiLv_zhxjFpLpmRbYVvQ43bAMj_NLioQGsk,262283
|
|
61
|
+
pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.py,sha256=2oUBg2MvKuewO5Acs5FO3dkXX0QIZGRR5RRvKAb4CMk,2361
|
|
62
|
+
pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_parallel.py,sha256=V6XYS3RblruTi8T43lEnNl_3pgdsobknspsD_K2iEpU,2472
|
|
63
|
+
pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_test_result.reccsv,sha256=6PjbmLfwDx01Z0pywDL9eT5lfRKgZDU3r_H2SfZYaT4,3885
|
|
64
|
+
pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.femprj,sha256=F-yu2dGrsbrIA1Lhizu2aHTjQFTohyBmOuJv-Iyl8jk,179596
|
|
65
|
+
pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.py,sha256=K9ZlIkmD05NOF2dXnv4AmYsvM7klhm8Ss7irAr74MVQ,2213
|
|
66
|
+
pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_parallel.py,sha256=UjPMpoZY99rJY9mqudsK7MOGURhzwOulwDkrRiclZzI,2289
|
|
67
|
+
pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_test_result.reccsv,sha256=bvHgcuFZ1iS8sb_FT5W7MuquODxmv3IcFkiNOdSMiK8,3450
|
|
68
|
+
pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.femprj,sha256=9BtDHmc3cdom0Zq33DTdZ0mDAsIUY6i8SRkkg-n7GO0,442090
|
|
69
|
+
pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.py,sha256=oXzchBZEbH69xacDht5HDnbZzKwapXsn6bp9qihY17Y,707
|
|
70
|
+
pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.femprj,sha256=0RBhOGhtiFAp0QSCTBYEaDY9EZymn9hJYchAOJ6PaBA,143533
|
|
71
|
+
pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=B7wVemkiVzh0NJXDzG3fdigWBOb58ZxrJZUT4NRvW9Q,4899
|
|
72
|
+
pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.femprj,sha256=ZZhT9XjB9Xu9YwHWv4gbvKBiUWlOFKEoHjAcGWb3vvQ,128026
|
|
73
|
+
pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.py,sha256=e-XaHBZ8syWlG9pObcDDkHGLC5t338zAt_NyRXty338,4837
|
|
74
|
+
pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=PzqtNVde6VnMHFpedRBsOq9JVhCY0ymQPVs54EKsNLw,75668
|
|
75
|
+
pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.py,sha256=97np4uH-UQqpv4UDwJS0doFYA7TOkXnbhLdkZExdNek,2461
|
|
76
|
+
pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.femprj,sha256=TTXw_8YT8pzHQlu4ufGzTq1IFYSwcWWt4GA6sIY1YPM,295600
|
|
77
|
+
pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.py,sha256=8Op_zwz9SD0NfGg4TFlcNvs-ZlU0bxgs5oaaI9UtlRU,2087
|
|
78
|
+
pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.femprj,sha256=OJ7f8iw0z1BZqanuNn71uEaoM2Kgb93ptUU8iYwYON0,129783
|
|
79
|
+
pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.py,sha256=MlFk6KRCQeCX1J0DNOjph75qjCUHg5UQPNTcHxIEnoo,5279
|
|
80
|
+
pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.femprj,sha256=y7eURFBdqh6PmD4zbelGuB458HmfihVht0K4wVI-mik,265368
|
|
81
|
+
pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.py,sha256=ibXVhya5JV7CfCD2srQceXOj1sYjH3kWtaIEfyu98u4,2489
|
|
82
|
+
pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py,sha256=cY9RhoAFEnVUkfGhbXpn3LavT_NRp_OwVxGbL7jSbBQ,2605
|
|
83
|
+
pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
|
|
84
|
+
pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vMy-KUP1wEMV9Rt6yXjkE40Fcs1t1cpQK-nQJK8hHao,2284
|
|
85
|
+
pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py,sha256=4X0cl3YWpYarcNBCH79mrlyFuKUYSqvnGzokEbv9ILk,2335
|
|
86
|
+
pyfemtet/opt/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
+
pyfemtet/opt/visualization/_create_wrapped_components.py,sha256=XpOv_iEEB3lFT3vYuCnCCbwUwRFbCYgvsZDpaiSzmZY,2511
|
|
88
|
+
pyfemtet/opt/visualization/base.py,sha256=XhZodLEr5PPHmtNai6uZcPJobKurENepuGCUaqDOI7I,7588
|
|
89
|
+
pyfemtet/opt/visualization/complex_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
+
pyfemtet/opt/visualization/complex_components/alert_region.py,sha256=IIsfw4Dwlag7ked94X7MF2UxEODJCBeYruDOUQsKzGQ,2104
|
|
91
|
+
pyfemtet/opt/visualization/complex_components/control_femtet.py,sha256=b4gn_pQMXe3NL3aqfEgsPTvhmdWmg-tRBvaHG659lZg,6240
|
|
92
|
+
pyfemtet/opt/visualization/complex_components/main_figure_creator.py,sha256=ueVyDFnY_KPIXuLM585bRToAGDCUXmd-cy_ZNMSFWs4,6949
|
|
93
|
+
pyfemtet/opt/visualization/complex_components/main_graph.py,sha256=iPxH7XdE0vWByzZfVka_93mLM70svv20OTpFMwAB-UE,21528
|
|
94
|
+
pyfemtet/opt/visualization/complex_components/pm_graph.py,sha256=n1p-yruqo9NW93UOUIdxPF2QdO4qDSuH37h6l8C68BQ,24921
|
|
95
|
+
pyfemtet/opt/visualization/complex_components/pm_graph_creator.py,sha256=ukv9XqW_Mzdsw9Oxc3JXLwKJTyXPSrt9DiB3dvKv4uk,7302
|
|
96
|
+
pyfemtet/opt/visualization/process_monitor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
97
|
+
pyfemtet/opt/visualization/process_monitor/application.py,sha256=ir0xVTsbqFWq2FlPw75XNcMpFEUQNUQr5OcAW0r-FuY,7922
|
|
98
|
+
pyfemtet/opt/visualization/process_monitor/pages.py,sha256=HSjBeZLnVEgm-VP_NJIpjRUsGhphNuV4eMqK7xC77es,15110
|
|
99
|
+
pyfemtet/opt/visualization/result_viewer/.gitignore,sha256=ryvb4aqbbsHireHWlPQfxxqDHQJo6YkVYhE9imKt0b8,6
|
|
100
|
+
pyfemtet/opt/visualization/result_viewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
|
+
pyfemtet/opt/visualization/result_viewer/application.py,sha256=99Zn-i2mJLIN0DeKjewCBW9UCa78YpyRoMLXzbMd4Qg,1687
|
|
102
|
+
pyfemtet/opt/visualization/result_viewer/pages.py,sha256=wzTbd-3XHDZ0rK98sE55tXQ90nb1IbUhav3sIVFfjOY,32147
|
|
103
|
+
pyfemtet/opt/visualization/wrapped_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
|
+
pyfemtet/opt/visualization/wrapped_components/dbc.py,sha256=wzR1ZMOb4uwPNTMFn5upLJ9tXeuJ22mLGynyJlA2cho,42161
|
|
105
|
+
pyfemtet/opt/visualization/wrapped_components/dcc.py,sha256=hcW7SR6VIMn4S4-JMyohvOzdc0Aw8A4chIeHqQEUbFU,17499
|
|
106
|
+
pyfemtet/opt/visualization/wrapped_components/html.py,sha256=sE2XHTDY1GvA1NW7y6SKWf-WglVXFKKvXhU9h3z53_g,95652
|
|
107
|
+
pyfemtet/opt/visualization/wrapped_components/str_enum.py,sha256=NZqbh2jNEAckvJyZv__MWeRs2F2Q-dkJCWo30rU2rrM,1383
|
|
108
|
+
pyfemtet-0.5.0.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
109
|
+
pyfemtet-0.5.0.dist-info/METADATA,sha256=wkSmwfTGy6HUytqHRwoJGn65FqrCHGa8OJW1c666p9U,3287
|
|
110
|
+
pyfemtet-0.5.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
111
|
+
pyfemtet-0.5.0.dist-info/entry_points.txt,sha256=ZfYqRaoiPtuWqFi2_msccyrVF0LurMn-IHlYamAegZo,104
|
|
112
|
+
pyfemtet-0.5.0.dist-info/RECORD,,
|