pyfemtet 1.0.3__py3-none-any.whl → 1.0.5__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 +2 -2
- pyfemtet/opt/history/_history.py +50 -4
- pyfemtet/opt/interface/__init__.py +12 -1
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +4 -2
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +63 -11
- pyfemtet/opt/prediction/_botorch_utils.py +59 -2
- pyfemtet/opt/prediction/_model.py +2 -2
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/METADATA +1 -1
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/RECORD +14 -14
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/LICENSE +0 -0
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/LICENSE_THIRD_PARTY.txt +0 -0
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/WHEEL +0 -0
- {pyfemtet-1.0.3.dist-info → pyfemtet-1.0.5.dist-info}/entry_points.txt +0 -0
|
Binary file
|
|
@@ -976,11 +976,11 @@ msgstr "解析モデル互換性チェックで不明なエラーが発生しま
|
|
|
976
976
|
|
|
977
977
|
#: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:146
|
|
978
978
|
msgid "Upper of pred. std-dev"
|
|
979
|
-
msgstr "
|
|
979
|
+
msgstr "予測の標準偏差(+)"
|
|
980
980
|
|
|
981
981
|
#: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:150
|
|
982
982
|
msgid "Lower of pred. std-dev"
|
|
983
|
-
msgstr "
|
|
983
|
+
msgstr "予測の標準偏差(-)"
|
|
984
984
|
|
|
985
985
|
#: pyfemtet/opt/visualization/plotter/pm_graph_creator.py:183
|
|
986
986
|
msgid "Std-dev of pred."
|
pyfemtet/opt/history/_history.py
CHANGED
|
@@ -261,6 +261,14 @@ class DataFrameWrapper:
|
|
|
261
261
|
class CorrespondingColumnNameRuler:
|
|
262
262
|
""":meta private:"""
|
|
263
263
|
|
|
264
|
+
@staticmethod
|
|
265
|
+
def cns_lower_bound_name(cns_name):
|
|
266
|
+
return cns_name + '_lower_bound'
|
|
267
|
+
|
|
268
|
+
@staticmethod
|
|
269
|
+
def cns_upper_bound_name(cns_name):
|
|
270
|
+
return cns_name + '_upper_bound'
|
|
271
|
+
|
|
264
272
|
@staticmethod
|
|
265
273
|
def direction_name(obj_name):
|
|
266
274
|
return obj_name + '_direction'
|
|
@@ -453,7 +461,7 @@ class ColumnManager:
|
|
|
453
461
|
|
|
454
462
|
# later
|
|
455
463
|
target_cds.update({f(name): object}) # str | float
|
|
456
|
-
target_mcs.append(
|
|
464
|
+
target_mcs.append('obj.direction')
|
|
457
465
|
|
|
458
466
|
for name in extra_y_names:
|
|
459
467
|
# later
|
|
@@ -466,16 +474,35 @@ class ColumnManager:
|
|
|
466
474
|
|
|
467
475
|
elif key == 'c':
|
|
468
476
|
|
|
477
|
+
f_lb = CorrespondingColumnNameRuler.cns_lower_bound_name
|
|
478
|
+
f_ub = CorrespondingColumnNameRuler.cns_upper_bound_name
|
|
479
|
+
|
|
469
480
|
for name in self.c_names:
|
|
470
481
|
# important
|
|
471
482
|
column_dtypes.update({name: float})
|
|
472
483
|
meta_columns.append('cns')
|
|
473
484
|
|
|
485
|
+
# later
|
|
486
|
+
target_cds.update({f_lb(name): float})
|
|
487
|
+
target_mcs.append('cns.lower_bound')
|
|
488
|
+
|
|
489
|
+
# later
|
|
490
|
+
target_cds.update({f_ub(name): float})
|
|
491
|
+
target_mcs.append('cns.upper_bound')
|
|
492
|
+
|
|
474
493
|
for name in extra_c_names:
|
|
475
494
|
# later
|
|
476
495
|
target_cds.update({name: float})
|
|
477
496
|
target_mcs.append('')
|
|
478
497
|
|
|
498
|
+
# later
|
|
499
|
+
target_cds.update({f_lb(name): float})
|
|
500
|
+
target_mcs.append('')
|
|
501
|
+
|
|
502
|
+
# later
|
|
503
|
+
target_cds.update({f_ub(name): float})
|
|
504
|
+
target_mcs.append('')
|
|
505
|
+
|
|
479
506
|
# additional_data を入れる
|
|
480
507
|
elif key == self._get_additional_data_column():
|
|
481
508
|
# important
|
|
@@ -682,10 +709,19 @@ class Record:
|
|
|
682
709
|
# messages to str
|
|
683
710
|
messages_str = _RECORD_MESSAGE_DELIMITER.join(d['messages'])
|
|
684
711
|
d.update({'messages': messages_str})
|
|
685
|
-
|
|
712
|
+
|
|
713
|
+
# obj
|
|
686
714
|
d.update(**{k: v.value for k, v in y.items()})
|
|
687
|
-
d.update(**{f'{k}
|
|
715
|
+
d.update(**{f'{CorrespondingColumnNameRuler.direction_name(k)}': v.direction for k, v in y.items()})
|
|
716
|
+
|
|
717
|
+
# cns
|
|
688
718
|
d.update(**{k: v.value for k, v in c.items()})
|
|
719
|
+
f_lb = CorrespondingColumnNameRuler.cns_lower_bound_name
|
|
720
|
+
d.update(**{f'{f_lb(k)}': v.lower_bound
|
|
721
|
+
for k, v in c.items()})
|
|
722
|
+
f_ub = CorrespondingColumnNameRuler.cns_upper_bound_name
|
|
723
|
+
d.update(**{f'{f_ub(k)}': v.upper_bound
|
|
724
|
+
for k, v in c.items()})
|
|
689
725
|
|
|
690
726
|
df = pd.DataFrame(
|
|
691
727
|
{k: [v] for k, v in d.items()},
|
|
@@ -1320,7 +1356,7 @@ class History:
|
|
|
1320
1356
|
if row is not None:
|
|
1321
1357
|
self_.postprocess_after_recording(row)
|
|
1322
1358
|
|
|
1323
|
-
# save history
|
|
1359
|
+
# save history if no FEMOpt
|
|
1324
1360
|
client = get_client()
|
|
1325
1361
|
if client is None:
|
|
1326
1362
|
self.save()
|
|
@@ -1332,6 +1368,16 @@ class History:
|
|
|
1332
1368
|
|
|
1333
1369
|
The destination path is :class:`History.path`.
|
|
1334
1370
|
"""
|
|
1371
|
+
|
|
1372
|
+
# flask server 情報のように、最適化の途中で
|
|
1373
|
+
# 書き換えられるケースがあるので
|
|
1374
|
+
# additional data を再度ここで meta_columns に反映する
|
|
1375
|
+
cm = self._records.column_manager
|
|
1376
|
+
for i, column in enumerate(cm.column_dtypes.keys()):
|
|
1377
|
+
# additional_data を入れる
|
|
1378
|
+
if column == cm._get_additional_data_column():
|
|
1379
|
+
cm.meta_columns[i] = json.dumps(self.additional_data or dict())
|
|
1380
|
+
|
|
1335
1381
|
self._records.save(self.path)
|
|
1336
1382
|
|
|
1337
1383
|
def _create_optuna_study_for_visualization(self):
|
|
@@ -9,6 +9,16 @@ if platform.system() == 'Windows':
|
|
|
9
9
|
from ._excel_interface import ExcelInterface
|
|
10
10
|
from ._with_excel_settings import *
|
|
11
11
|
from ._with_excel_settings import __all__ as _with_excel_settings__all__
|
|
12
|
+
else:
|
|
13
|
+
class DummyInterface:
|
|
14
|
+
def __init__(self, args, kwargs):
|
|
15
|
+
raise RuntimeError(f'{type(self).__name__} is only for Windows OS.')
|
|
16
|
+
|
|
17
|
+
class FemtetInterface(DummyInterface, AbstractFEMInterface): pass
|
|
18
|
+
class FemtetWithNXInterface(DummyInterface, AbstractFEMInterface): pass
|
|
19
|
+
class FemtetWithSolidworksInterface(DummyInterface, AbstractFEMInterface): pass
|
|
20
|
+
class ExcelInterface(DummyInterface, AbstractFEMInterface): pass
|
|
21
|
+
|
|
12
22
|
|
|
13
23
|
from ._surrogate_model_interface import AbstractSurrogateModelInterfaceBase
|
|
14
24
|
from ._surrogate_model_interface import BoTorchInterface
|
|
@@ -27,4 +37,5 @@ __all__ = [
|
|
|
27
37
|
'PoFBoTorchInterface',
|
|
28
38
|
]
|
|
29
39
|
|
|
30
|
-
|
|
40
|
+
if platform.system() == 'Windows':
|
|
41
|
+
__all__.extend(_with_excel_settings__all__)
|
|
@@ -113,7 +113,7 @@ class _ConvertedConstraint:
|
|
|
113
113
|
|
|
114
114
|
"""
|
|
115
115
|
|
|
116
|
-
x = X.detach().numpy()
|
|
116
|
+
x = X.detach().cpu().numpy()
|
|
117
117
|
cns_value = _evaluate_pyfemtet_cns(
|
|
118
118
|
self.cns,
|
|
119
119
|
self.opt,
|
|
@@ -124,6 +124,8 @@ class _ConvertedConstraint:
|
|
|
124
124
|
return Tensor([cns_value - self.cns.lower_bound - self.ce])
|
|
125
125
|
elif self.ub_or_lb == 'ub':
|
|
126
126
|
return Tensor([self.cns.upper_bound - cns_value - self.ce])
|
|
127
|
+
else:
|
|
128
|
+
assert False
|
|
127
129
|
|
|
128
130
|
|
|
129
131
|
# list[pyfemtet.opt.Constraint] について、正規化された入力に対し、 feasible or not を返す関数
|
|
@@ -184,7 +186,7 @@ class NonlinearInequalityConstraints:
|
|
|
184
186
|
for each_num_restarts in ic_batch:
|
|
185
187
|
feasible_q_list = []
|
|
186
188
|
for each_q in each_num_restarts:
|
|
187
|
-
x: np.ndarray = each_q.detach().numpy() # normalized parameters
|
|
189
|
+
x: np.ndarray = each_q.detach().cpu().numpy() # normalized parameters
|
|
188
190
|
if _is_feasible(self.constraints, self.opt, self.trans, x, self.ce, self.cs):
|
|
189
191
|
feasible_q_list.append(each_q) # Keep only feasible rows
|
|
190
192
|
|
|
@@ -841,6 +841,7 @@ class PoFConfig:
|
|
|
841
841
|
)
|
|
842
842
|
feasibility_cdf_threshold: float | str = 0.5 # or 'sample_mean'
|
|
843
843
|
feasibility_noise: float | str | None = None # 'no' to fixed minimum noise
|
|
844
|
+
remove_hard_constraints_from_gp: bool = False # if consider_explicit_hard_constraint is False, no effect.
|
|
844
845
|
|
|
845
846
|
|
|
846
847
|
# TODO:
|
|
@@ -1079,6 +1080,8 @@ class PoFBoTorchSampler(BoTorchSampler):
|
|
|
1079
1080
|
if n_trials < self._n_startup_trials:
|
|
1080
1081
|
return {}
|
|
1081
1082
|
|
|
1083
|
+
# ===== ここまで変更なし =====
|
|
1084
|
+
|
|
1082
1085
|
trans = _SearchSpaceTransform(search_space)
|
|
1083
1086
|
n_objectives = len(study.directions)
|
|
1084
1087
|
values: numpy.ndarray | torch.Tensor = numpy.empty(
|
|
@@ -1099,23 +1102,48 @@ class PoFBoTorchSampler(BoTorchSampler):
|
|
|
1099
1102
|
): # BoTorch always assumes maximization.
|
|
1100
1103
|
value *= -1
|
|
1101
1104
|
values[trial_idx, obj_idx] = value
|
|
1105
|
+
|
|
1102
1106
|
if self._constraints_func is not None:
|
|
1107
|
+
|
|
1108
|
+
# get constraints
|
|
1103
1109
|
constraints = study._storage.get_trial_system_attrs(trial._trial_id).get(
|
|
1104
1110
|
_CONSTRAINTS_KEY
|
|
1105
1111
|
)
|
|
1112
|
+
|
|
1113
|
+
# Explicit hard constraints を optimize_acqf で扱うならば
|
|
1114
|
+
# GP にはそれを渡さない (option)
|
|
1115
|
+
if (
|
|
1116
|
+
constraints is not None
|
|
1117
|
+
and self.pof_config.consider_explicit_hard_constraint
|
|
1118
|
+
and self.pof_config.remove_hard_constraints_from_gp
|
|
1119
|
+
):
|
|
1120
|
+
constraints = filter_soft_constraints_only(
|
|
1121
|
+
constraints, self.pyfemtet_optimizer
|
|
1122
|
+
)
|
|
1123
|
+
|
|
1106
1124
|
if constraints is not None:
|
|
1125
|
+
|
|
1107
1126
|
n_constraints = len(constraints)
|
|
1108
1127
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1128
|
+
# remove_hard_constraints_from_gp で
|
|
1129
|
+
# constraints がなくなった場合、
|
|
1130
|
+
# そもそも今後ここに来る必要がない
|
|
1131
|
+
if n_constraints == 0:
|
|
1132
|
+
self._constraints_func = None
|
|
1133
|
+
|
|
1134
|
+
else:
|
|
1135
|
+
|
|
1136
|
+
if con is None:
|
|
1137
|
+
con = numpy.full(
|
|
1138
|
+
(n_completed_trials, n_constraints), numpy.nan, dtype=numpy.float64
|
|
1139
|
+
)
|
|
1140
|
+
elif n_constraints != con.shape[1]:
|
|
1141
|
+
raise RuntimeError(
|
|
1142
|
+
f"Expected {con.shape[1]} constraints "
|
|
1143
|
+
f"but received {n_constraints}."
|
|
1144
|
+
)
|
|
1145
|
+
con[trial_idx] = constraints
|
|
1146
|
+
|
|
1119
1147
|
elif trial.state == TrialState.RUNNING:
|
|
1120
1148
|
if all(p in trial.params for p in search_space):
|
|
1121
1149
|
params[trial_idx] = trans.transform(trial.params)
|
|
@@ -1162,7 +1190,6 @@ class PoFBoTorchSampler(BoTorchSampler):
|
|
|
1162
1190
|
else:
|
|
1163
1191
|
running_params = None
|
|
1164
1192
|
|
|
1165
|
-
# ===== ここまで変更なし =====
|
|
1166
1193
|
|
|
1167
1194
|
# TODO: ミーゼスなどの場合にこれらのシード固定法も試す
|
|
1168
1195
|
# if self._seed is not None:
|
|
@@ -1247,3 +1274,28 @@ class PoFBoTorchSampler(BoTorchSampler):
|
|
|
1247
1274
|
# ===== ここまで変更なし =====
|
|
1248
1275
|
|
|
1249
1276
|
return trans.untransform(candidates.cpu().numpy())
|
|
1277
|
+
|
|
1278
|
+
|
|
1279
|
+
def filter_soft_constraints_only(
|
|
1280
|
+
constraints: tuple[float],
|
|
1281
|
+
opt: AbstractOptimizer,
|
|
1282
|
+
) -> list[float]:
|
|
1283
|
+
# constraints を取得
|
|
1284
|
+
# lb, ub の存在に応じて hard, soft を展開
|
|
1285
|
+
is_soft_list = []
|
|
1286
|
+
for cns in opt.constraints.values():
|
|
1287
|
+
if cns.lower_bound is not None:
|
|
1288
|
+
is_soft_list.append(not cns.hard)
|
|
1289
|
+
if cns.upper_bound is not None:
|
|
1290
|
+
is_soft_list.append(not cns.hard)
|
|
1291
|
+
|
|
1292
|
+
# constraints と比べる
|
|
1293
|
+
assert len(constraints) == len(is_soft_list)
|
|
1294
|
+
|
|
1295
|
+
# soft に該当する要素のみで組立て返す
|
|
1296
|
+
ret = []
|
|
1297
|
+
for is_soft, value in zip(is_soft_list, constraints):
|
|
1298
|
+
if is_soft:
|
|
1299
|
+
ret.append(value)
|
|
1300
|
+
|
|
1301
|
+
return ret
|
|
@@ -3,15 +3,17 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
from packaging import version
|
|
5
5
|
|
|
6
|
+
from tqdm import tqdm
|
|
6
7
|
import torch
|
|
7
8
|
|
|
8
9
|
from gpytorch.mlls import ExactMarginalLogLikelihood
|
|
9
10
|
from gpytorch.kernels import MaternKernel, ScaleKernel # , RBFKernel
|
|
10
11
|
from gpytorch.priors.torch_priors import GammaPrior # , LogNormalPrior
|
|
11
|
-
|
|
12
|
+
from gpytorch.constraints.constraints import GreaterThan
|
|
12
13
|
|
|
13
14
|
from botorch.models import SingleTaskGP
|
|
14
15
|
from botorch.models.transforms import Standardize, Normalize
|
|
16
|
+
from botorch.exceptions import ModelFittingError
|
|
15
17
|
|
|
16
18
|
# import fit_gpytorch_mll
|
|
17
19
|
import botorch.version
|
|
@@ -22,6 +24,9 @@ if version.parse(botorch.version.version) < version.parse("0.8.0"):
|
|
|
22
24
|
else:
|
|
23
25
|
from botorch.fit import fit_gpytorch_mll
|
|
24
26
|
|
|
27
|
+
from pyfemtet.logger import get_module_logger
|
|
28
|
+
|
|
29
|
+
logger = get_module_logger('opt.botorch_util')
|
|
25
30
|
|
|
26
31
|
__all__ = [
|
|
27
32
|
'get_standardizer_and_no_noise_train_yvar',
|
|
@@ -128,6 +133,58 @@ def setup_gp(X, Y, bounds, observation_noise, lh_class=None, covar_module=None):
|
|
|
128
133
|
)
|
|
129
134
|
|
|
130
135
|
mll_ = lh_class(model_.likelihood, model_)
|
|
131
|
-
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
fit_gpytorch_mll(mll_)
|
|
139
|
+
|
|
140
|
+
except ModelFittingError as e:
|
|
141
|
+
logger.warning(f'{type(e).__name__} is raised '
|
|
142
|
+
f'during fit_gpytorch_mll()! '
|
|
143
|
+
f'The original message is: `{",".join(e.args)}`.')
|
|
144
|
+
|
|
145
|
+
# retry with noise level setting
|
|
146
|
+
try:
|
|
147
|
+
logger.info('Attempt to retrying...')
|
|
148
|
+
|
|
149
|
+
# noinspection PyBroadException
|
|
150
|
+
try:
|
|
151
|
+
model_.likelihood.noise_covar.register_constraint(
|
|
152
|
+
"raw_noise", GreaterThan(1e-5))
|
|
153
|
+
logger.warning('Set the raw_noise constraint to 1e-5.')
|
|
154
|
+
except Exception:
|
|
155
|
+
logger.info('Failed to set the raw_noise constraint. '
|
|
156
|
+
'Retrying simply.')
|
|
157
|
+
|
|
158
|
+
fit_gpytorch_mll(mll_)
|
|
159
|
+
|
|
160
|
+
except ModelFittingError:
|
|
161
|
+
logger.warning(f'{type(e).__name__} is raised '
|
|
162
|
+
f'during *second* fit_gpytorch_mll()! '
|
|
163
|
+
f'The original message is: `{",".join(e.args)}`.')
|
|
164
|
+
|
|
165
|
+
# retry with another way
|
|
166
|
+
logger.warning('Attempt to retrying.')
|
|
167
|
+
logger.warning('Try to use SGD algorithm...')
|
|
168
|
+
|
|
169
|
+
from torch.optim import SGD
|
|
170
|
+
|
|
171
|
+
NUM_EPOCHS = 150
|
|
172
|
+
|
|
173
|
+
optimizer = SGD([{"params": model_.parameters()}], lr=0.025)
|
|
174
|
+
|
|
175
|
+
model_.train()
|
|
176
|
+
|
|
177
|
+
for epoch in tqdm(range(NUM_EPOCHS), desc='fit with SGD'):
|
|
178
|
+
# clear gradients
|
|
179
|
+
optimizer.zero_grad()
|
|
180
|
+
# forward pass through the model to obtain the output MultivariateNormal
|
|
181
|
+
output = model_(X)
|
|
182
|
+
# Compute negative marginal log likelihood
|
|
183
|
+
loss = -mll_(output, model_.train_targets)
|
|
184
|
+
# back prop gradients
|
|
185
|
+
loss.backward()
|
|
186
|
+
optimizer.step()
|
|
187
|
+
|
|
188
|
+
model_.eval()
|
|
132
189
|
|
|
133
190
|
return model_
|
|
@@ -73,8 +73,8 @@ class SingleTaskGPModel(AbstractModel):
|
|
|
73
73
|
X = torch.tensor(x, **self.KWARGS)
|
|
74
74
|
post = self.gp.posterior(X)
|
|
75
75
|
with torch.no_grad():
|
|
76
|
-
mean = post.mean.numpy()
|
|
77
|
-
std = post.variance.sqrt().numpy()
|
|
76
|
+
mean = post.mean.cpu().numpy()
|
|
77
|
+
std = post.variance.sqrt().cpu().numpy()
|
|
78
78
|
return mean, std
|
|
79
79
|
|
|
80
80
|
|
|
@@ -4,8 +4,8 @@ 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=wjYhvR2TUpjHCBowrW2bQYUxKmnEi3d8GBPgseadRGw,34424
|
|
8
|
+
pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po,sha256=ktqUESvDUja2LQJDo-oEv58FH6klUmpu3lAoITtR_NQ,48313
|
|
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
|
|
@@ -31,10 +31,10 @@ pyfemtet/opt/__init__.py,sha256=1LcwTddtoi8plemxkzmX0YEKiNpAZvKn9OoNQysyDLE,339
|
|
|
31
31
|
pyfemtet/opt/exceptions.py,sha256=M_O7jm20Y4e_QxsKF6tnEl-OrAtErUOj6hNT7eEXCO4,1327
|
|
32
32
|
pyfemtet/opt/femopt.py,sha256=Ufp9qJuJIEtP_lJtR-FeCkGtH_Us8imlJ1c-FVrVyLU,23186
|
|
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=wyj0omvisQWz-BZ5mIFPyTJhJ77izOtdkGgjN6G4ZDA,51033
|
|
35
35
|
pyfemtet/opt/history/_hypervolume.py,sha256=_IvGH71ZNreWvDQCG815Q2hS1OEvPFPQhUnNXf1UxRQ,4449
|
|
36
36
|
pyfemtet/opt/history/_optimality.py,sha256=6vLySZmrrklr04Qir0hGethTykf8NYFod88NDGrBrG0,2407
|
|
37
|
-
pyfemtet/opt/interface/__init__.py,sha256=
|
|
37
|
+
pyfemtet/opt/interface/__init__.py,sha256=wiVSUlzLF_6gFXBw0T_JOKOOg5l5SJ24-HfaYWp7E0Y,1459
|
|
38
38
|
pyfemtet/opt/interface/_base_interface.py,sha256=oz2PeEQHWD59xkRWFau3CpPpR8a_3NZjoY7YyYSr1sM,6464
|
|
39
39
|
pyfemtet/opt/interface/_excel_interface/__init__.py,sha256=bFOmY18-j4RJc_dHQMe62GsxFwQSj7RWdvi6jxWuqyg,74
|
|
40
40
|
pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm,sha256=TM1CEOC5XtU7qYKNnHScO02kdtXT-gc5y29m2hatsm0,114259
|
|
@@ -69,16 +69,16 @@ pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py,sha256=7eZsruVCGgMl
|
|
|
69
69
|
pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py,sha256=UWD2o0pUqsQg8ZGE2J847czmNYmAbXvQpVSsDxWmElI,28772
|
|
70
70
|
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py,sha256=BFbMNvdXqV9kl1h340pW2sq0-cwNFV5dfTo6UnNnX2M,179
|
|
71
71
|
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv,sha256=K6oI9jPi_5yayhBrI9Tm1RX3PoWWKo74TOdqnaPsIy8,1746
|
|
72
|
-
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py,sha256=
|
|
73
|
-
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py,sha256=
|
|
72
|
+
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py,sha256=jq8cfkZuEkdd8Gvlr3Do4dl48bKSm9Uu7AcEy1dAf6U,9901
|
|
73
|
+
pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py,sha256=qOAQOiC7xW1aGZ7JbMPYVjc9FEHi3hYffOfcXpy4rhI,48642
|
|
74
74
|
pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj,sha256=-M54MTNrV7muZWPm9Tjptd6HDdtgUFBsRroC6ytyqa0,180970
|
|
75
75
|
pyfemtet/opt/optimizer/scipy_optimizer/__init__.py,sha256=oXx2JAVLvgz0WwIXAknuV4p2MupaiutYYvjI8hXcFwc,45
|
|
76
76
|
pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py,sha256=sZxpb-qnDn1KmwgvZmFgVwCKpTPTGw7Yrlmq3DNin0Q,12796
|
|
77
77
|
pyfemtet/opt/prediction/__init__.py,sha256=-XYo-l5YFjExMtqMKj1YUAhmGSQq_0YITS0qizj2Xbs,104
|
|
78
|
-
pyfemtet/opt/prediction/_botorch_utils.py,sha256=
|
|
78
|
+
pyfemtet/opt/prediction/_botorch_utils.py,sha256=cXQlQ_oC6cQaI5kGIYANlqDJPdkGEA_zK2gtJpluJNE,6001
|
|
79
79
|
pyfemtet/opt/prediction/_gpytorch_modules_extension.py,sha256=B_qUtFn06dQENOmUOObbCpkeASUKI5JpXROx8zYeaq0,5224
|
|
80
80
|
pyfemtet/opt/prediction/_helper.py,sha256=7MyVSISOVqBksKxLAE-cCbsVLcAJPbadNWUlk4-q5Ew,4370
|
|
81
|
-
pyfemtet/opt/prediction/_model.py,sha256=
|
|
81
|
+
pyfemtet/opt/prediction/_model.py,sha256=rqp_CT3c3ddu-pT2f2_msoQjlv0CVKS2B5OyD45gVEE,3873
|
|
82
82
|
pyfemtet/opt/problem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
83
|
pyfemtet/opt/problem/problem.py,sha256=ohdZ450XH4YoFK4T9t52t8BSja6DpFTfMePQM1DdllU,9782
|
|
84
84
|
pyfemtet/opt/problem/variable_manager/__init__.py,sha256=uzuraWUZfLzB3uZHIQHFL7uMxWvv7Oaf940zEozXtNY,476
|
|
@@ -164,9 +164,9 @@ pyfemtet/opt/visualization/plotter/main_figure_creator.py,sha256=9RXz6Wt52MiSz3H
|
|
|
164
164
|
pyfemtet/opt/visualization/plotter/pm_graph_creator.py,sha256=hUvvYeckMhkE1nH0FAOkXrA5K3A8PbfpxKYaYnBllB4,10864
|
|
165
165
|
pyfemtet/opt/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
|
|
166
166
|
pyfemtet/opt/worker_status.py,sha256=xSVW9lcw5jzYBwnmlVzk-1zCCyvmXVOH6EoRjqVbE9M,3605
|
|
167
|
-
pyfemtet-1.0.
|
|
168
|
-
pyfemtet-1.0.
|
|
169
|
-
pyfemtet-1.0.
|
|
170
|
-
pyfemtet-1.0.
|
|
171
|
-
pyfemtet-1.0.
|
|
172
|
-
pyfemtet-1.0.
|
|
167
|
+
pyfemtet-1.0.5.dist-info/LICENSE,sha256=LWUL5LlMGjSRTvsalS8_fFuwS4VMw18fJSNWFwDK8pc,1060
|
|
168
|
+
pyfemtet-1.0.5.dist-info/LICENSE_THIRD_PARTY.txt,sha256=8_9-cgzTpmeuCqItPZb9-lyAZcH2Qp9sZTU_hYuOZIQ,191
|
|
169
|
+
pyfemtet-1.0.5.dist-info/METADATA,sha256=yorqWz1uHFA05tLR0Mr7nGJTc9vBjfEOWx0J4Z6ww9U,3471
|
|
170
|
+
pyfemtet-1.0.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
171
|
+
pyfemtet-1.0.5.dist-info/entry_points.txt,sha256=Tsb_l_8Z6pyyq2tRfuKiwfJUV3nq_cHoLS61foALtsg,134
|
|
172
|
+
pyfemtet-1.0.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|