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.

Files changed (49) hide show
  1. pyfemtet/FemtetPJTSample/_her_ex40_parametric.py +148 -0
  2. pyfemtet/__init__.py +1 -1
  3. pyfemtet/opt/_femopt.py +48 -16
  4. pyfemtet/opt/_femopt_core.py +14 -7
  5. pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj +0 -0
  6. pyfemtet/opt/femprj_sample/cad_ex01_NX.prt +0 -0
  7. pyfemtet/opt/femprj_sample/cad_ex01_NX.py +132 -0
  8. pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
  9. pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj +0 -0
  10. pyfemtet/opt/femprj_sample/cad_ex01_SW.py +132 -0
  11. pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj +0 -0
  12. pyfemtet/opt/femprj_sample/gal_ex58_parametric.py +75 -0
  13. pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj +0 -0
  14. pyfemtet/opt/femprj_sample/gau_ex08_parametric.py +59 -0
  15. pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj +0 -0
  16. pyfemtet/opt/femprj_sample/her_ex40_parametric.py +137 -0
  17. pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj +0 -0
  18. pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py +61 -0
  19. pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py +62 -0
  20. pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj +0 -0
  21. pyfemtet/opt/femprj_sample/wat_ex14_parametric.py +59 -0
  22. pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
  23. pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py +126 -0
  24. pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
  25. pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py +126 -0
  26. pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
  27. pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py +71 -0
  28. pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
  29. pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py +58 -0
  30. pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
  31. pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py +137 -0
  32. pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
  33. pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py +59 -0
  34. pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +60 -0
  35. pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
  36. pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py +57 -0
  37. pyfemtet/opt/interface/_femtet.py +36 -18
  38. pyfemtet/opt/interface/_femtet_parametric.py +72 -0
  39. pyfemtet/opt/interface/_femtet_with_nx/_interface.py +2 -8
  40. pyfemtet/opt/interface/_femtet_with_sldworks.py +2 -8
  41. pyfemtet/opt/opt/_base.py +12 -3
  42. pyfemtet/opt/visualization/_monitor.py +2 -2
  43. pyfemtet-0.4.4.dist-info/METADATA +97 -0
  44. pyfemtet-0.4.4.dist-info/RECORD +72 -0
  45. pyfemtet-0.4.2.dist-info/METADATA +0 -48
  46. pyfemtet-0.4.2.dist-info/RECORD +0 -38
  47. {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.4.dist-info}/LICENSE +0 -0
  48. {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.4.dist-info}/WHEEL +0 -0
  49. {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
- ret_if_failed,
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
- ret_if_failed : Any
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 = ret_if_failed
284
+ returns = return_value_if_failed
279
285
  else:
280
- returns = [ret_if_failed] * (ret_for_check_idx + 1)
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 != ret_if_failed:
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
- ret_if_failed,
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
- ret_if_failed=False, # 意味がない
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
- ret_if_failed=False,
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
- ret_if_failed=False,
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
- self._call_femtet_api(
548
- self.Femtet.Solve,
549
- False,
550
- SolveError,
551
- 'ソルブに失敗しました',
552
- is_Gaudi_method=True,
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=(True,),
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
- femprj_path=None,
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
- femprj_path=None,
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.set(OptimizationStatus.TERMINATED)
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
- ) -> None:
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 None
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.TERMINATE_ALL:
926
- colors.append('dark')
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
-
@@ -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,,