pyfemtet 0.2.0__py3-none-any.whl → 0.2.1__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/opt/base.py +1 -1
- pyfemtet/opt/interface.py +5 -0
- pyfemtet/opt/monitor.py +116 -95
- {pyfemtet-0.2.0.dist-info → pyfemtet-0.2.1.dist-info}/LICENSE +1 -1
- pyfemtet-0.2.1.dist-info/METADATA +42 -0
- {pyfemtet-0.2.0.dist-info → pyfemtet-0.2.1.dist-info}/RECORD +8 -8
- pyfemtet-0.2.0.dist-info/METADATA +0 -91
- {pyfemtet-0.2.0.dist-info → pyfemtet-0.2.1.dist-info}/WHEEL +0 -0
pyfemtet/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.2.
|
|
1
|
+
__version__ = "0.2.1"
|
pyfemtet/opt/base.py
CHANGED
|
@@ -412,7 +412,7 @@ class History:
|
|
|
412
412
|
def _calc_hypervolume(self, objectives):
|
|
413
413
|
#### 前準備
|
|
414
414
|
# パレート集合の抽出
|
|
415
|
-
idx = self.actor_data['non_domi']
|
|
415
|
+
idx = self.actor_data['non_domi'].values
|
|
416
416
|
pdf = self.actor_data[idx]
|
|
417
417
|
pareto_set = pdf[self.obj_names].values
|
|
418
418
|
n = len(pareto_set) # 集合の要素数
|
pyfemtet/opt/interface.py
CHANGED
|
@@ -653,6 +653,11 @@ class FemtetWithNXInterface(FemtetInterface):
|
|
|
653
653
|
None
|
|
654
654
|
"""
|
|
655
655
|
|
|
656
|
+
# check NX installation
|
|
657
|
+
exe = r'%UGII_BASE_DIR%\NXBIN\run_journal.exe'
|
|
658
|
+
if not os.path.isfile(exe):
|
|
659
|
+
raise Exception(r'"%UGII_BASE_DIR%\NXBIN\run_journal.exe" が見つかりませんでした。環境変数 UGII_BASE_DIR 又は NX のインストール状態を確認してください。')
|
|
660
|
+
|
|
656
661
|
self.prt_path = os.path.abspath(prt_path)
|
|
657
662
|
super().__init__(
|
|
658
663
|
femprj_path=femprj_path,
|
pyfemtet/opt/monitor.py
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import webbrowser
|
|
2
2
|
import logging
|
|
3
|
-
from dash import Dash, html, dcc
|
|
4
|
-
from dash.dependencies import Output, Input
|
|
3
|
+
from dash import Dash, html, dcc, ctx, Output, Input
|
|
5
4
|
import dash_bootstrap_components as dbc
|
|
6
5
|
import plotly.graph_objs as go
|
|
6
|
+
import plotly.express as px
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def update_hypervolume_plot(femopt):
|
|
10
|
+
# data setting
|
|
11
|
+
df = femopt.history.data
|
|
12
|
+
|
|
13
|
+
# create figure
|
|
14
|
+
fig = px.line(df, x="trial", y="hypervolume", markers=True)
|
|
15
|
+
|
|
16
|
+
return fig
|
|
17
|
+
|
|
7
18
|
|
|
8
19
|
|
|
9
20
|
def update_scatter_matrix(femopt):
|
|
@@ -67,23 +78,72 @@ def update_scatter_matrix(femopt):
|
|
|
67
78
|
return fig
|
|
68
79
|
|
|
69
80
|
|
|
81
|
+
def setup_home():
|
|
82
|
+
# components の設定
|
|
83
|
+
# https://dash-bootstrap-components.opensource.faculty.ai/docs/components/accordion/
|
|
84
|
+
dummy = html.Div('', id='dummy')
|
|
85
|
+
interval = dcc.Interval(
|
|
86
|
+
id='interval-component',
|
|
87
|
+
interval=1*1000, # in milliseconds
|
|
88
|
+
n_intervals=0,
|
|
89
|
+
)
|
|
90
|
+
header = html.H1("最適化の進行状況"),
|
|
91
|
+
graphs = dbc.Card(
|
|
92
|
+
[
|
|
93
|
+
dbc.CardHeader(
|
|
94
|
+
dbc.Tabs(
|
|
95
|
+
[
|
|
96
|
+
dbc.Tab(label="目的プロット", tab_id="tab-1"),
|
|
97
|
+
dbc.Tab(label="Hypervolume", tab_id="tab-2"),
|
|
98
|
+
],
|
|
99
|
+
id="card-tabs",
|
|
100
|
+
active_tab="tab-1",
|
|
101
|
+
)
|
|
102
|
+
),
|
|
103
|
+
dbc.CardBody(html.P(id="card-content", className="card-text")),
|
|
104
|
+
]
|
|
105
|
+
)
|
|
106
|
+
toggle_update_button = dbc.Button('グラフの自動更新の一時停止', id='toggle-update-button')
|
|
107
|
+
interrupt_button = dbc.Button('最適化を中断', id='interrupt-button', color='danger')
|
|
108
|
+
status_text = dcc.Markdown(f'''
|
|
109
|
+
---
|
|
110
|
+
- このページでは、最適化の進捗状況を見ることができます。
|
|
111
|
+
- このページを閉じても最適化は進行します。
|
|
112
|
+
- この機能はブラウザによる状況確認機能ですが、インターネット通信は行いません。
|
|
113
|
+
- 再びこのページを開くには、ブラウザのアドレスバーに __localhost:8080__ と入力してください。
|
|
114
|
+
- ※ 特定のホスト名及びポートを指定するには、OptimizerBase.main() の実行前に
|
|
115
|
+
OptimizerBase.set_monitor_server() を実行してください。
|
|
116
|
+
''')
|
|
117
|
+
|
|
118
|
+
# layout の設定
|
|
119
|
+
layout = dbc.Container([
|
|
120
|
+
dbc.Row([dbc.Col(dummy), dbc.Col(interval)]),
|
|
121
|
+
dbc.Row([dbc.Col(header)]),
|
|
122
|
+
dbc.Row([dbc.Col(graphs)]),
|
|
123
|
+
dbc.Row([dbc.Col(toggle_update_button), dbc.Col(interrupt_button)]),
|
|
124
|
+
dbc.Row([dbc.Col(status_text)]),
|
|
125
|
+
], fluid=True)
|
|
126
|
+
|
|
127
|
+
return layout
|
|
128
|
+
|
|
129
|
+
|
|
70
130
|
class Monitor(object):
|
|
71
131
|
|
|
72
132
|
def __init__(self, femopt):
|
|
73
133
|
|
|
134
|
+
# 引数の処理
|
|
74
135
|
self.femopt = femopt
|
|
75
136
|
|
|
137
|
+
# ログファイルの保存場所
|
|
76
138
|
log_path = self.femopt.history.path.replace('.csv', '.uilog')
|
|
77
139
|
l = logging.getLogger()
|
|
78
140
|
l.addHandler(logging.FileHandler(log_path))
|
|
79
141
|
|
|
142
|
+
# app の立上げ
|
|
80
143
|
self.app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
|
|
81
144
|
|
|
82
|
-
#
|
|
83
|
-
self.
|
|
84
|
-
self.toggle_n_clicks = 0
|
|
85
|
-
self.home = self.setup_home()
|
|
86
|
-
# self.multi_pairplot_layout = self.setup_page1()
|
|
145
|
+
# ページの components と layout の設定
|
|
146
|
+
self.home = setup_home()
|
|
87
147
|
|
|
88
148
|
# setup sidebar
|
|
89
149
|
# https://dash-bootstrap-components.opensource.faculty.ai/examples/simple-sidebar/
|
|
@@ -111,13 +171,12 @@ class Monitor(object):
|
|
|
111
171
|
html.H2("PyFemtet Monitor", className="display-4"),
|
|
112
172
|
html.Hr(),
|
|
113
173
|
html.P(
|
|
114
|
-
"
|
|
174
|
+
"最適化の進捗を可視化します.", className="lead"
|
|
115
175
|
),
|
|
116
176
|
dbc.Nav(
|
|
117
177
|
[
|
|
118
178
|
dbc.NavLink("Home", href="/", active="exact"),
|
|
119
179
|
# dbc.NavLink("ペアプロット", href="/page-1", active="exact"),
|
|
120
|
-
# dbc.NavLink("Page 2", href="/page-2", active="exact"),
|
|
121
180
|
],
|
|
122
181
|
vertical=True,
|
|
123
182
|
pills=True,
|
|
@@ -131,7 +190,7 @@ class Monitor(object):
|
|
|
131
190
|
# sidebar によるページ遷移のための callback
|
|
132
191
|
@self.app.callback(Output("page-content", "children"), [Input("url", "pathname")])
|
|
133
192
|
def render_page_content(pathname):
|
|
134
|
-
if pathname == "/":
|
|
193
|
+
if pathname == "/": # p0
|
|
135
194
|
return self.home
|
|
136
195
|
# elif pathname == "/page-1":
|
|
137
196
|
# return self.multi_pairplot_layout
|
|
@@ -147,34 +206,41 @@ class Monitor(object):
|
|
|
147
206
|
className="p-3 bg-light rounded-3",
|
|
148
207
|
)
|
|
149
208
|
|
|
150
|
-
# 1.
|
|
151
|
-
# 2.
|
|
152
|
-
# 3.
|
|
153
|
-
# 4.
|
|
209
|
+
# 1. 一定時間ごとに ==> 自動更新が有効なら figure を更新する
|
|
210
|
+
# 2. 中断ボタンを押したら ==> 更新を無効にする and 中断を無効にする
|
|
211
|
+
# 3. メイン処理が中断 or 終了していたら ==> 更新を無効にする and 中断を無効にする
|
|
212
|
+
# 4. toggle_button が押されたら ==> 更新を有効にする or 更新を無効にする
|
|
213
|
+
# 5. タブを押したら ==> グラフの種類を切り替える
|
|
154
214
|
@self.app.callback(
|
|
155
215
|
[
|
|
156
|
-
Output('interval-component', 'max_intervals'),
|
|
157
|
-
Output('interrupt-button', 'disabled'),
|
|
158
|
-
Output('toggle-update-button', 'disabled'),
|
|
159
|
-
Output('toggle-update-button', 'children'),
|
|
160
|
-
Output('
|
|
216
|
+
Output('interval-component', 'max_intervals'), # 2 3 4
|
|
217
|
+
Output('interrupt-button', 'disabled'), # 2 3
|
|
218
|
+
Output('toggle-update-button', 'disabled'), # 2 3 4
|
|
219
|
+
Output('toggle-update-button', 'children'), # 2 3 4
|
|
220
|
+
Output('card-content', 'children'), # 1 5
|
|
161
221
|
],
|
|
162
222
|
[
|
|
163
|
-
Input('interval-component', 'n_intervals'),
|
|
164
|
-
Input('toggle-update-button', 'n_clicks'),
|
|
165
|
-
Input('interrupt-button', 'n_clicks'),
|
|
223
|
+
Input('interval-component', 'n_intervals'), # 1 3
|
|
224
|
+
Input('toggle-update-button', 'n_clicks'), # 4
|
|
225
|
+
Input('interrupt-button', 'n_clicks'), # 2
|
|
226
|
+
Input("card-tabs", "active_tab"), # 5
|
|
166
227
|
]
|
|
167
228
|
)
|
|
168
|
-
def
|
|
229
|
+
def control(
|
|
230
|
+
_, # n_intervals
|
|
231
|
+
toggle_n_clicks,
|
|
232
|
+
interrupt_n_clicks,
|
|
233
|
+
active_tab_id,
|
|
234
|
+
):
|
|
169
235
|
# 引数の処理
|
|
170
236
|
toggle_n_clicks = 0 if toggle_n_clicks is None else toggle_n_clicks
|
|
171
237
|
interrupt_n_clicks = 0 if interrupt_n_clicks is None else interrupt_n_clicks
|
|
172
238
|
|
|
173
239
|
# 下記を基本に戻り値を上書きしていく(優先のものほど下に来る)
|
|
174
|
-
# 最後にクリック数を更新するので途中で抜けるのは好ましくない
|
|
175
240
|
max_intervals = -1 # enable
|
|
176
241
|
button_disable = False
|
|
177
242
|
toggle_text = 'グラフの自動更新を一時停止する'
|
|
243
|
+
graph = None
|
|
178
244
|
|
|
179
245
|
# toggle_button が奇数なら interval を disable にする
|
|
180
246
|
if toggle_n_clicks % 2 == 1:
|
|
@@ -196,75 +262,21 @@ class Monitor(object):
|
|
|
196
262
|
toggle_text = 'グラフの更新は行われません'
|
|
197
263
|
|
|
198
264
|
# 中断ボタンが押されたなら interval とボタンを disable にして femopt の状態を set する
|
|
199
|
-
if
|
|
265
|
+
button_id = ctx.triggered_id if not None else 'No clicks yet'
|
|
266
|
+
if button_id == 'interrupt-button':
|
|
200
267
|
max_intervals = 0 # disable
|
|
201
268
|
button_disable = True
|
|
202
269
|
toggle_text = 'グラフの更新は行われません'
|
|
203
270
|
self.femopt.ipv.set_state('interrupted')
|
|
204
271
|
|
|
205
|
-
#
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
def setup_home(self):
|
|
212
|
-
# components の設定
|
|
213
|
-
# https://dash-bootstrap-components.opensource.faculty.ai/docs/components/accordion/
|
|
214
|
-
dummy = html.Div('', id='dummy')
|
|
215
|
-
interval = dcc.Interval(
|
|
216
|
-
id='interval-component',
|
|
217
|
-
interval=1*1000, # in milliseconds
|
|
218
|
-
n_intervals=0,
|
|
219
|
-
)
|
|
220
|
-
header = html.H1("最適化の進行状況"),
|
|
221
|
-
graph = dcc.Graph(id='scatter-matrix-graph')
|
|
222
|
-
toggle_update_button = dbc.Button('グラフの自動更新の一時停止', id='toggle-update-button')
|
|
223
|
-
interrupt_button = dbc.Button('最適化を中断', id='interrupt-button', color='danger')
|
|
224
|
-
status_text = dcc.Markdown(f'''
|
|
225
|
-
---
|
|
226
|
-
- このページでは、最適化の進捗状況を見ることができます。
|
|
227
|
-
- このページを閉じても最適化は進行します。
|
|
228
|
-
- この機能はブラウザによる状況確認機能ですが、インターネット通信は行いません。
|
|
229
|
-
- 再びこのページを開くには、ブラウザのアドレスバーに __localhost:8080__ と入力してください。
|
|
230
|
-
- ※ 特定のホスト名及びポートを指定するには、OptimizerBase.main() の実行前に
|
|
231
|
-
OptimizerBase.set_monitor_server() を実行してください。
|
|
232
|
-
''')
|
|
233
|
-
|
|
234
|
-
# layout の設定
|
|
235
|
-
layout = dbc.Container([
|
|
236
|
-
dbc.Row([dbc.Col(dummy), dbc.Col(interval)]),
|
|
237
|
-
dbc.Row([dbc.Col(header)]),
|
|
238
|
-
dbc.Row([dbc.Col(graph)]),
|
|
239
|
-
dbc.Row([dbc.Col(toggle_update_button), dbc.Col(interrupt_button)]),
|
|
240
|
-
dbc.Row([dbc.Col(status_text)]),
|
|
241
|
-
], fluid=True)
|
|
242
|
-
|
|
243
|
-
return layout
|
|
244
|
-
|
|
245
|
-
# def setup_page1(self):
|
|
246
|
-
# # components の設定
|
|
247
|
-
# # https://dash-bootstrap-components.opensource.faculty.ai/docs/components/accordion/
|
|
248
|
-
# dummy = html.Div('', id='dummy')
|
|
249
|
-
# interval = dcc.Interval(
|
|
250
|
-
# id='interval-component',
|
|
251
|
-
# interval=1*1000, # in milliseconds
|
|
252
|
-
# n_intervals=0,
|
|
253
|
-
# )
|
|
254
|
-
# header = html.H1("最適化の進行状況"),
|
|
255
|
-
# graph = dcc.Graph(id='scatter-matrix-graph')
|
|
256
|
-
# toggle_update_button = dbc.Button('グラフの自動更新の一時停止', id='toggle-update-button')
|
|
257
|
-
# interrupt_button = dbc.Button('最適化を中断', id='interrupt-button', color='danger')
|
|
258
|
-
#
|
|
259
|
-
# # layout の設定
|
|
260
|
-
# layout = dbc.Container([
|
|
261
|
-
# dbc.Row([dbc.Col(dummy), dbc.Col(interval)]),
|
|
262
|
-
# dbc.Row([dbc.Col(header)]),
|
|
263
|
-
# dbc.Row([dbc.Col(graph)]),
|
|
264
|
-
# dbc.Row([dbc.Col(toggle_update_button), dbc.Col(interrupt_button)], justify="center",),
|
|
265
|
-
# ], fluid=True)
|
|
266
|
-
# return layout
|
|
272
|
+
# グラフを更新する
|
|
273
|
+
if active_tab_id is not None:
|
|
274
|
+
if active_tab_id == "tab-1":
|
|
275
|
+
graph = dcc.Graph(figure=update_scatter_matrix(self.femopt))
|
|
276
|
+
elif active_tab_id == "tab-2":
|
|
277
|
+
graph = dcc.Graph(figure=update_hypervolume_plot(self.femopt))
|
|
267
278
|
|
|
279
|
+
return max_intervals, button_disable, button_disable, toggle_text, graph
|
|
268
280
|
|
|
269
281
|
def start_server(self, host='localhost', port=8080):
|
|
270
282
|
|
|
@@ -281,6 +293,7 @@ class Monitor(object):
|
|
|
281
293
|
|
|
282
294
|
|
|
283
295
|
if __name__ == '__main__':
|
|
296
|
+
import datetime
|
|
284
297
|
from time import sleep
|
|
285
298
|
from threading import Thread
|
|
286
299
|
import numpy as np
|
|
@@ -302,15 +315,22 @@ if __name__ == '__main__':
|
|
|
302
315
|
def __init__(self):
|
|
303
316
|
self.obj_names = 'A B C D E'.split()
|
|
304
317
|
self.path = 'tmp.csv'
|
|
318
|
+
self.data = None
|
|
305
319
|
t = Thread(target=self.update)
|
|
306
320
|
t.start()
|
|
307
321
|
|
|
308
322
|
def update(self):
|
|
323
|
+
|
|
324
|
+
d = dict(
|
|
325
|
+
trial=range(5),
|
|
326
|
+
hypervolume=np.random.rand(5),
|
|
327
|
+
time=[datetime.datetime(year=2000, month=1, day=1, second=s) for s in range(5)]
|
|
328
|
+
)
|
|
329
|
+
for obj_name in self.obj_names:
|
|
330
|
+
d[obj_name] = np.random.rand(5)
|
|
331
|
+
|
|
309
332
|
while True:
|
|
310
|
-
self.data = pd.DataFrame(
|
|
311
|
-
np.random.rand(5, len(self.obj_names)),
|
|
312
|
-
columns=self.obj_names,
|
|
313
|
-
)
|
|
333
|
+
self.data = pd.DataFrame(d)
|
|
314
334
|
sleep(1)
|
|
315
335
|
|
|
316
336
|
|
|
@@ -319,8 +339,9 @@ if __name__ == '__main__':
|
|
|
319
339
|
self.history = history
|
|
320
340
|
self.ipv = ipv
|
|
321
341
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
342
|
+
|
|
343
|
+
_ipv = IPV()
|
|
344
|
+
_history = History()
|
|
345
|
+
_femopt = FEMOPT(_history, _ipv)
|
|
346
|
+
monitor = Monitor(_femopt)
|
|
326
347
|
monitor.start_server()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pyfemtet
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Design parameter optimization using Femtet.
|
|
5
|
+
Home-page: https://github.com/pyfemtet/pyfemtet
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Author: kazuma.naito
|
|
8
|
+
Author-email: kazuma.naito@murata.com
|
|
9
|
+
Requires-Python: >=3.11,<3.12
|
|
10
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Requires-Dist: botorch (>=0.9.5,<0.10.0)
|
|
14
|
+
Requires-Dist: dash (>=2.14.2,<3.0.0)
|
|
15
|
+
Requires-Dist: dash-bootstrap-components (>=1.5.0,<2.0.0)
|
|
16
|
+
Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
|
|
17
|
+
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
18
|
+
Requires-Dist: openpyxl (>=3.1.2,<4.0.0)
|
|
19
|
+
Requires-Dist: optuna (>=3.4.0,<4.0.0)
|
|
20
|
+
Requires-Dist: pandas (>=2.1.3,<3.0.0)
|
|
21
|
+
Requires-Dist: plotly (>=5.18.0,<6.0.0)
|
|
22
|
+
Requires-Dist: psutil (>=5.9.6,<6.0.0)
|
|
23
|
+
Requires-Dist: pywin32 (>=306,<307)
|
|
24
|
+
Requires-Dist: ray (>=2.8.1,<3.0.0)
|
|
25
|
+
Requires-Dist: scipy (>=1.11.4,<2.0.0)
|
|
26
|
+
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
|
|
27
|
+
Project-URL: Repository, https://github.com/pyfemtet/pyfemtet
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
PyFemtet is the extension package for Femtet with Python.
|
|
31
|
+
|
|
32
|
+
- Femtet Website: https://www.muratasoftware.com/
|
|
33
|
+
- Documentation: https://pyfemtet.github.io/pyfemtet/
|
|
34
|
+
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
35
|
+
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
It provides:
|
|
39
|
+
|
|
40
|
+
- single and multi objective parameter optimization
|
|
41
|
+
- tools for connect Femtet and Python by pid
|
|
42
|
+
|
|
@@ -8,7 +8,7 @@ pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=z0zwG_F__BRyZjxJrozfIc0gR
|
|
|
8
8
|
pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=bqgSWuVlzjGYTl7mQOAFBxCmkSSY8DV2w4hfMhVqKzQ,2370
|
|
9
9
|
pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=TYXKt5ZFbsXsEsnmLGX5m-lSBZe8PHT7EFj0IqkrCwM,175152
|
|
10
10
|
pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=DHk_m5mr0yR82fLHglKN9JtI-h_HJkRdKH6uBnzc9Zc,2258
|
|
11
|
-
pyfemtet/__init__.py,sha256=
|
|
11
|
+
pyfemtet/__init__.py,sha256=tC9CwL4Nm8brVXJnZNGk_eoZaJj6eOtLKtOrdJMrpoI,21
|
|
12
12
|
pyfemtet/_opt/_NX_Femtet.py,sha256=o0xEgc1D254thpJ2Lv3PCS7IuoRo36zVZUgMu3VNB3o,1751
|
|
13
13
|
pyfemtet/_opt/_SW_Femtet.py,sha256=555NBjpiEw89uAVWGDgDz_veIGtRv3tIJlVrL3Fz8zk,6044
|
|
14
14
|
pyfemtet/_opt/_SimplestUI.py,sha256=aA-wrShqQKE4BSECJjIIqO20CWfZLelBNAxSxS8vdjs,2681
|
|
@@ -18,14 +18,14 @@ pyfemtet/_opt/visualization/_visualization.py,sha256=mu34vAcZy5uq-sWzdcilpVxfGQX
|
|
|
18
18
|
pyfemtet/_opt/visualization/_visualizationNameSpace.py,sha256=fUGYMR-oT7ryzkTcf6eu8lW91Zjc-NQ6ajtbJ37KDx8,9432
|
|
19
19
|
pyfemtet/opt/_FemtetWithNX/update_model.py,sha256=v-giziMzeWnZKo24VLOIF5nfZYAcOjTyqqXkz_8jq_4,2583
|
|
20
20
|
pyfemtet/opt/__init__.py,sha256=W_bcyvXkOAeLzIDw39Mtozp7mv68MhmiKA_0FdN9N9g,125
|
|
21
|
-
pyfemtet/opt/base.py,sha256=
|
|
21
|
+
pyfemtet/opt/base.py,sha256=Lhydo0sjtWbNYTpRYaDp1P-wkbr2KJm8p8irb3Q0EIk,36877
|
|
22
22
|
pyfemtet/opt/core.py,sha256=NZIytX1OZuEfbcMhdAFpuPwCWU85yNXA7LwdJzB0om8,3638
|
|
23
|
-
pyfemtet/opt/interface.py,sha256=
|
|
24
|
-
pyfemtet/opt/monitor.py,sha256=
|
|
23
|
+
pyfemtet/opt/interface.py,sha256=JYGwsh143ZEvuY09q1tr6eL7mf1e7ReCFWs9XIOYRUY,29645
|
|
24
|
+
pyfemtet/opt/monitor.py,sha256=BTJ58BCVkM3iMD0LUBnKeBPXs8LWau_fyULLbLpfKY8,11933
|
|
25
25
|
pyfemtet/opt/optimizer.py,sha256=BrLpfN89AUxglrBzLub6TGr_Q91MKI5ZOT26LdnlK44,8083
|
|
26
26
|
pyfemtet/tools/DispatchUtils.py,sha256=nCEhlkM02JY1RVrqH_R6CyZyF2ndNpWbt1CBfqVT1fU,9166
|
|
27
27
|
pyfemtet/tools/__init__.py,sha256=jZYlCnY3B5WjwKfpRJ05Sht41ymtWOKnU8mXY1RnnT4,1626
|
|
28
|
-
pyfemtet-0.2.
|
|
29
|
-
pyfemtet-0.2.
|
|
30
|
-
pyfemtet-0.2.
|
|
31
|
-
pyfemtet-0.2.
|
|
28
|
+
pyfemtet-0.2.1.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
29
|
+
pyfemtet-0.2.1.dist-info/METADATA,sha256=XB_YGM7F0oWDDFwKYp3gHwJR8FKcnnB3D4KxCZQt9-I,1472
|
|
30
|
+
pyfemtet-0.2.1.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
31
|
+
pyfemtet-0.2.1.dist-info/RECORD,,
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: pyfemtet
|
|
3
|
-
Version: 0.2.0
|
|
4
|
-
Summary: Design parameter optimization using Femtet.
|
|
5
|
-
Home-page: https://github.com/pyfemtet/pyfemtet
|
|
6
|
-
License: BSD-3-Clause
|
|
7
|
-
Author: kazuma.naito
|
|
8
|
-
Author-email: kazuma.naito@murata.com
|
|
9
|
-
Requires-Python: >=3.11,<4.0
|
|
10
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Requires-Dist: botorch (>=0.9.5,<0.10.0)
|
|
15
|
-
Requires-Dist: dash (>=2.14.2,<3.0.0)
|
|
16
|
-
Requires-Dist: dash-bootstrap-components (>=1.5.0,<2.0.0)
|
|
17
|
-
Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
|
|
18
|
-
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
19
|
-
Requires-Dist: openpyxl (>=3.1.2,<4.0.0)
|
|
20
|
-
Requires-Dist: optuna (>=3.4.0,<4.0.0)
|
|
21
|
-
Requires-Dist: pandas (>=2.1.3,<3.0.0)
|
|
22
|
-
Requires-Dist: plotly (>=5.18.0,<6.0.0)
|
|
23
|
-
Requires-Dist: psutil (>=5.9.6,<6.0.0)
|
|
24
|
-
Requires-Dist: pywin32 (>=306,<307)
|
|
25
|
-
Requires-Dist: ray (>=2.8.1,<3.0.0)
|
|
26
|
-
Requires-Dist: scipy (>=1.11.4,<2.0.0)
|
|
27
|
-
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
|
|
28
|
-
Project-URL: Repository, https://github.com/pyfemtet/pyfemtet
|
|
29
|
-
Description-Content-Type: text/markdown
|
|
30
|
-
|
|
31
|
-
# Welcome To PyFemtet !
|
|
32
|
-
pyfemtet.opt は、Femtet を用いてパラメータ最適化を行うことのできる Python パッケージです。
|
|
33
|
-
|
|
34
|
-
## 機能
|
|
35
|
-
|
|
36
|
-
Femtet を使ったシミュレーションによって、パラメータの最適化を行うことができます。
|
|
37
|
-
連続変数の単目的・多目的最適化に対応しています。
|
|
38
|
-
いくつかの最適化結果可視化機能を備えており、最適化結果の分析が可能です。
|
|
39
|
-
|
|
40
|
-
***注意:現在、本ライブラリは beta 版です!***
|
|
41
|
-
|
|
42
|
-
## Install
|
|
43
|
-
|
|
44
|
-
インストール方法は以下の通りです。
|
|
45
|
-
|
|
46
|
-
1. Femtet のインストール
|
|
47
|
-
|
|
48
|
-
[https://www.muratasoftware.com/](https://www.muratasoftware.com/)
|
|
49
|
-
|
|
50
|
-
初めての方は、試用版または個人版のご利用もご検討ください。
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
1. Femtet のマクロ有効化
|
|
54
|
-
|
|
55
|
-
Femtet インストール後にスタートメニューから「マクロ機能を有効化する」を実行してください。
|
|
56
|
-
|
|
57
|
-
1. Python のインストール
|
|
58
|
-
|
|
59
|
-
[https://www.python.org/](https://www.python.org/)
|
|
60
|
-
|
|
61
|
-
1. PyFemtet のインストール
|
|
62
|
-
|
|
63
|
-
ターミナルで下記コマンドを実行してください。
|
|
64
|
-
```
|
|
65
|
-
py -m pip install pyfemtet
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
1. Femtet マクロ定数の設定
|
|
69
|
-
|
|
70
|
-
ターミナルで下記コマンドを実行してください。詳しくは Femtet マクロヘルプをご覧ください。
|
|
71
|
-
```
|
|
72
|
-
py -m win32com.client.makepy FemtetMacro
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
## document
|
|
78
|
-
|
|
79
|
-
下記をご覧ください。
|
|
80
|
-
https://pyfemtet.github.io/pyfemtet/
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## English version of this document
|
|
86
|
-
We're sorry, this section is under constructing.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
Copyright (C) 2023 Murata Manufacturing Co., Ltd. All Rights Reserved.
|
|
90
|
-
|
|
91
|
-
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
|
File without changes
|