pyfemtet 0.4.2__py3-none-any.whl → 0.4.4__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/FemtetPJTSample/_her_ex40_parametric.py +148 -0
- pyfemtet/__init__.py +1 -1
- pyfemtet/opt/_femopt.py +48 -16
- pyfemtet/opt/_femopt_core.py +14 -7
- pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_NX.prt +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_NX.py +132 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.py +132 -0
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.py +75 -0
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.py +59 -0
- pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/her_ex40_parametric.py +137 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py +61 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py +62 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.py +59 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py +126 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py +126 -0
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py +71 -0
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py +58 -0
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py +137 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py +59 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +60 -0
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py +57 -0
- pyfemtet/opt/interface/_femtet.py +36 -18
- pyfemtet/opt/interface/_femtet_parametric.py +72 -0
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py +2 -8
- pyfemtet/opt/interface/_femtet_with_sldworks.py +2 -8
- pyfemtet/opt/opt/_base.py +12 -3
- pyfemtet/opt/visualization/_monitor.py +2 -2
- pyfemtet-0.4.4.dist-info/METADATA +97 -0
- pyfemtet-0.4.4.dist-info/RECORD +72 -0
- pyfemtet-0.4.2.dist-info/METADATA +0 -48
- pyfemtet-0.4.2.dist-info/RECORD +0 -38
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.4.dist-info}/LICENSE +0 -0
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.4.dist-info}/WHEEL +0 -0
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.4.dist-info}/entry_points.txt +0 -0
|
@@ -59,6 +59,8 @@ class FemtetInterface(FEMInterface):
|
|
|
59
59
|
connect_method='auto',
|
|
60
60
|
strictly_pid_specify=True,
|
|
61
61
|
allow_without_project=False,
|
|
62
|
+
open_result_with_gui=True,
|
|
63
|
+
use_parametric_as_objective=False,
|
|
62
64
|
**kwargs # 継承されたクラスからの引数
|
|
63
65
|
):
|
|
64
66
|
|
|
@@ -74,6 +76,7 @@ class FemtetInterface(FEMInterface):
|
|
|
74
76
|
self.connect_method = connect_method
|
|
75
77
|
self.allow_without_project = allow_without_project
|
|
76
78
|
self.original_femprj_path = self.femprj_path
|
|
79
|
+
self.open_result_with_gui = open_result_with_gui
|
|
77
80
|
|
|
78
81
|
# その他のメンバーの宣言や初期化
|
|
79
82
|
self.Femtet = None
|
|
@@ -83,6 +86,7 @@ class FemtetInterface(FEMInterface):
|
|
|
83
86
|
self.parameters = None
|
|
84
87
|
self.max_api_retry = 3
|
|
85
88
|
self.strictly_pid_specify = strictly_pid_specify
|
|
89
|
+
self.use_parametric_as_objective = use_parametric_as_objective
|
|
86
90
|
|
|
87
91
|
# dask サブプロセスのときは femprj を更新し connect_method を new にする
|
|
88
92
|
try:
|
|
@@ -108,6 +112,8 @@ class FemtetInterface(FEMInterface):
|
|
|
108
112
|
super().__init__(
|
|
109
113
|
femprj_path=self.femprj_path,
|
|
110
114
|
model_name=self.model_name,
|
|
115
|
+
open_result_with_gui=self.open_result_with_gui,
|
|
116
|
+
use_parametric_as_objective=self.use_parametric_as_objective,
|
|
111
117
|
**kwargs
|
|
112
118
|
)
|
|
113
119
|
|
|
@@ -200,7 +206,7 @@ class FemtetInterface(FEMInterface):
|
|
|
200
206
|
def _call_femtet_api(
|
|
201
207
|
self,
|
|
202
208
|
fun,
|
|
203
|
-
|
|
209
|
+
return_value_if_failed,
|
|
204
210
|
if_error,
|
|
205
211
|
error_message,
|
|
206
212
|
is_Gaudi_method=False,
|
|
@@ -216,7 +222,7 @@ class FemtetInterface(FEMInterface):
|
|
|
216
222
|
----------
|
|
217
223
|
fun : Callable
|
|
218
224
|
Femtet API
|
|
219
|
-
|
|
225
|
+
return_value_if_failed : Any
|
|
220
226
|
API が失敗した時の戻り値
|
|
221
227
|
if_error : Type
|
|
222
228
|
エラーが発生していたときに送出したい Exception
|
|
@@ -275,9 +281,9 @@ class FemtetInterface(FEMInterface):
|
|
|
275
281
|
except com_error:
|
|
276
282
|
# パターン 2 エラーが生じたことは確定なのでエラーが起こるよう returns を作る
|
|
277
283
|
if ret_for_check_idx is None:
|
|
278
|
-
returns =
|
|
284
|
+
returns = return_value_if_failed
|
|
279
285
|
else:
|
|
280
|
-
returns = [
|
|
286
|
+
returns = [return_value_if_failed] * (ret_for_check_idx + 1)
|
|
281
287
|
logger.debug(' ' * print_indent + f'Femtet API result:{returns}')
|
|
282
288
|
|
|
283
289
|
# チェックすべき値の抽出
|
|
@@ -287,7 +293,7 @@ class FemtetInterface(FEMInterface):
|
|
|
287
293
|
ret_for_check = returns[ret_for_check_idx]
|
|
288
294
|
|
|
289
295
|
# エラーのない場合は戻り値を return する
|
|
290
|
-
if ret_for_check !=
|
|
296
|
+
if ret_for_check != return_value_if_failed:
|
|
291
297
|
return returns
|
|
292
298
|
|
|
293
299
|
# エラーがある場合は Femtet の生死をチェックし,
|
|
@@ -321,7 +327,7 @@ class FemtetInterface(FEMInterface):
|
|
|
321
327
|
logger.info(' ' * print_indent + f'Femtet が回復されました。コマンド {fun.__name__} を再試行します。')
|
|
322
328
|
return self._call_femtet_api(
|
|
323
329
|
fun,
|
|
324
|
-
|
|
330
|
+
return_value_if_failed,
|
|
325
331
|
if_error,
|
|
326
332
|
error_message,
|
|
327
333
|
is_Gaudi_method,
|
|
@@ -450,7 +456,7 @@ class FemtetInterface(FEMInterface):
|
|
|
450
456
|
# Femtet の設計変数の更新
|
|
451
457
|
existing_variable_names = self._call_femtet_api(
|
|
452
458
|
fun=self.Femtet.GetVariableNames_py,
|
|
453
|
-
|
|
459
|
+
return_value_if_failed=False, # 意味がない
|
|
454
460
|
if_error=ModelError, # 生きてるのに失敗した場合
|
|
455
461
|
error_message=f'GetVariableNames_py に失敗しました。',
|
|
456
462
|
is_Gaudi_method=True,
|
|
@@ -471,7 +477,7 @@ class FemtetInterface(FEMInterface):
|
|
|
471
477
|
if name in existing_variable_names:
|
|
472
478
|
self._call_femtet_api(
|
|
473
479
|
fun=self.Femtet.UpdateVariable,
|
|
474
|
-
|
|
480
|
+
return_value_if_failed=False,
|
|
475
481
|
if_error=ModelError, # 生きてるのに失敗した場合
|
|
476
482
|
error_message=f'変数の更新に失敗しました:変数{name}, 値{value}',
|
|
477
483
|
is_Gaudi_method=True,
|
|
@@ -490,7 +496,7 @@ class FemtetInterface(FEMInterface):
|
|
|
490
496
|
value = row['value']
|
|
491
497
|
self._call_femtet_api(
|
|
492
498
|
fun=self.Femtet.UpdateVariable,
|
|
493
|
-
|
|
499
|
+
return_value_if_failed=False,
|
|
494
500
|
if_error=ModelError, # 生きてるのに失敗した場合
|
|
495
501
|
error_message=f'変数の更新に失敗しました:変数{name}, 値{value}',
|
|
496
502
|
is_Gaudi_method=True,
|
|
@@ -543,14 +549,25 @@ class FemtetInterface(FEMInterface):
|
|
|
543
549
|
is_Gaudi_method=True,
|
|
544
550
|
)
|
|
545
551
|
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
self.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
552
|
+
if self.use_parametric_as_objective:
|
|
553
|
+
from pyfemtet.opt.interface._femtet_parametric import solve_via_parametric_dll
|
|
554
|
+
self._call_femtet_api(
|
|
555
|
+
fun=solve_via_parametric_dll,
|
|
556
|
+
return_value_if_failed=False,
|
|
557
|
+
if_error=SolveError,
|
|
558
|
+
error_message='パラメトリック解析を用いたソルブに失敗しました',
|
|
559
|
+
is_Gaudi_method=True,
|
|
560
|
+
args=(self.Femtet,),
|
|
561
|
+
)
|
|
562
|
+
else:
|
|
563
|
+
# # ソルブする
|
|
564
|
+
self._call_femtet_api(
|
|
565
|
+
self.Femtet.Solve,
|
|
566
|
+
False,
|
|
567
|
+
SolveError,
|
|
568
|
+
'ソルブに失敗しました',
|
|
569
|
+
is_Gaudi_method=True,
|
|
570
|
+
)
|
|
554
571
|
|
|
555
572
|
# 次に呼ばれるはずのユーザー定義コスト関数の記述を簡単にするため先に解析結果を開いておく
|
|
556
573
|
self._call_femtet_api(
|
|
@@ -559,13 +576,14 @@ class FemtetInterface(FEMInterface):
|
|
|
559
576
|
SolveError, # 生きてるのに開けない場合
|
|
560
577
|
error_message='解析結果のオープンに失敗しました',
|
|
561
578
|
is_Gaudi_method=True,
|
|
562
|
-
args=(
|
|
579
|
+
args=(self.open_result_with_gui,),
|
|
563
580
|
)
|
|
564
581
|
|
|
565
582
|
def update(self, parameters: 'pd.DataFrame') -> None:
|
|
566
583
|
"""See :func:`FEMInterface.update`"""
|
|
567
584
|
self.parameters = parameters.copy()
|
|
568
585
|
self.update_model(parameters)
|
|
586
|
+
# TODO: CAD 連携における座標を基にした境界条件の割当直しなどの処理をここに挟めるようにする
|
|
569
587
|
self.solve()
|
|
570
588
|
|
|
571
589
|
def quit(self, timeout=1, force=True):
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from pyfemtet.dispatch_extensions import _get_pid
|
|
2
|
+
|
|
3
|
+
import winreg
|
|
4
|
+
import ctypes
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _get_dll(Femtet):
|
|
8
|
+
femtet_major_version = _get_femtet_major_version(Femtet)
|
|
9
|
+
dll_path = _get_parametric_dll_path(femtet_major_version)
|
|
10
|
+
return ctypes.cdll.LoadLibrary(dll_path)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _get_femtet_major_version(Femtet):
|
|
14
|
+
from pyfemtet.core import _version
|
|
15
|
+
version_int8 = _version(Femtet=Femtet)
|
|
16
|
+
return str(version_int8)[0:4]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _get_parametric_dll_path(femtet_major_version) -> str:
|
|
20
|
+
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\FemtetInfo\InstallVersion\x64')
|
|
21
|
+
_, nValues, _ = winreg.QueryInfoKey(key)
|
|
22
|
+
for i in range(nValues):
|
|
23
|
+
name, data, _ = winreg.EnumValue(key, i)
|
|
24
|
+
if name == str(femtet_major_version):
|
|
25
|
+
winreg.CloseKey(key)
|
|
26
|
+
import os
|
|
27
|
+
dll_path = os.path.join(data, 'Program', 'ParametricIF.dll')
|
|
28
|
+
return dll_path
|
|
29
|
+
# ここまで来ていたら失敗
|
|
30
|
+
winreg.CloseKey(key)
|
|
31
|
+
raise RuntimeError('パラメトリック解析機能へのアクセスに失敗しました')
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _get_dll_with_set_femtet(Femtet):
|
|
35
|
+
dll = _get_dll(Femtet)
|
|
36
|
+
pid = _get_pid(Femtet.hWnd)
|
|
37
|
+
dll.SetCurrentFemtet.restype = ctypes.c_bool
|
|
38
|
+
dll.SetCurrentFemtet(pid)
|
|
39
|
+
return dll
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def add_parametric_results_as_objectives(femopt) -> bool:
|
|
43
|
+
# load dll and set target femtet
|
|
44
|
+
dll = _get_dll_with_set_femtet(femopt.fem.Femtet)
|
|
45
|
+
|
|
46
|
+
# get objective names
|
|
47
|
+
dll.GetPrmnResult.restype = ctypes.c_int
|
|
48
|
+
n = dll.GetPrmnResult()
|
|
49
|
+
for i in range(n):
|
|
50
|
+
# objective name
|
|
51
|
+
dll.GetPrmResultName.restype = ctypes.c_char_p
|
|
52
|
+
result = dll.GetPrmResultName(i)
|
|
53
|
+
name = result.decode('mbcs')
|
|
54
|
+
# objective value function
|
|
55
|
+
femopt.add_objective(_parametric_objective, name, args=(i,))
|
|
56
|
+
return True # ここまで来たら成功
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _parametric_objective(Femtet, parametric_result_index):
|
|
60
|
+
# load dll and set target femtet
|
|
61
|
+
dll = _get_dll_with_set_femtet(Femtet)
|
|
62
|
+
dll.GetPrmResult.restype = ctypes.c_double
|
|
63
|
+
return dll.GetPrmResult(parametric_result_index)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def solve_via_parametric_dll(Femtet) -> bool:
|
|
67
|
+
# load dll and set target femtet
|
|
68
|
+
dll = _get_dll_with_set_femtet(Femtet)
|
|
69
|
+
# solve
|
|
70
|
+
dll.PrmCalcExecute.restype = ctypes.c_bool
|
|
71
|
+
succeed = dll.PrmCalcExecute()
|
|
72
|
+
return succeed # 成功した場合はTRUE、失敗した場合はFALSEを返す
|
|
@@ -27,10 +27,7 @@ class FemtetWithNXInterface(FemtetInterface):
|
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
29
|
prt_path,
|
|
30
|
-
|
|
31
|
-
model_name=None,
|
|
32
|
-
connect_method='auto',
|
|
33
|
-
strictly_pid_specify=True,
|
|
30
|
+
**kwargs
|
|
34
31
|
):
|
|
35
32
|
|
|
36
33
|
# check NX installation
|
|
@@ -51,11 +48,8 @@ class FemtetWithNXInterface(FemtetInterface):
|
|
|
51
48
|
# FemtetInterface の設定 (femprj_path, model_name の更新など)
|
|
52
49
|
# + restore 情報の上書き
|
|
53
50
|
super().__init__(
|
|
54
|
-
femprj_path=femprj_path,
|
|
55
|
-
model_name=model_name,
|
|
56
|
-
connect_method=connect_method,
|
|
57
|
-
strictly_pid_specify=strictly_pid_specify,
|
|
58
51
|
prt_path=self.prt_path,
|
|
52
|
+
**kwargs
|
|
59
53
|
)
|
|
60
54
|
|
|
61
55
|
def check_param_value(self, name):
|
|
@@ -26,10 +26,7 @@ class FemtetWithSolidworksInterface(FemtetInterface):
|
|
|
26
26
|
def __init__(
|
|
27
27
|
self,
|
|
28
28
|
sldprt_path,
|
|
29
|
-
|
|
30
|
-
model_name=None,
|
|
31
|
-
connect_method='auto',
|
|
32
|
-
strictly_pid_specify=True,
|
|
29
|
+
**kwargs
|
|
33
30
|
):
|
|
34
31
|
# 引数の処理
|
|
35
32
|
# dask サブプロセスのときは space 直下の sldprt_path を参照する
|
|
@@ -43,11 +40,8 @@ class FemtetWithSolidworksInterface(FemtetInterface):
|
|
|
43
40
|
# FemtetInterface の設定 (femprj_path, model_name の更新など)
|
|
44
41
|
# + restore 情報の上書き
|
|
45
42
|
super().__init__(
|
|
46
|
-
femprj_path=femprj_path,
|
|
47
|
-
model_name=model_name,
|
|
48
|
-
connect_method=connect_method,
|
|
49
|
-
strictly_pid_specify=strictly_pid_specify,
|
|
50
43
|
sldprt_path=self.sldprt_path,
|
|
44
|
+
**kwargs
|
|
51
45
|
)
|
|
52
46
|
|
|
53
47
|
def initialize_sldworks_connection(self):
|
pyfemtet/opt/opt/_base.py
CHANGED
|
@@ -57,6 +57,7 @@ class AbstractOptimizer(ABC):
|
|
|
57
57
|
self.n_trials = None
|
|
58
58
|
self.is_cluster = False
|
|
59
59
|
self.subprocess_idx = None
|
|
60
|
+
self._is_error_exit = False
|
|
60
61
|
|
|
61
62
|
def f(self, x):
|
|
62
63
|
"""Get x, update fem analysis, return objectives (and constraints)."""
|
|
@@ -141,7 +142,8 @@ class AbstractOptimizer(ABC):
|
|
|
141
142
|
def _finalize(self):
|
|
142
143
|
"""Destruct fem and set worker status."""
|
|
143
144
|
del self.fem
|
|
144
|
-
self.worker_status.
|
|
145
|
+
if not self.worker_status.get() == OptimizationStatus.CRASHED:
|
|
146
|
+
self.worker_status.set(OptimizationStatus.TERMINATED)
|
|
145
147
|
|
|
146
148
|
def _run(
|
|
147
149
|
self,
|
|
@@ -149,7 +151,7 @@ class AbstractOptimizer(ABC):
|
|
|
149
151
|
worker_status_list,
|
|
150
152
|
wait_setup,
|
|
151
153
|
skip_set_fem=False,
|
|
152
|
-
) ->
|
|
154
|
+
) -> bool:
|
|
153
155
|
|
|
154
156
|
# 自分の worker_status の取得
|
|
155
157
|
self.subprocess_idx = subprocess_idx
|
|
@@ -186,10 +188,17 @@ class AbstractOptimizer(ABC):
|
|
|
186
188
|
# run and finalize
|
|
187
189
|
try:
|
|
188
190
|
self.run()
|
|
191
|
+
except Exception as e:
|
|
192
|
+
logger.error("================================")
|
|
193
|
+
logger.error("An unexpected error has occured!")
|
|
194
|
+
logger.error("================================")
|
|
195
|
+
logger.error(e)
|
|
196
|
+
self._is_error_exit = True
|
|
197
|
+
self.worker_status.set(OptimizationStatus.CRASHED)
|
|
189
198
|
finally:
|
|
190
199
|
self._finalize()
|
|
191
200
|
|
|
192
|
-
return
|
|
201
|
+
return self._is_error_exit
|
|
193
202
|
|
|
194
203
|
@abstractmethod
|
|
195
204
|
def run(self) -> None:
|
|
@@ -922,8 +922,8 @@ class ProcessMonitorAppWorkerPage:
|
|
|
922
922
|
colors.append('warning')
|
|
923
923
|
elif status_int == OptimizationStatus.TERMINATED:
|
|
924
924
|
colors.append('dark')
|
|
925
|
-
elif status_int == OptimizationStatus.
|
|
926
|
-
colors.append('
|
|
925
|
+
elif status_int == OptimizationStatus.CRASHED:
|
|
926
|
+
colors.append('danger')
|
|
927
927
|
else:
|
|
928
928
|
colors.append('primary')
|
|
929
929
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pyfemtet
|
|
3
|
+
Version: 0.4.4
|
|
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.9.3,<3.13
|
|
10
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Requires-Dist: botorch (>=0.9.5) ; python_version >= "3.12" and python_version < "3.13"
|
|
16
|
+
Requires-Dist: botorch (>=0.9.5,<0.10.0) ; python_version < "3.12"
|
|
17
|
+
Requires-Dist: colorlog (>=6.8.0,<7.0.0)
|
|
18
|
+
Requires-Dist: dash (>=2.14.2,<3.0.0)
|
|
19
|
+
Requires-Dist: dash-bootstrap-components (>=1.5.0,<2.0.0)
|
|
20
|
+
Requires-Dist: dask (>=2023.12.1,<2024.0.0)
|
|
21
|
+
Requires-Dist: distributed (>=2023.12.1,<2024.0.0)
|
|
22
|
+
Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
|
|
23
|
+
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
24
|
+
Requires-Dist: openpyxl (>=3.1.2,<4.0.0)
|
|
25
|
+
Requires-Dist: optuna (>=3.4.0,<4.0.0)
|
|
26
|
+
Requires-Dist: optuna-integration (>=3.6.0,<4.0.0)
|
|
27
|
+
Requires-Dist: pandas (>=2.1.3,<3.0.0)
|
|
28
|
+
Requires-Dist: plotly (>=5.18.0,<6.0.0)
|
|
29
|
+
Requires-Dist: psutil (>=5.9.6,<6.0.0)
|
|
30
|
+
Requires-Dist: pywin32 (>=306,<307)
|
|
31
|
+
Requires-Dist: scipy (>=1.11.4,<2.0.0)
|
|
32
|
+
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
|
|
33
|
+
Project-URL: Repository, https://github.com/pyfemtet/pyfemtet
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# Welcome! PyFemtet is the extension package for Femtet.
|
|
37
|
+
|
|
38
|
+
## Main Features
|
|
39
|
+
|
|
40
|
+
<img src="img/pyfemtet_conceptual_diagram.png" width="450">
|
|
41
|
+
|
|
42
|
+
> [!NOTE]
|
|
43
|
+
> For details, see the documentation of "Related Pages" section.
|
|
44
|
+
|
|
45
|
+
### Design Parameter Optimization
|
|
46
|
+
- Single or multiple objective optimization
|
|
47
|
+
- Progress monitor GUI
|
|
48
|
+
- Parallel computation with controling multiple Femtet processes
|
|
49
|
+
- Result output in easy-to-analyze csv format for Excel and other tools
|
|
50
|
+
|
|
51
|
+
### Dispatch Extensions
|
|
52
|
+
- Create `CFemtet` object with process ID specification
|
|
53
|
+
|
|
54
|
+
## Related Pages
|
|
55
|
+
|
|
56
|
+
- Femtet Website: https://www.muratasoftware.com/
|
|
57
|
+
- Documentation (English): https://pyfemtet.readthedocs.io/en/stable/
|
|
58
|
+
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/jp/stable/
|
|
59
|
+
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
60
|
+
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## Getting Started
|
|
64
|
+
|
|
65
|
+
> [!NOTE]
|
|
66
|
+
> Currently Femtet and `pyfemtet` supports **Windows only**.
|
|
67
|
+
|
|
68
|
+
### 1. Install Femtet
|
|
69
|
+
|
|
70
|
+
- Access [Murata Software Website](https://www.muratasoftware.com/) and get **Femtet trial version** or purchase a lisence.
|
|
71
|
+
- Get installer and launch it.
|
|
72
|
+
- **Run 'EnableMacros'** from the start menu.
|
|
73
|
+
> [!NOTE]
|
|
74
|
+
> This procedure requires administrator privileges.
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### 2. Install PyFemtet
|
|
78
|
+
|
|
79
|
+
> [!NOTE]
|
|
80
|
+
> The commands on this section are for `CMD` or `PowerShell` on with `py launcher`.
|
|
81
|
+
> For a virtual environment, replace `py` to `python`.
|
|
82
|
+
> If you do not have Python, please install it first.
|
|
83
|
+
|
|
84
|
+
- Get `pyfemtet` via following command:
|
|
85
|
+
|
|
86
|
+
```py -m pip install pyfemtet```
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
### 3. Setting `win32com` Constants
|
|
90
|
+
|
|
91
|
+
- Run following command to enable COM constants:
|
|
92
|
+
|
|
93
|
+
```py -m win32com.client.makepy FemtetMacro```
|
|
94
|
+
|
|
95
|
+
That's all! Now you can use Femtet's extention features via `pyfemtet`.
|
|
96
|
+
For more information including sample code and FEM projects, see the documentation of "Related Pages" section.
|
|
97
|
+
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.femprj,sha256=JfzRl_C72doQFJO0hJq8BTX6TSFB_Skh2C4l-kiWoXY,170268
|
|
2
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
3
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.py,sha256=YJ3nszFLYfd7m4CaQ6ZG9DS_aHdgQIdSHCopmGakBWE,3980
|
|
4
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.SLDPRT,sha256=U0Yh559Fygd5sp013NwwhZ5vRA8D_E6kmiUXDP5isJQ,83094
|
|
5
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.femprj,sha256=omF3QvS8gzi_fSr2yobbVVaspR2YzDiUcMYvei-8ZmQ,155307
|
|
6
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.py,sha256=Irv3nNXkQpCGZgy41IcWwGKVddW6oOziwe6EyantUn4,4182
|
|
7
|
+
pyfemtet/FemtetPJTSample/_her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
8
|
+
pyfemtet/FemtetPJTSample/gau_ex08_parametric.femprj,sha256=EguPWZHcwZMMX8cX1rZhLc2Pr__P4PR8RF4_n4uxDaI,268761
|
|
9
|
+
pyfemtet/FemtetPJTSample/gau_ex08_parametric.py,sha256=B-ibQDodTLcJ-wc8sNVb1Dxae2ksL6Fns3uNBRU7s5g,1799
|
|
10
|
+
pyfemtet/FemtetPJTSample/her_ex40_parametric.femprj,sha256=ZFQ1Rl31dmLhYW__yahRYLejKw5DdccPGdpg67CWlS0,126336
|
|
11
|
+
pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
12
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=UfhJffuXyhzdIWNpOrpV6xLTK1fuVvgyhlyg4Rp-628,2148
|
|
13
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=pxacKe0NPNUPAcxqo2cATFApsMKiVt2g2e_FOk4fpjA,172895
|
|
14
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=LGbWxCek0Ad2YrDCKykiQkE3aIypM4g8P3mLd_2anEE,2052
|
|
15
|
+
pyfemtet/__init__.py,sha256=xw_dYipbaGm6aV2OPgH234_ODRnMNhDWYLau1HFUaAQ,21
|
|
16
|
+
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
17
|
+
pyfemtet/dispatch_extensions.py,sha256=MhWiUXVt2Cq8vDeajMK4SrajjiAmb4m2fK8gXwHLrWA,16177
|
|
18
|
+
pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
|
|
19
|
+
pyfemtet/opt/__init__.py,sha256=_P8unESvqCRD5pmuo6-5yo7BbrPi7c0aE6UZpqUD-_I,596
|
|
20
|
+
pyfemtet/opt/_femopt.py,sha256=LsgIF71hVY7LeAX-gKbJ__hr5FzLdrIW1xSqRg9gNOE,22287
|
|
21
|
+
pyfemtet/opt/_femopt_core.py,sha256=n_m-GIW82uvKNAn_N1ypBZQ4sOjngfNly7-SEkOXfuU,24774
|
|
22
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj,sha256=KC8JlHqHzqgyKriK911QSnQByQpRlw-SX5OSQ_GNe5M,149193
|
|
23
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
24
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.py,sha256=qpfbU41qsJSMWnROzTOU1mpmHngGoa0cjnLHqNkt0EY,4519
|
|
25
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT,sha256=jjBi4aRRwZPK-4-YRKDC4eO_Ch2jwd7M7chvJlnBbZU,97158
|
|
26
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj,sha256=knN0bBTHm5CqExLdmxdJvPldJ6ahnQesKt974qRjWh4,126837
|
|
27
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.py,sha256=HOpxWC_jxnKmabO4u5JrHNHPR8b7WFm-PauJSoTxRrQ,4586
|
|
28
|
+
pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj,sha256=-HDpYkp0bi2ZGKerQGVm-TIHq67D5dkIFcgl_QmZXy4,72896
|
|
29
|
+
pyfemtet/opt/femprj_sample/gal_ex58_parametric.py,sha256=yNAgkHknRY6CPnYR6ETl6ZNOElepvQNwwnofUGpFhVw,2485
|
|
30
|
+
pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj,sha256=Yb9ILeTEKx5xfJGk8IZH_DVlgkpGB33Vy9-LGIEQboY,279251
|
|
31
|
+
pyfemtet/opt/femprj_sample/gau_ex08_parametric.py,sha256=7SLe6Qbi2AGm1Li7kotyy2qSYynX2YitoW255XRxOOI,1956
|
|
32
|
+
pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj,sha256=LLAUDlUo1dIpRzlKPs1lvACzJQxjnWW3xAGAodYEqRM,117221
|
|
33
|
+
pyfemtet/opt/femprj_sample/her_ex40_parametric.py,sha256=9ubwnEavFpjbTAbH5RmYwYoGxATl-ehW_oH_kDLTlXs,4839
|
|
34
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj,sha256=z2NHFJWiuiLv_zhxjFpLpmRbYVvQ43bAMj_NLioQGsk,262283
|
|
35
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py,sha256=nFBQPr2gaCoLVxZDsKVUU_aZ3I9ZwbQCwz1_qJTSgOU,2388
|
|
36
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py,sha256=2IPq3SMrd2TCQMKL0_NA7ELBAj9yqwNe2RiMWpopw_M,2499
|
|
37
|
+
pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj,sha256=F-yu2dGrsbrIA1Lhizu2aHTjQFTohyBmOuJv-Iyl8jk,179596
|
|
38
|
+
pyfemtet/opt/femprj_sample/wat_ex14_parametric.py,sha256=sGj0khYO7_yGyXGHbdWJ883XvzO1HUbrgBLjiS2d7TM,2240
|
|
39
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj,sha256=0RBhOGhtiFAp0QSCTBYEaDY9EZymn9hJYchAOJ6PaBA,143533
|
|
40
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=2LE-3d0XEChqCSwgUi45V8eAsF_YUGUgO9jLx5u5bjQ,4797
|
|
41
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj,sha256=ZZhT9XjB9Xu9YwHWv4gbvKBiUWlOFKEoHjAcGWb3vvQ,128026
|
|
42
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py,sha256=o8P6o7Q0d0Jj02Qeij8kxbduyyKf_fNHSlXU_1H65S8,4864
|
|
43
|
+
pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=zmKyHbVI2vYaQU3KYrAfsiA1d87HVfDYw27VAcd1Yno,75668
|
|
44
|
+
pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py,sha256=gnCPiaxCPITAP-972DylFQ0BNpDJLeal9HPf5cfbhRI,2488
|
|
45
|
+
pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj,sha256=TTXw_8YT8pzHQlu4ufGzTq1IFYSwcWWt4GA6sIY1YPM,295600
|
|
46
|
+
pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py,sha256=GxfAb5_0F9tK_i9almLdQh7OjzdNFo_leoyIPtPCqvM,2114
|
|
47
|
+
pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj,sha256=OJ7f8iw0z1BZqanuNn71uEaoM2Kgb93ptUU8iYwYON0,129783
|
|
48
|
+
pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py,sha256=FFXO4GblaCHXrU7yUapBcescscESrVv-dutVYs4Fp4s,5272
|
|
49
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj,sha256=y7eURFBdqh6PmD4zbelGuB458HmfihVht0K4wVI-mik,265368
|
|
50
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py,sha256=cm_P-qXX0p4GBzst6IUuarkSczrDhitCNodzlcbyRPM,2516
|
|
51
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py,sha256=zpkGyKBhPJhEoc_pfYX6m27FgGcEV8D8HIBUg6EL_ps,2632
|
|
52
|
+
pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
|
|
53
|
+
pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vnfI4WuCvyjQN1MhnzyB-jcAPtTwz3yNiwtTm2yQZHU,2311
|
|
54
|
+
pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
|
|
55
|
+
pyfemtet/opt/interface/_base.py,sha256=lDjdvKYmBMxSc7SfoWSu91qVijGaQ2Ng-0C7z_f4eFM,2079
|
|
56
|
+
pyfemtet/opt/interface/_femtet.py,sha256=oDKFGruKVRudSEt3x2NnvVsuCfb_3hF65ONpCrKrIJo,25565
|
|
57
|
+
pyfemtet/opt/interface/_femtet_parametric.py,sha256=hGW7fKMVdHz0X1fVtGQIovxXtFWNFcEyPn9_tnMrny4,2399
|
|
58
|
+
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
59
|
+
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=kTEmfAyLMEZvYTYjGXgYnoyhi-wDzhKK7opyVp7rOcY,3931
|
|
60
|
+
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=t0AB7mKY7rmrI_9stP1-5qhzmugEQ19DnZ4CCrCdTSw,2856
|
|
61
|
+
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=400FidHp7mBAVLyxzLlLtGYNzK_TtK61ycd4vFjHES0,6254
|
|
62
|
+
pyfemtet/opt/opt/__init__.py,sha256=eQh-7PJN2YEUbHZnjinbeIyb0bk1wSh76TaEAa2l8SU,191
|
|
63
|
+
pyfemtet/opt/opt/_base.py,sha256=yEnPWAxFUIRNmUV-nbfCW4N3naDkkzQGME3qsDgEBFQ,7571
|
|
64
|
+
pyfemtet/opt/opt/_optuna.py,sha256=TWtp9auU6GBWtEJVOuo8aWSvLcCHCUNUyOQRnqyln4I,9996
|
|
65
|
+
pyfemtet/opt/visualization/__init__.py,sha256=PUCHoZnuZrHjTd0QQQBgzWkCpKY2noBPTvi-lyvxQyw,193
|
|
66
|
+
pyfemtet/opt/visualization/_graphs.py,sha256=G6HaoGD3GpuwXih1nuTeFQMD0zv4jrhogedP9hxaG1c,5306
|
|
67
|
+
pyfemtet/opt/visualization/_monitor.py,sha256=X2KR6fd8qf1U58Qr_o0jn0FTm1w9ARMPhs4eMYgGipI,42100
|
|
68
|
+
pyfemtet-0.4.4.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
69
|
+
pyfemtet-0.4.4.dist-info/METADATA,sha256=eWMO2_okpoutM3fryBE_1Qo1t05ThIk7k3biMGP43wc,3332
|
|
70
|
+
pyfemtet-0.4.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
71
|
+
pyfemtet-0.4.4.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
|
|
72
|
+
pyfemtet-0.4.4.dist-info/RECORD,,
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: pyfemtet
|
|
3
|
-
Version: 0.4.2
|
|
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.9.3,<3.13
|
|
10
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Requires-Dist: botorch (>=0.9.5,<0.10.0) ; python_version < "3.12"
|
|
16
|
-
Requires-Dist: colorlog (>=6.8.0,<7.0.0)
|
|
17
|
-
Requires-Dist: dash (>=2.14.2,<3.0.0)
|
|
18
|
-
Requires-Dist: dash-bootstrap-components (>=1.5.0,<2.0.0)
|
|
19
|
-
Requires-Dist: dask (>=2023.12.1,<2024.0.0)
|
|
20
|
-
Requires-Dist: distributed (>=2023.12.1,<2024.0.0)
|
|
21
|
-
Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
|
|
22
|
-
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
23
|
-
Requires-Dist: openpyxl (>=3.1.2,<4.0.0)
|
|
24
|
-
Requires-Dist: optuna (>=3.4.0,<4.0.0)
|
|
25
|
-
Requires-Dist: optuna-integration (>=3.6.0,<4.0.0)
|
|
26
|
-
Requires-Dist: pandas (>=2.1.3,<3.0.0)
|
|
27
|
-
Requires-Dist: plotly (>=5.18.0,<6.0.0)
|
|
28
|
-
Requires-Dist: psutil (>=5.9.6,<6.0.0)
|
|
29
|
-
Requires-Dist: pywin32 (>=306,<307)
|
|
30
|
-
Requires-Dist: scipy (>=1.11.4,<2.0.0)
|
|
31
|
-
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
|
|
32
|
-
Project-URL: Repository, https://github.com/pyfemtet/pyfemtet
|
|
33
|
-
Description-Content-Type: text/markdown
|
|
34
|
-
|
|
35
|
-
PyFemtet is the extension package for Femtet with Python.
|
|
36
|
-
|
|
37
|
-
- Femtet Website: https://www.muratasoftware.com/
|
|
38
|
-
- Documentation (English): https://pyfemtet.readthedocs.io/en/stable/
|
|
39
|
-
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/jp/stable/
|
|
40
|
-
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
41
|
-
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
It provides:
|
|
45
|
-
|
|
46
|
-
- single and multi objective parameter optimization
|
|
47
|
-
- tools for connect Femtet and Python by pid
|
|
48
|
-
|
pyfemtet-0.4.2.dist-info/RECORD
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.femprj,sha256=JfzRl_C72doQFJO0hJq8BTX6TSFB_Skh2C4l-kiWoXY,170268
|
|
2
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
3
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.py,sha256=YJ3nszFLYfd7m4CaQ6ZG9DS_aHdgQIdSHCopmGakBWE,3980
|
|
4
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.SLDPRT,sha256=U0Yh559Fygd5sp013NwwhZ5vRA8D_E6kmiUXDP5isJQ,83094
|
|
5
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.femprj,sha256=omF3QvS8gzi_fSr2yobbVVaspR2YzDiUcMYvei-8ZmQ,155307
|
|
6
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.py,sha256=Irv3nNXkQpCGZgy41IcWwGKVddW6oOziwe6EyantUn4,4182
|
|
7
|
-
pyfemtet/FemtetPJTSample/gau_ex08_parametric.femprj,sha256=EguPWZHcwZMMX8cX1rZhLc2Pr__P4PR8RF4_n4uxDaI,268761
|
|
8
|
-
pyfemtet/FemtetPJTSample/gau_ex08_parametric.py,sha256=B-ibQDodTLcJ-wc8sNVb1Dxae2ksL6Fns3uNBRU7s5g,1799
|
|
9
|
-
pyfemtet/FemtetPJTSample/her_ex40_parametric.femprj,sha256=ZFQ1Rl31dmLhYW__yahRYLejKw5DdccPGdpg67CWlS0,126336
|
|
10
|
-
pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
11
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=UfhJffuXyhzdIWNpOrpV6xLTK1fuVvgyhlyg4Rp-628,2148
|
|
12
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=pxacKe0NPNUPAcxqo2cATFApsMKiVt2g2e_FOk4fpjA,172895
|
|
13
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=LGbWxCek0Ad2YrDCKykiQkE3aIypM4g8P3mLd_2anEE,2052
|
|
14
|
-
pyfemtet/__init__.py,sha256=Y-I6FXKes4hB39WcBm3HZ1OCtCWiErPB6YZ-YSgexuE,21
|
|
15
|
-
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
16
|
-
pyfemtet/dispatch_extensions.py,sha256=MhWiUXVt2Cq8vDeajMK4SrajjiAmb4m2fK8gXwHLrWA,16177
|
|
17
|
-
pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
|
|
18
|
-
pyfemtet/opt/__init__.py,sha256=_P8unESvqCRD5pmuo6-5yo7BbrPi7c0aE6UZpqUD-_I,596
|
|
19
|
-
pyfemtet/opt/_femopt.py,sha256=mkawFpY0UXENeJYuH2mkLpNgUncIWY3QYMHUj-lL-4o,20602
|
|
20
|
-
pyfemtet/opt/_femopt_core.py,sha256=bCSb1XvqeEfX6T2Z24eLI8nIa82omy8_Pnf5HXEmEsQ,24361
|
|
21
|
-
pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
|
|
22
|
-
pyfemtet/opt/interface/_base.py,sha256=lDjdvKYmBMxSc7SfoWSu91qVijGaQ2Ng-0C7z_f4eFM,2079
|
|
23
|
-
pyfemtet/opt/interface/_femtet.py,sha256=VzwJ4srviYIb9X4HNDx1_W2w2xUpNYBxa928qBZpdAc,24439
|
|
24
|
-
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
25
|
-
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=OU0nYmePEVKsjplokisfyuaepB-PkL6E-cwCiIhXNS0,4192
|
|
26
|
-
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=t0AB7mKY7rmrI_9stP1-5qhzmugEQ19DnZ4CCrCdTSw,2856
|
|
27
|
-
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=t3CZ-ni2kXBpbCdr9C5xEc2GHgW8LscJNMV97wJRnTk,6515
|
|
28
|
-
pyfemtet/opt/opt/__init__.py,sha256=eQh-7PJN2YEUbHZnjinbeIyb0bk1wSh76TaEAa2l8SU,191
|
|
29
|
-
pyfemtet/opt/opt/_base.py,sha256=aO71a8lIHHb5xIEoIu7oO_maynrNIEHfwt4uFFOUY58,7101
|
|
30
|
-
pyfemtet/opt/opt/_optuna.py,sha256=TWtp9auU6GBWtEJVOuo8aWSvLcCHCUNUyOQRnqyln4I,9996
|
|
31
|
-
pyfemtet/opt/visualization/__init__.py,sha256=PUCHoZnuZrHjTd0QQQBgzWkCpKY2noBPTvi-lyvxQyw,193
|
|
32
|
-
pyfemtet/opt/visualization/_graphs.py,sha256=G6HaoGD3GpuwXih1nuTeFQMD0zv4jrhogedP9hxaG1c,5306
|
|
33
|
-
pyfemtet/opt/visualization/_monitor.py,sha256=WcbuMjnp5LiybwCYBnJ78ju2h7sBJJtqUf1CbUacfXI,42104
|
|
34
|
-
pyfemtet-0.4.2.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
35
|
-
pyfemtet-0.4.2.dist-info/METADATA,sha256=Dl3D0ipVFiUvEwcDOMbp5c8N3gPvLzjvg7Wuc7ahrCA,1848
|
|
36
|
-
pyfemtet-0.4.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
37
|
-
pyfemtet-0.4.2.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
|
|
38
|
-
pyfemtet-0.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|