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 CHANGED
@@ -1 +1 @@
1
- __version__ = "0.2.0"
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
- # settings for each page
83
- self.interrupt_n_clicks = 0
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
- "最適化の進捗を可視化できます.", className="lead"
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. 中断ボタンを押したら / 更新をやめる and 中断ボタンを disable にする
151
- # 2. メイン処理が中断 or 終了していたら / 更新をやめ and 中断ボタンを disable にする
152
- # 3. toggle_button が押されていたら / 更新を切り替える
153
- # 4. すべての発火ケースにおいて、まず(最後の) femopt の更新を行う
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('scatter-matrix-graph', 'figure'),
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 stop_interval(_, toggle_n_clicks, interrupt_n_clicks):
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 interrupt_n_clicks > self.interrupt_n_clicks:
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
- self.interrupt_n_clicks = interrupt_n_clicks
207
- self.toggle_n_clicks = toggle_n_clicks
208
-
209
- return max_intervals, button_disable, button_disable, toggle_text, update_scatter_matrix(self.femopt)
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
- ipv = IPV()
323
- history = History()
324
- femopt = FEMOPT(history, ipv)
325
- monitor = Monitor(femopt)
342
+
343
+ _ipv = IPV()
344
+ _history = History()
345
+ _femopt = FEMOPT(_history, _ipv)
346
+ monitor = Monitor(_femopt)
326
347
  monitor.start_server()
@@ -1,4 +1,4 @@
1
- Copyright (c) 2023 Murata Manufacturing Co., Ltd.
1
+ Copyright (c) 2023 Kazuma Naito
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@@ -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=1KhrBItVjTCR-Sumh0o09b_aKrjTTcJrpTBh5GBw6Lk,21
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=AmqFqb8gZcdJUEWLK59ks5Iw0VRQXRCN4wiuHJTT5_w,36870
21
+ pyfemtet/opt/base.py,sha256=Lhydo0sjtWbNYTpRYaDp1P-wkbr2KJm8p8irb3Q0EIk,36877
22
22
  pyfemtet/opt/core.py,sha256=NZIytX1OZuEfbcMhdAFpuPwCWU85yNXA7LwdJzB0om8,3638
23
- pyfemtet/opt/interface.py,sha256=F11wjNfTtUM01x51hUTwdcI0lDO123EjMOSRgX6aGmg,29318
24
- pyfemtet/opt/monitor.py,sha256=ijqse6LAoF9iXMZveT4fNN7AQ3QHVgqANFkyo2OKpf0,11898
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.0.dist-info/LICENSE,sha256=LngVydbpgtwcYxwOunoGim0JHC_G1S-Ae78IVI3AEAw,1503
29
- pyfemtet-0.2.0.dist-info/METADATA,sha256=ozAdpQrXDVSMI96XQOAGiJ4NpNKWCyIKJ2zxpTWXNhE,2945
30
- pyfemtet-0.2.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
31
- pyfemtet-0.2.0.dist-info/RECORD,,
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.