pyfemtet 1.0.0a0__py3-none-any.whl → 1.0.0b0__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/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +1 -1
- pyfemtet/_util/dask_util.py +1 -1
- pyfemtet/opt/__init__.py +3 -1
- pyfemtet/opt/femopt.py +9 -3
- pyfemtet/opt/history/_history.py +1 -1
- pyfemtet/opt/interface/_femtet_interface/femtet_interface.py +21 -7
- pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +1 -1
- pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +1 -1
- pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +99 -8
- pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +30 -3
- pyfemtet/opt/optimizer/_base_optimizer.py +10 -1
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +1 -1
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/METADATA +3 -2
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/RECORD +19 -20
- pyfemtet/opt/interface/_surrogate/_base.py +0 -0
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE +0 -0
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE_THIRD_PARTY.txt +0 -0
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/WHEEL +0 -0
- {pyfemtet-1.0.0a0.dist-info → pyfemtet-1.0.0b0.dist-info}/entry_points.txt +0 -0
|
Binary file
|
pyfemtet/_util/dask_util.py
CHANGED
pyfemtet/opt/__init__.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from .femopt import FEMOpt
|
|
2
|
-
from .interface import FemtetInterface
|
|
2
|
+
from .interface import FemtetInterface, FemtetWithNXInterface, FemtetWithSolidworksInterface
|
|
3
3
|
from .optimizer import OptunaOptimizer, ScipyOptimizer
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
|
7
7
|
'FEMOpt',
|
|
8
8
|
'FemtetInterface',
|
|
9
|
+
'FemtetWithNXInterface',
|
|
10
|
+
'FemtetWithSolidworksInterface',
|
|
9
11
|
'OptunaOptimizer',
|
|
10
12
|
'ScipyOptimizer',
|
|
11
13
|
]
|
pyfemtet/opt/femopt.py
CHANGED
|
@@ -71,16 +71,20 @@ class FEMOpt:
|
|
|
71
71
|
name: str,
|
|
72
72
|
expression_string: str,
|
|
73
73
|
properties: dict[str, ...] | None = None,
|
|
74
|
+
*,
|
|
75
|
+
pass_to_fem: bool = True,
|
|
74
76
|
) -> None:
|
|
75
|
-
self.opt.add_expression_string(name, expression_string, properties)
|
|
77
|
+
self.opt.add_expression_string(name, expression_string, properties, pass_to_fem=pass_to_fem)
|
|
76
78
|
|
|
77
79
|
def add_expression_sympy(
|
|
78
80
|
self,
|
|
79
81
|
name: str,
|
|
80
82
|
sympy_expr: sympy.Expr,
|
|
81
83
|
properties: dict[str, ...] | None = None,
|
|
84
|
+
*,
|
|
85
|
+
pass_to_fem: bool = True,
|
|
82
86
|
) -> None:
|
|
83
|
-
self.opt.add_expression_sympy(name, sympy_expr, properties)
|
|
87
|
+
self.opt.add_expression_sympy(name, sympy_expr, properties, pass_to_fem=pass_to_fem)
|
|
84
88
|
|
|
85
89
|
def add_expression(
|
|
86
90
|
self,
|
|
@@ -89,8 +93,10 @@ class FEMOpt:
|
|
|
89
93
|
properties: dict[str, ...] | None = None,
|
|
90
94
|
args: tuple | None = None,
|
|
91
95
|
kwargs: dict | None = None,
|
|
96
|
+
*,
|
|
97
|
+
pass_to_fem: bool = True,
|
|
92
98
|
) -> None:
|
|
93
|
-
self.opt.add_expression(name, fun, properties, args, kwargs)
|
|
99
|
+
self.opt.add_expression(name, fun, properties, args, kwargs, pass_to_fem=pass_to_fem)
|
|
94
100
|
|
|
95
101
|
def add_categorical_parameter(
|
|
96
102
|
self,
|
pyfemtet/opt/history/_history.py
CHANGED
|
@@ -4,7 +4,6 @@ from typing import TYPE_CHECKING
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
6
|
import sys
|
|
7
|
-
import warnings
|
|
8
7
|
import subprocess
|
|
9
8
|
from time import sleep
|
|
10
9
|
from contextlib import nullcontext
|
|
@@ -119,6 +118,7 @@ class FemtetInterface(COMInterface):
|
|
|
119
118
|
"""
|
|
120
119
|
|
|
121
120
|
com_members = {'Femtet': 'FemtetMacro.Femtet'}
|
|
121
|
+
_show_parametric_index_warning = True # for GUI
|
|
122
122
|
|
|
123
123
|
def __init__(
|
|
124
124
|
self,
|
|
@@ -129,14 +129,19 @@ class FemtetInterface(COMInterface):
|
|
|
129
129
|
strictly_pid_specify: bool = True, # dask worker では True にしたいので super() の引数にしない。
|
|
130
130
|
allow_without_project: bool = False, # main でのみ True を許容したいので super() の引数にしない。
|
|
131
131
|
open_result_with_gui: bool = True,
|
|
132
|
-
parametric_output_indexes_use_as_objective: dict[int, str or float] = None, # TODO: Remove this
|
|
133
132
|
always_open_copy=False,
|
|
133
|
+
# ユーザーはメソッドを使うことを推奨。GUI などで使用。
|
|
134
|
+
parametric_output_indexes_use_as_objective: dict[int, str | float] = None,
|
|
134
135
|
):
|
|
135
|
-
# warning
|
|
136
136
|
if parametric_output_indexes_use_as_objective is not None:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
if FemtetInterface._show_parametric_index_warning:
|
|
138
|
+
logger.warning(_(
|
|
139
|
+
en_message='The argument `parametric_output_indexes_use_as_objective` is deprecated. '
|
|
140
|
+
'Please use `FemtetInterface.use_parametric_output_as_objective()` instead.',
|
|
141
|
+
jp_message='`parametric_output_indexes_use_as_objective` は非推奨の引数です。'
|
|
142
|
+
'代わりに `FemtetInterface.use_parametric_output_as_objective()` '
|
|
143
|
+
'を使ってください。',
|
|
144
|
+
))
|
|
140
145
|
|
|
141
146
|
# 引数の処理
|
|
142
147
|
if femprj_path is None:
|
|
@@ -255,6 +260,13 @@ class FemtetInterface(COMInterface):
|
|
|
255
260
|
None
|
|
256
261
|
|
|
257
262
|
"""
|
|
263
|
+
|
|
264
|
+
# warning
|
|
265
|
+
logger.warning(_(
|
|
266
|
+
en_message='The existing sweep table in the project will be removed.',
|
|
267
|
+
jp_message='解析モデルに設定された既存のスイープテーブルは削除されます。'
|
|
268
|
+
))
|
|
269
|
+
|
|
258
270
|
# check
|
|
259
271
|
if isinstance(direction, str):
|
|
260
272
|
if direction not in ("minimize", "maximize"):
|
|
@@ -504,6 +516,8 @@ class FemtetInterface(COMInterface):
|
|
|
504
516
|
name = fun.__name__
|
|
505
517
|
if fun.__name__ == 'Solve':
|
|
506
518
|
context = nullcontext()
|
|
519
|
+
elif fun.__name__ == 'solve_via_parametric_dll':
|
|
520
|
+
context = nullcontext()
|
|
507
521
|
|
|
508
522
|
elif isinstance(fun, str):
|
|
509
523
|
|
|
@@ -525,7 +539,7 @@ class FemtetInterface(COMInterface):
|
|
|
525
539
|
'If the optimization is hanging, the most reason is '
|
|
526
540
|
'a dialog is opening in Femtet and it waits for your '
|
|
527
541
|
'input. Please confirm there is no dialog in Femtet.',
|
|
528
|
-
'{name} の実行に {warning_time_sec}
|
|
542
|
+
'{name} の実行に {warning_time_sec} 秒以上かかっています。'
|
|
529
543
|
'もし最適化がハングしているならば、考えられる理由として、'
|
|
530
544
|
'Femtet で予期せずダイアログが開いてユーザーの入力待ちをしている場合があります。'
|
|
531
545
|
'もし Femtet でダイアログが開いていれば、閉じてください。',
|
|
@@ -156,7 +156,7 @@ class FemtetWithNXInterface(FemtetInterface, _NXInterface):
|
|
|
156
156
|
strictly_pid_specify: bool = True, # dask worker では True にしたいので super() の引数にしない。
|
|
157
157
|
allow_without_project: bool = False, # main でのみ True を許容したいので super() の引数にしない。
|
|
158
158
|
open_result_with_gui: bool = True,
|
|
159
|
-
parametric_output_indexes_use_as_objective: dict[int, str
|
|
159
|
+
parametric_output_indexes_use_as_objective: dict[int, str | float] = None,
|
|
160
160
|
always_open_copy=False,
|
|
161
161
|
export_curves: bool or None = None,
|
|
162
162
|
export_surfaces: bool or None = None,
|
|
@@ -31,7 +31,7 @@ class FemtetWithSolidworksInterface(FemtetInterface, SolidworksInterface, Abstra
|
|
|
31
31
|
strictly_pid_specify: bool = True,
|
|
32
32
|
allow_without_project: bool = False,
|
|
33
33
|
open_result_with_gui: bool = True,
|
|
34
|
-
parametric_output_indexes_use_as_objective: dict[int, str
|
|
34
|
+
parametric_output_indexes_use_as_objective: dict[int, str | float] = None,
|
|
35
35
|
always_open_copy=False,
|
|
36
36
|
close_solidworks_on_terminate=False,
|
|
37
37
|
solidworks_visible=True,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING
|
|
3
|
+
from typing import TYPE_CHECKING, Sequence
|
|
4
4
|
|
|
5
5
|
from pyfemtet.opt.history import *
|
|
6
6
|
|
|
7
7
|
from pyfemtet.opt.interface import AbstractFEMInterface
|
|
8
|
+
from pyfemtet._i18n import _
|
|
8
9
|
|
|
9
10
|
if TYPE_CHECKING:
|
|
10
11
|
from pyfemtet.opt.optimizer import AbstractOptimizer
|
|
@@ -16,6 +17,7 @@ __all__ = [
|
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class AbstractSurrogateModelInterfaceBase(AbstractFEMInterface):
|
|
20
|
+
_load_problem_from_fem = True
|
|
19
21
|
current_obj_values: dict[str, float]
|
|
20
22
|
train_history: History
|
|
21
23
|
|
|
@@ -23,8 +25,15 @@ class AbstractSurrogateModelInterfaceBase(AbstractFEMInterface):
|
|
|
23
25
|
self,
|
|
24
26
|
history_path: str = None,
|
|
25
27
|
train_history: History = None,
|
|
28
|
+
_output_directions: (
|
|
29
|
+
Sequence[str | float]
|
|
30
|
+
| dict[str, str | float]
|
|
31
|
+
| dict[int, str | float]
|
|
32
|
+
) = None
|
|
26
33
|
):
|
|
27
34
|
|
|
35
|
+
self._output_directions = _output_directions
|
|
36
|
+
|
|
28
37
|
# history_path が与えられた場合、train_history をコンストラクトする
|
|
29
38
|
if history_path is not None:
|
|
30
39
|
train_history = History()
|
|
@@ -37,13 +46,95 @@ class AbstractSurrogateModelInterfaceBase(AbstractFEMInterface):
|
|
|
37
46
|
self.current_obj_values = {}
|
|
38
47
|
|
|
39
48
|
def load_objectives(self, opt: AbstractOptimizer):
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
|
|
50
|
+
# output directions が与えられない場合、
|
|
51
|
+
# opt.add_objective との整合をチェックする
|
|
52
|
+
if self._output_directions is None:
|
|
53
|
+
|
|
54
|
+
# add_objective された目的のうち、
|
|
55
|
+
# training data に含まれる名前ならば
|
|
56
|
+
# fun を「その時点の current_obj_values を返す関数」で
|
|
57
|
+
# 上書き
|
|
58
|
+
obj_name: str
|
|
59
|
+
for obj_name, obj in opt.objectives.items():
|
|
60
|
+
# あれば上書き、なければ surrogate 最適化の際に
|
|
61
|
+
# 新しく追加した model を使わない目的関数と見做して何もしない
|
|
62
|
+
if obj_name in self.train_history.obj_names:
|
|
63
|
+
obj.fun = lambda _, obj_name_=obj_name: self.current_obj_values[obj_name_]
|
|
64
|
+
|
|
65
|
+
# dict で与えられた場合
|
|
66
|
+
elif isinstance(self._output_directions, dict):
|
|
67
|
+
|
|
68
|
+
# index 入力か str 入力かで統一されているか確認
|
|
69
|
+
keys = tuple(self._output_directions.keys())
|
|
70
|
+
assert all([isinstance(key, type(keys[0])) for key in keys]), _(
|
|
71
|
+
en_message='The keys of _output_directions must be '
|
|
72
|
+
'all-int or all-str.',
|
|
73
|
+
jp_message='_output_directions のキーは int または str で'
|
|
74
|
+
'統一されていなければなりません。',
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# index がキーである場合
|
|
78
|
+
if isinstance(keys[0], int):
|
|
79
|
+
|
|
80
|
+
for index, direction in self._output_directions.items():
|
|
81
|
+
obj_name = self.train_history.obj_names[index]
|
|
82
|
+
|
|
83
|
+
opt.add_objective(
|
|
84
|
+
name=obj_name,
|
|
85
|
+
fun=lambda _, obj_name_=obj_name: self.current_obj_values[obj_name_],
|
|
86
|
+
direction=direction,
|
|
87
|
+
args=(),
|
|
88
|
+
kwargs={},
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# obj_name がキーである場合
|
|
92
|
+
if isinstance(keys[0], str):
|
|
93
|
+
|
|
94
|
+
for obj_name, direction in self._output_directions.items():
|
|
95
|
+
assert obj_name in self.train_history.obj_names, _(
|
|
96
|
+
en_message='The objective name passed as a key of '
|
|
97
|
+
'_output_direction must be one of the history\'s '
|
|
98
|
+
'objective names. Passed name: {obj_name} / '
|
|
99
|
+
'History\'s names: {obj_names}',
|
|
100
|
+
jp_message='_output_directions に目的関数名を与える場合は'
|
|
101
|
+
'history に含まれる名前を指定しなければなりません。'
|
|
102
|
+
'与えられた目的名: {obj_name} / history に含まれる'
|
|
103
|
+
'目的名: {obj_names}',
|
|
104
|
+
obj_name=obj_name,
|
|
105
|
+
obj_names=', '.join(self.train_history.obj_names)
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
opt.add_objective(
|
|
109
|
+
name=obj_name,
|
|
110
|
+
fun=lambda obj_name_=obj_name: self.current_obj_values[obj_name_],
|
|
111
|
+
direction=direction,
|
|
112
|
+
args=(),
|
|
113
|
+
kwargs={},
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# tuple で与えられた場合
|
|
117
|
+
elif isinstance(self._output_directions, list) \
|
|
118
|
+
or isinstance(self._output_directions, tuple):
|
|
119
|
+
|
|
120
|
+
obj_names = self.train_history.obj_names
|
|
121
|
+
assert len(self._output_directions) == len(obj_names), _(
|
|
122
|
+
en_message='The length of _output_directions passed as a list '
|
|
123
|
+
'must be same with that of the history\'s objective '
|
|
124
|
+
'names.',
|
|
125
|
+
jp_message='_output_directions をリストで渡す場合は'
|
|
126
|
+
'その長さが history の目的関数数と一致して'
|
|
127
|
+
'いなければなりません。'
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
for obj_name, direction in zip(obj_names, self._output_directions):
|
|
131
|
+
opt.add_objective(
|
|
132
|
+
name=obj_name,
|
|
133
|
+
fun=lambda _, obj_name_=obj_name: self.current_obj_values[obj_name_],
|
|
134
|
+
direction=direction,
|
|
135
|
+
args=(),
|
|
136
|
+
kwargs={},
|
|
137
|
+
)
|
|
47
138
|
|
|
48
139
|
def load_variables(self, opt: AbstractOptimizer):
|
|
49
140
|
# opt の変数が充分であるかのチェックのみ
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Sequence
|
|
2
|
+
|
|
1
3
|
import numpy as np
|
|
2
4
|
from scipy.stats.distributions import norm
|
|
3
5
|
|
|
@@ -24,8 +26,22 @@ __all__ = [
|
|
|
24
26
|
|
|
25
27
|
class BoTorchInterface(AbstractSurrogateModelInterfaceBase):
|
|
26
28
|
|
|
27
|
-
def __init__(
|
|
28
|
-
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
history_path: str = None,
|
|
32
|
+
train_history: History = None,
|
|
33
|
+
_output_directions: (
|
|
34
|
+
Sequence[str | float]
|
|
35
|
+
| dict[str, str | float]
|
|
36
|
+
| dict[int, str | float]
|
|
37
|
+
) = None
|
|
38
|
+
):
|
|
39
|
+
AbstractSurrogateModelInterfaceBase.__init__(
|
|
40
|
+
self,
|
|
41
|
+
history_path,
|
|
42
|
+
train_history,
|
|
43
|
+
_output_directions
|
|
44
|
+
)
|
|
29
45
|
|
|
30
46
|
self.model = SingleTaskGPModel()
|
|
31
47
|
self.pyfemtet_model = PyFemtetModel()
|
|
@@ -62,11 +78,22 @@ class PoFBoTorchInterface(BoTorchInterface, AbstractSurrogateModelInterfaceBase)
|
|
|
62
78
|
def __init__(
|
|
63
79
|
self,
|
|
64
80
|
history_path: str,
|
|
81
|
+
train_history: History = None,
|
|
65
82
|
observation_noise: float | str | None = None,
|
|
66
83
|
feasibility_noise: float | str | None = None,
|
|
67
84
|
feasibility_cdf_threshold: float | str = 0.5, # or 'sample_mean'
|
|
85
|
+
_output_directions: (
|
|
86
|
+
Sequence[str | float]
|
|
87
|
+
| dict[str, str | float]
|
|
88
|
+
| dict[int, str | float]
|
|
89
|
+
) = None
|
|
68
90
|
):
|
|
69
|
-
AbstractSurrogateModelInterfaceBase.__init__(
|
|
91
|
+
AbstractSurrogateModelInterfaceBase.__init__(
|
|
92
|
+
self,
|
|
93
|
+
history_path,
|
|
94
|
+
train_history,
|
|
95
|
+
_output_directions
|
|
96
|
+
)
|
|
70
97
|
|
|
71
98
|
self.model = SingleTaskGPModel()
|
|
72
99
|
self.pyfemtet_model = PyFemtetModel()
|
|
@@ -32,7 +32,7 @@ DIRECTION: TypeAlias = (
|
|
|
32
32
|
]
|
|
33
33
|
)
|
|
34
34
|
|
|
35
|
-
logger = get_module_logger('opt.optimizer',
|
|
35
|
+
logger = get_module_logger('opt.optimizer', False)
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def _log_hidden_constraint(e: Exception):
|
|
@@ -177,11 +177,14 @@ class AbstractOptimizer:
|
|
|
177
177
|
name: str,
|
|
178
178
|
expression_string: str,
|
|
179
179
|
properties: dict[str, ...] | None = None,
|
|
180
|
+
*,
|
|
181
|
+
pass_to_fem: bool = True,
|
|
180
182
|
) -> None:
|
|
181
183
|
var = ExpressionFromString()
|
|
182
184
|
var.name = name
|
|
183
185
|
var._expr = ExpressionFromString.InternalClass(expression_string=expression_string)
|
|
184
186
|
var.properties = properties or dict()
|
|
187
|
+
var.pass_to_fem = pass_to_fem
|
|
185
188
|
_duplicated_name_check(name, self.variable_manager.variables.keys())
|
|
186
189
|
self.variable_manager.variables.update({name: var})
|
|
187
190
|
|
|
@@ -190,11 +193,14 @@ class AbstractOptimizer:
|
|
|
190
193
|
name: str,
|
|
191
194
|
sympy_expr: sympy.Expr,
|
|
192
195
|
properties: dict[str, ...] | None = None,
|
|
196
|
+
*,
|
|
197
|
+
pass_to_fem: bool = True,
|
|
193
198
|
) -> None:
|
|
194
199
|
var = ExpressionFromString()
|
|
195
200
|
var.name = name
|
|
196
201
|
var._expr = ExpressionFromString.InternalClass(sympy_expr=sympy_expr)
|
|
197
202
|
var.properties = properties or dict()
|
|
203
|
+
var.pass_to_fem = pass_to_fem
|
|
198
204
|
_duplicated_name_check(name, self.variable_manager.variables.keys())
|
|
199
205
|
self.variable_manager.variables.update({name: var})
|
|
200
206
|
|
|
@@ -205,6 +211,8 @@ class AbstractOptimizer:
|
|
|
205
211
|
properties: dict[str, ...] | None = None,
|
|
206
212
|
args: tuple | None = None,
|
|
207
213
|
kwargs: dict | None = None,
|
|
214
|
+
*,
|
|
215
|
+
pass_to_fem: bool = True,
|
|
208
216
|
) -> None:
|
|
209
217
|
var = ExpressionFromFunction()
|
|
210
218
|
var.name = name
|
|
@@ -212,6 +220,7 @@ class AbstractOptimizer:
|
|
|
212
220
|
var.args = args or tuple()
|
|
213
221
|
var.kwargs = kwargs or dict()
|
|
214
222
|
var.properties = properties or dict()
|
|
223
|
+
var.pass_to_fem = pass_to_fem
|
|
215
224
|
_duplicated_name_check(name, self.variable_manager.variables.keys())
|
|
216
225
|
self.variable_manager.variables.update({name: var})
|
|
217
226
|
|
|
@@ -138,7 +138,7 @@ if TYPE_CHECKING:
|
|
|
138
138
|
# noinspection PyTypeChecker
|
|
139
139
|
_logger = get_logger(False)
|
|
140
140
|
|
|
141
|
-
DEBUG =
|
|
141
|
+
DEBUG = False
|
|
142
142
|
logger = get_module_logger('opt.PoFBoTorchSampler', DEBUG)
|
|
143
143
|
|
|
144
144
|
warnings.filterwarnings('ignore', category=InputDataWarning)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pyfemtet
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0b0
|
|
4
4
|
Summary: Design parameter optimization using Femtet.
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: kazuma.naito
|
|
@@ -28,7 +28,8 @@ Requires-Dist: optuna-integration (>=3.6.0,<5.0.0)
|
|
|
28
28
|
Requires-Dist: pandas (>=2.2.3,<3)
|
|
29
29
|
Requires-Dist: plotly (>=5.22.0,<6)
|
|
30
30
|
Requires-Dist: psutil (>=5.9.6,<6)
|
|
31
|
-
Requires-Dist: pywin32 (
|
|
31
|
+
Requires-Dist: pywin32 (<307) ; sys_platform == "win32" and python_version < "3.13"
|
|
32
|
+
Requires-Dist: pywin32 (>=309) ; sys_platform == "win32" and python_version >= "3.13"
|
|
32
33
|
Requires-Dist: pyyaml (>=6.0.2,<7)
|
|
33
34
|
Requires-Dist: scipy (>=1.11.4,<2)
|
|
34
35
|
Requires-Dist: torch
|
|
@@ -4,13 +4,13 @@ pyfemtet/_i18n/2. build_mo.bat,sha256=CyMa93U9wYI2tYXwd1lb99ZmlWWCVIirhXq-pDfD8G
|
|
|
4
4
|
pyfemtet/_i18n/__init__.py,sha256=myrXUHec6SWNLhYf8KY2ktpD42fmAVDpoIZP4xe259w,103
|
|
5
5
|
pyfemtet/_i18n/babel.cfg,sha256=I9-MZMHtXQ0giwl4SsDKtZJqFziRVvrFiO3HVJhcJbQ,58
|
|
6
6
|
pyfemtet/_i18n/i18n.py,sha256=zBbatQO7bkyO1MU6Y8TtrhGpDoUMP2PetRyWsINVcHc,808
|
|
7
|
-
pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo,sha256
|
|
8
|
-
pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po,sha256=
|
|
7
|
+
pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo,sha256=7A_bNBwAdgsCldl9-MKKQoTYMj3VHOk-zjtNUqL8f2o,34436
|
|
8
|
+
pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po,sha256=y4QIFJVELQEHLDLHaA4GNqyA8ZjBEAaHc6lWJgwgGKM,48325
|
|
9
9
|
pyfemtet/_i18n/locales/messages.pot,sha256=krqoEumXnY45pG5dm-dQPmynb-eNx1BbIfbHB0URCvE,30025
|
|
10
10
|
pyfemtet/_i18n/messages.py,sha256=mzTARnpZPZ-Pmcq8RdOyy5a4XGCCSxwxuoHjN_HJ0TM,17382
|
|
11
11
|
pyfemtet/_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
pyfemtet/_util/closing.py,sha256=JPcgHDbW249YF20bMOX6UX-LquWoCWA14KhX-qFouR4,502
|
|
13
|
-
pyfemtet/_util/dask_util.py,sha256=
|
|
13
|
+
pyfemtet/_util/dask_util.py,sha256=Wm_1p_LR1yhhZNaGgazf-yQ-eialLfmqtgBjxha6qWk,2159
|
|
14
14
|
pyfemtet/_util/df_util.py,sha256=J4eij4B99UQI2GBAu2SsIeKzwPRAnnJPJyRmjjrSMYo,860
|
|
15
15
|
pyfemtet/_util/excel_macro_util.py,sha256=pUCpENpM1q6AbC7wH7rMXwnQ7nIFnabQ4xlbsli9VzM,8028
|
|
16
16
|
pyfemtet/_util/excel_parse_util.py,sha256=k8Y5EI9r0txwkieKUzlZqQ93b-9SMXldNIfq5ksWg28,5525
|
|
@@ -27,11 +27,11 @@ pyfemtet/dispatch_extensions/__init__.py,sha256=BzxYq3x8YdkdClq4VvH4G5HTGxu5nyAh
|
|
|
27
27
|
pyfemtet/dispatch_extensions/_impl.py,sha256=Sgp350ioKcNVslXv9xRdtRjaQGRQM-BwbJYXjeildtw,11107
|
|
28
28
|
pyfemtet/logger/__init__.py,sha256=lofBrZHr0P1hsxPUiPG1SQqKxCuSBk8zGnR7vUfCHYw,516
|
|
29
29
|
pyfemtet/logger/_impl.py,sha256=uJ9el3kR-A4W2DvO_G5A6k9z2u1lkyl7GSvZ68uPy-U,6321
|
|
30
|
-
pyfemtet/opt/__init__.py,sha256
|
|
30
|
+
pyfemtet/opt/__init__.py,sha256=1LcwTddtoi8plemxkzmX0YEKiNpAZvKn9OoNQysyDLE,339
|
|
31
31
|
pyfemtet/opt/exceptions.py,sha256=M_O7jm20Y4e_QxsKF6tnEl-OrAtErUOj6hNT7eEXCO4,1327
|
|
32
|
-
pyfemtet/opt/femopt.py,sha256
|
|
32
|
+
pyfemtet/opt/femopt.py,sha256=CeejR3bDipPqCJnSx2X3Af2d4oJZlLKcHIXO2TZT9fc,22567
|
|
33
33
|
pyfemtet/opt/history/__init__.py,sha256=pUp3SO4R7RGzmpNDLBg_pQH0X2yzBd-oqsHXWmB33os,201
|
|
34
|
-
pyfemtet/opt/history/_history.py,sha256=
|
|
34
|
+
pyfemtet/opt/history/_history.py,sha256=AVnWBVJDCBd4EWqG1LNb87OA9a8s2oiixGWv1ZbrUB8,48690
|
|
35
35
|
pyfemtet/opt/history/_hypervolume.py,sha256=_IvGH71ZNreWvDQCG815Q2hS1OEvPFPQhUnNXf1UxRQ,4449
|
|
36
36
|
pyfemtet/opt/history/_optimality.py,sha256=6vLySZmrrklr04Qir0hGethTykf8NYFod88NDGrBrG0,2407
|
|
37
37
|
pyfemtet/opt/interface/__init__.py,sha256=D88d0yj-pQNvDij4HI2BG3OPXP5tvc5ZOomd_Jp4UE0,964
|
|
@@ -41,20 +41,19 @@ pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm,sha256=TM1CEO
|
|
|
41
41
|
pyfemtet/opt/interface/_excel_interface/excel_interface.py,sha256=zDl-lhveB0OSFe_9rz9fBEj1kziLyKqekPOcyTnzFm0,39735
|
|
42
42
|
pyfemtet/opt/interface/_femtet_interface/__init__.py,sha256=snQruC8Rl_5rFeVmiqw9lmzdJ5mL42HpIlHIn5ytd8s,77
|
|
43
43
|
pyfemtet/opt/interface/_femtet_interface/_femtet_parametric.py,sha256=dEe6udq2CBpXAcKCye90sXC0UVKok14LORitobc8DK8,10282
|
|
44
|
-
pyfemtet/opt/interface/_femtet_interface/femtet_interface.py,sha256=
|
|
44
|
+
pyfemtet/opt/interface/_femtet_interface/femtet_interface.py,sha256=VY6oRCZ4_LWBhCOvumNwSUPMuA94_f1oqpIUbI4zAmo,44710
|
|
45
45
|
pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py,sha256=ppeoWVSmVsTmDNKpuFRVTnhjcoefQVEog3-FRiKpEe4,104
|
|
46
|
-
pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py,sha256=
|
|
46
|
+
pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py,sha256=x1drM80W7gbsZMXWh1B2rFotyEPkDbbCQkxVnl12FcI,8359
|
|
47
47
|
pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt,sha256=cYVw2izr4_9PCPHOpi46XmDVOuNZ5ksuwKqzBtCZfNA,104833
|
|
48
48
|
pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t,sha256=BHZJwc9gCCfleIkPMx7hZmNLZ3y6sJamFv6OSsHWhW0,6804
|
|
49
49
|
pyfemtet/opt/interface/_femtet_with_nx_interface/update_model.py,sha256=2U5SJWnG7Tyu6PP_7mtf6dOguNuub8c_1DBRtF0XuT0,3036
|
|
50
50
|
pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py,sha256=5McSpy2uTmJNBylCrKt4xMSq90hlSpqyXYsjwZT3yGA,128
|
|
51
|
-
pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py,sha256=
|
|
51
|
+
pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py,sha256=Wiaho2qwbnAzrpq2t7CPL2ameiexuqhWxvpWMziPsj4,4347
|
|
52
52
|
pyfemtet/opt/interface/_solidworks_interface/__init__.py,sha256=2c52Hfme1xdJepewRGVkPT4yhrZMQgzlCuqvHzEZPVk,95
|
|
53
53
|
pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py,sha256=qeGsWhw94PfnK_HAKR08mM8mqdJfMlWAWXVE_GLLxSM,7191
|
|
54
|
-
pyfemtet/opt/interface/_surrogate/_base.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
54
|
pyfemtet/opt/interface/_surrogate_model_interface/__init__.py,sha256=9sjzQjJsMLdpBSpURyl8x4VQHEO_PGYgAshCHoycAPI,252
|
|
56
|
-
pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py,sha256=
|
|
57
|
-
pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py,sha256=
|
|
55
|
+
pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py,sha256=vdYw8m09e6OCSYPsXUCXqoJcA_lpAOAYuEGmqDNgffM,6276
|
|
56
|
+
pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py,sha256=bteAg6nPAIY8M9BoVycYRDtON7p0RLGT_RuPj0JNRtM,10279
|
|
58
57
|
pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv,sha256=Clv7t2vgSWym8-uMQPtcc8-hyjwuCk-b69PjtqWqphc,1910
|
|
59
58
|
pyfemtet/opt/interface/_with_excel_settings/__init__.py,sha256=B3ZTQDNUDpZBLEVnCh2iHL_bnTJTUaclEfOFztHfl5c,2265
|
|
60
59
|
pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py,sha256=JqgS8IAkhgnzO2IqL6xJJzidwSb6K2VK8zZG95qyml8,5453
|
|
@@ -64,14 +63,14 @@ pyfemtet/opt/meta_script/__main__.py,sha256=9-QM6eZOLpZ_CxERpRu3RAMqpudorSJdPCiK
|
|
|
64
63
|
pyfemtet/opt/meta_script/sample/sample.bas,sha256=2iuSYMgPDyAdiSDVGxRu3avjcZYnULz0l8e25YBa7SQ,27966
|
|
65
64
|
pyfemtet/opt/meta_script/sample/sample.femprj,sha256=6_0ywhgXxZjdzZzQFog8mgMUEjKNCFVNlEgAWoptovk,292885
|
|
66
65
|
pyfemtet/opt/optimizer/__init__.py,sha256=A4QYeF0KHEFdwoxLfkDND7ikDQ186Ryy3oXEGdakFSg,463
|
|
67
|
-
pyfemtet/opt/optimizer/_base_optimizer.py,sha256=
|
|
66
|
+
pyfemtet/opt/optimizer/_base_optimizer.py,sha256=Pt4-fdCffcAYrv4AJ1EpJIdV-vPYJxYirlM-l74AOFQ,30549
|
|
68
67
|
pyfemtet/opt/optimizer/optuna_optimizer/__init__.py,sha256=u2Bwc79tkZTU5dMbhzzrPQi0RlFg22UgXc-m9K9G6wQ,242
|
|
69
68
|
pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py,sha256=cGI2jIqyBadoEC8C3jXFN0tl2tZpRCqu8vRq44Xy1xU,2206
|
|
70
69
|
pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py,sha256=kFX_MUW3lWhHloe_26y1rYG6RVGZlwlBQR639d3FlIo,24494
|
|
71
70
|
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py,sha256=BFbMNvdXqV9kl1h340pW2sq0-cwNFV5dfTo6UnNnX2M,179
|
|
72
71
|
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv,sha256=K6oI9jPi_5yayhBrI9Tm1RX3PoWWKo74TOdqnaPsIy8,1746
|
|
73
72
|
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py,sha256=FY0fIwiFvakEdeQNv13eb1YtTXKzu2lF67HL2Hfs06w,9814
|
|
74
|
-
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py,sha256=
|
|
73
|
+
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py,sha256=gChJrOCQSQIwvoK-iIf-LDjDNNGKNXyJmWi-bCPQet4,46765
|
|
75
74
|
pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj,sha256=-M54MTNrV7muZWPm9Tjptd6HDdtgUFBsRroC6ytyqa0,180970
|
|
76
75
|
pyfemtet/opt/optimizer/scipy_optimizer/__init__.py,sha256=oXx2JAVLvgz0WwIXAknuV4p2MupaiutYYvjI8hXcFwc,45
|
|
77
76
|
pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py,sha256=41GF7eiyEbeYH1RLhybb-JpF9MIr_25UlzPhbbJyBUQ,12026
|
|
@@ -165,9 +164,9 @@ pyfemtet/opt/visualization/plotter/main_figure_creator.py,sha256=9RXz6Wt52MiSz3H
|
|
|
165
164
|
pyfemtet/opt/visualization/plotter/pm_graph_creator.py,sha256=hUvvYeckMhkE1nH0FAOkXrA5K3A8PbfpxKYaYnBllB4,10864
|
|
166
165
|
pyfemtet/opt/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
|
|
167
166
|
pyfemtet/opt/worker_status.py,sha256=xSVW9lcw5jzYBwnmlVzk-1zCCyvmXVOH6EoRjqVbE9M,3605
|
|
168
|
-
pyfemtet-1.0.
|
|
169
|
-
pyfemtet-1.0.
|
|
170
|
-
pyfemtet-1.0.
|
|
171
|
-
pyfemtet-1.0.
|
|
172
|
-
pyfemtet-1.0.
|
|
173
|
-
pyfemtet-1.0.
|
|
167
|
+
pyfemtet-1.0.0b0.dist-info/LICENSE,sha256=LWUL5LlMGjSRTvsalS8_fFuwS4VMw18fJSNWFwDK8pc,1060
|
|
168
|
+
pyfemtet-1.0.0b0.dist-info/LICENSE_THIRD_PARTY.txt,sha256=8_9-cgzTpmeuCqItPZb9-lyAZcH2Qp9sZTU_hYuOZIQ,191
|
|
169
|
+
pyfemtet-1.0.0b0.dist-info/METADATA,sha256=5ACU3bq6vcFxcOBZ5Krvh3VanMyfiAFL0gTfaQgJZck,3473
|
|
170
|
+
pyfemtet-1.0.0b0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
171
|
+
pyfemtet-1.0.0b0.dist-info/entry_points.txt,sha256=Tsb_l_8Z6pyyq2tRfuKiwfJUV3nq_cHoLS61foALtsg,134
|
|
172
|
+
pyfemtet-1.0.0b0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|