PyFemtet 1.8.3__tar.gz → 1.9.1__tar.gz
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.
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/PKG-INFO +1 -1
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/femopt.py +9 -144
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_history.py +111 -9
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_base_interface.py +10 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/excel_interface.py +0 -4
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/_femtet_parametric.py +7 -7
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/femtet_interface.py +13 -1
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +1 -1
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/_base_optimizer.py +149 -62
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyproject.toml +1 -1
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/LICENSE +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/LICENSE_THIRD_PARTY.txt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/README.md +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/1. make_pot_and_update_po.bat +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/2. build_mo.bat +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/babel.cfg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/i18n.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/locales/messages.pot +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_i18n/messages.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/closing.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/dask_util.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/df_util.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/excel_macro_util.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/excel_parse_util.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_access_inspection.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_autosave.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_exit.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/femtet_version.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/helper.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/process_util.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/sample.xlsx +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/solidworks_variable.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/str_enum.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/_util/symbol_support_for_param_name.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/core.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/dispatch_extensions/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/dispatch_extensions/_impl.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/logger/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/logger/_impl.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/exceptions.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_hypervolume.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/history/_optimality.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_dummy_classes.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_nx_interface/update_model.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_multiple_fem_interface.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_reopen_decorator.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_solidworks_interface/sw_const.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_with_excel_settings/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/YAML_Generator.xlsm +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/__main__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/sample/sample.bas +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/meta_script/sample/sample.femprj +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/_trial_queue.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/scipy_optimizer/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_botorch_utils.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_gpytorch_modules_extension.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_helper.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/prediction/_model.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/problem.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/_string_as_expression.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/problem/variable_manager/_variable_manager.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/_create_wrapped_components.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/__main__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_base_application.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_common_pages.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/alert_region.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/control_femtet.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/detail_graphs.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/main_graph.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_complex_components/pm_graph.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_detail_page.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_helper.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_application.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_process_monitor/_pages.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dbc.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/dcc.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/html.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/_wrapped_components/str_enum.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/.gitignore +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/__main__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/_application.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/_pages.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.csv +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.db +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.log +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bgr +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bnd +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.btr +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.mtl +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.prm +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.jpg +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.pdt +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.femprj +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/__init__.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/contour_creator.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/main_figure_creator.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/parallel_plot_creator.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/visualization/plotter/pm_graph_creator.py +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/wat_ex14_parametric_jp.femprj +0 -0
- {pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/worker_status.py +0 -0
|
@@ -49,8 +49,8 @@ class FEMOpt:
|
|
|
49
49
|
|
|
50
50
|
def __init__(
|
|
51
51
|
self,
|
|
52
|
-
fem: AbstractFEMInterface = None,
|
|
53
|
-
opt: AbstractOptimizer = None,
|
|
52
|
+
fem: AbstractFEMInterface | None = None,
|
|
53
|
+
opt: AbstractOptimizer | None = None,
|
|
54
54
|
):
|
|
55
55
|
self.opt: AbstractOptimizer = opt or OptunaOptimizer()
|
|
56
56
|
|
|
@@ -160,7 +160,7 @@ class FEMOpt:
|
|
|
160
160
|
names: str | list[str],
|
|
161
161
|
fun: Callable[..., Sequence[float]],
|
|
162
162
|
n_return: int,
|
|
163
|
-
directions: DIRECTION | Sequence[DIRECTION] = None,
|
|
163
|
+
directions: DIRECTION | Sequence[DIRECTION] | None = None,
|
|
164
164
|
args: tuple | None = None,
|
|
165
165
|
kwargs: dict | None = None,
|
|
166
166
|
):
|
|
@@ -208,7 +208,7 @@ class FEMOpt:
|
|
|
208
208
|
):
|
|
209
209
|
self.opt.set_termination_condition(func)
|
|
210
210
|
|
|
211
|
-
def set_monitor_host(self, host: str = None, port: int = None):
|
|
211
|
+
def set_monitor_host(self, host: str | None = None, port: int | None = None):
|
|
212
212
|
"""Sets the host IP address and the port of the process monitor.
|
|
213
213
|
|
|
214
214
|
Args:
|
|
@@ -240,14 +240,14 @@ class FEMOpt:
|
|
|
240
240
|
|
|
241
241
|
def optimize(
|
|
242
242
|
self,
|
|
243
|
-
n_trials: int = None,
|
|
243
|
+
n_trials: int | None = None,
|
|
244
244
|
n_parallel: int = 1,
|
|
245
|
-
timeout: float = None,
|
|
245
|
+
timeout: float | None = None,
|
|
246
246
|
wait_setup: bool = True,
|
|
247
247
|
confirm_before_exit: bool = True,
|
|
248
|
-
history_path: str = None,
|
|
248
|
+
history_path: str | None = None,
|
|
249
249
|
with_monitor: bool = True,
|
|
250
|
-
scheduler_address: str = None,
|
|
250
|
+
scheduler_address: str | None = None,
|
|
251
251
|
seed: int | None = None,
|
|
252
252
|
):
|
|
253
253
|
|
|
@@ -258,7 +258,7 @@ class FEMOpt:
|
|
|
258
258
|
ver=pyfemtet.__version__,
|
|
259
259
|
)
|
|
260
260
|
)
|
|
261
|
-
client: Client
|
|
261
|
+
client: Client | DummyClient
|
|
262
262
|
|
|
263
263
|
# set arguments
|
|
264
264
|
self.opt.n_trials = n_trials or self.opt.n_trials
|
|
@@ -274,7 +274,6 @@ class FEMOpt:
|
|
|
274
274
|
worker_name_base = 'Sub'
|
|
275
275
|
if n_parallel == 1:
|
|
276
276
|
cluster = nullcontext()
|
|
277
|
-
# noinspection PyTypeChecker
|
|
278
277
|
client = DummyClient()
|
|
279
278
|
|
|
280
279
|
else:
|
|
@@ -534,137 +533,3 @@ class FEMOpt:
|
|
|
534
533
|
logger.info(_('All processes are terminated.'))
|
|
535
534
|
|
|
536
535
|
return df
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
def debug_1():
|
|
540
|
-
# noinspection PyUnresolvedReferences
|
|
541
|
-
from time import sleep
|
|
542
|
-
# from pyfemtet.opt.optimizer import InterruptOptimization
|
|
543
|
-
import optuna
|
|
544
|
-
from pyfemtet.opt.interface import AbstractFEMInterface, NoFEM
|
|
545
|
-
|
|
546
|
-
def _parabola(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
|
|
547
|
-
x = _opt.get_variables('values')
|
|
548
|
-
# print(os.getpid())
|
|
549
|
-
# raise RuntimeError
|
|
550
|
-
# raise Interrupt
|
|
551
|
-
# if get_worker() is None:
|
|
552
|
-
# raise RuntimeError
|
|
553
|
-
return (x ** 2).sum()
|
|
554
|
-
|
|
555
|
-
def _cns(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
|
|
556
|
-
x = _opt.get_variables('values')
|
|
557
|
-
return x[0]
|
|
558
|
-
|
|
559
|
-
_opt = OptunaOptimizer()
|
|
560
|
-
_opt.sampler = optuna.samplers.TPESampler(seed=42)
|
|
561
|
-
_opt.n_trials = 10
|
|
562
|
-
|
|
563
|
-
_fem = NoFEM()
|
|
564
|
-
_opt.fem = _fem
|
|
565
|
-
|
|
566
|
-
_args = (_opt,)
|
|
567
|
-
|
|
568
|
-
_opt.add_parameter('x1', 1, -1, 1, step=0.2)
|
|
569
|
-
_opt.add_parameter('x2', 1, -1, 1, step=0.2)
|
|
570
|
-
|
|
571
|
-
_opt.add_constraint('cns', _cns, lower_bound=-0.5, args=_args)
|
|
572
|
-
|
|
573
|
-
_opt.add_objective('obj', _parabola, args=_args)
|
|
574
|
-
|
|
575
|
-
_femopt = FEMOpt(fem=_fem, opt=_opt)
|
|
576
|
-
_femopt.opt = _opt
|
|
577
|
-
# _femopt.opt.history.path = 'v1test/femopt-restart-test.csv'
|
|
578
|
-
_femopt.optimize(n_parallel=2)
|
|
579
|
-
|
|
580
|
-
print(os.path.abspath(_femopt.opt.history.path))
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
def substrate_size(Femtet):
|
|
584
|
-
"""基板のXY平面上での専有面積を計算します。"""
|
|
585
|
-
substrate_w = Femtet.GetVariableValue('substrate_w')
|
|
586
|
-
substrate_d = Femtet.GetVariableValue('substrate_d')
|
|
587
|
-
|
|
588
|
-
# assert get_worker() is not None
|
|
589
|
-
|
|
590
|
-
return substrate_w * substrate_d # 単位: mm2
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
def debug_2():
|
|
594
|
-
from pyfemtet.opt.interface import FemtetInterface
|
|
595
|
-
from pyfemtet.opt.optimizer import OptunaOptimizer
|
|
596
|
-
|
|
597
|
-
fem = FemtetInterface(
|
|
598
|
-
femprj_path=os.path.join(os.path.dirname(__file__), 'wat_ex14_parametric_jp.femprj'),
|
|
599
|
-
)
|
|
600
|
-
|
|
601
|
-
opt = OptunaOptimizer()
|
|
602
|
-
|
|
603
|
-
opt.fem = fem
|
|
604
|
-
|
|
605
|
-
opt.add_parameter(name="substrate_w", initial_value=40, lower_bound=22, upper_bound=60)
|
|
606
|
-
opt.add_parameter(name="substrate_d", initial_value=60, lower_bound=34, upper_bound=60)
|
|
607
|
-
opt.add_objective(name='基板サイズ(mm2)', fun=substrate_size)
|
|
608
|
-
opt.add_objective(name='obj2', fun=substrate_size)
|
|
609
|
-
opt.add_objective(name='obj3', fun=substrate_size)
|
|
610
|
-
|
|
611
|
-
opt.n_trials = 10
|
|
612
|
-
# opt.history.path = os.path.join(os.path.dirname(__file__), 'femtet-test.csv')
|
|
613
|
-
|
|
614
|
-
femopt = FEMOpt()
|
|
615
|
-
|
|
616
|
-
femopt.opt = opt
|
|
617
|
-
|
|
618
|
-
femopt.optimize(n_parallel=1)
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
def debug_3():
|
|
622
|
-
# noinspection PyUnresolvedReferences
|
|
623
|
-
from time import sleep
|
|
624
|
-
# from pyfemtet.opt.optimizer import InterruptOptimization
|
|
625
|
-
import optuna
|
|
626
|
-
from pyfemtet.opt.interface import AbstractFEMInterface, NoFEM
|
|
627
|
-
|
|
628
|
-
def _parabola(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
|
|
629
|
-
x = _opt.get_variables('values')
|
|
630
|
-
# print(os.getpid())
|
|
631
|
-
# raise RuntimeError
|
|
632
|
-
# raise Interrupt
|
|
633
|
-
# if get_worker() is None:
|
|
634
|
-
# raise RuntimeError
|
|
635
|
-
return (x ** 2).sum()
|
|
636
|
-
|
|
637
|
-
def _cns(_fem: AbstractFEMInterface, _opt: AbstractOptimizer):
|
|
638
|
-
x = _opt.get_variables('values')
|
|
639
|
-
return x[0]
|
|
640
|
-
|
|
641
|
-
_opt = OptunaOptimizer()
|
|
642
|
-
_opt.sampler = optuna.samplers.TPESampler(seed=42)
|
|
643
|
-
|
|
644
|
-
_fem = NoFEM()
|
|
645
|
-
_opt.fem = _fem
|
|
646
|
-
|
|
647
|
-
_args = (_opt,)
|
|
648
|
-
|
|
649
|
-
_opt.add_parameter('x1', 1, -1, 1, step=0.2)
|
|
650
|
-
_opt.add_parameter('x2', 1, -1, 1, step=0.2)
|
|
651
|
-
|
|
652
|
-
_opt.add_constraint('cns', _cns, lower_bound=-0.5, args=_args)
|
|
653
|
-
|
|
654
|
-
_opt.add_objective('obj', _parabola, args=_args)
|
|
655
|
-
|
|
656
|
-
_femopt = FEMOpt(fem=_fem, opt=_opt)
|
|
657
|
-
_femopt.optimize(
|
|
658
|
-
scheduler_address='<dask scheduler で起動したスケジューラの tcp をここに入力>',
|
|
659
|
-
n_trials=80,
|
|
660
|
-
n_parallel=6,
|
|
661
|
-
with_monitor=True,
|
|
662
|
-
confirm_before_exit=False,
|
|
663
|
-
)
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
if __name__ == '__main__':
|
|
667
|
-
# for i in range(1):
|
|
668
|
-
debug_1()
|
|
669
|
-
# debug_2()
|
|
670
|
-
# debug_3()
|
|
@@ -372,11 +372,21 @@ class ColumnManager:
|
|
|
372
372
|
column_dtypes: dict[str, type]
|
|
373
373
|
meta_columns: list[str]
|
|
374
374
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
375
|
+
def columns_to_keep_even_if_nan(self) -> set[str]:
|
|
376
|
+
out = {"messages"}
|
|
377
|
+
# objective
|
|
378
|
+
for name in self.get_obj_names():
|
|
379
|
+
out.add(name)
|
|
380
|
+
out.add(CorrespondingColumnNameRuler.direction_name(name))
|
|
381
|
+
# constraint
|
|
382
|
+
for name in self.get_cns_names():
|
|
383
|
+
out.add(name)
|
|
384
|
+
out.add(CorrespondingColumnNameRuler.cns_lower_bound_name(name))
|
|
385
|
+
out.add(CorrespondingColumnNameRuler.cns_upper_bound_name(name))
|
|
386
|
+
# other_output
|
|
387
|
+
for name in self.get_other_output_names():
|
|
388
|
+
out.add(name)
|
|
389
|
+
return out
|
|
380
390
|
|
|
381
391
|
def initialize(
|
|
382
392
|
self,
|
|
@@ -955,6 +965,72 @@ class Records:
|
|
|
955
965
|
self.loaded_meta_columns = loaded_meta_columns
|
|
956
966
|
self.loaded_df = loaded_df
|
|
957
967
|
|
|
968
|
+
@staticmethod
|
|
969
|
+
def _incompatible_setting_detail(
|
|
970
|
+
category_en: str,
|
|
971
|
+
category_jp: str,
|
|
972
|
+
added: set[str],
|
|
973
|
+
removed: set[str],
|
|
974
|
+
) -> str | None:
|
|
975
|
+
if not added and not removed:
|
|
976
|
+
return None
|
|
977
|
+
category = _(en_message=category_en, jp_message=category_jp)
|
|
978
|
+
lines = []
|
|
979
|
+
if added:
|
|
980
|
+
lines.append(
|
|
981
|
+
_(
|
|
982
|
+
en_message=" Extra {category}: {names}",
|
|
983
|
+
jp_message=" 余分な{category}: {names}",
|
|
984
|
+
category=category,
|
|
985
|
+
names=", ".join(sorted(added)),
|
|
986
|
+
)
|
|
987
|
+
)
|
|
988
|
+
if removed:
|
|
989
|
+
lines.append(
|
|
990
|
+
_(
|
|
991
|
+
en_message=" Missing {category}: {names}",
|
|
992
|
+
jp_message=" 足りない{category}: {names}",
|
|
993
|
+
category=category,
|
|
994
|
+
names=", ".join(sorted(removed)),
|
|
995
|
+
)
|
|
996
|
+
)
|
|
997
|
+
return "\n".join(lines)
|
|
998
|
+
|
|
999
|
+
@staticmethod
|
|
1000
|
+
def _incompatible_setting_message(details: list[str]) -> str:
|
|
1001
|
+
detail = "\n".join(details)
|
|
1002
|
+
return _(
|
|
1003
|
+
en_message="The current script settings do not match "
|
|
1004
|
+
"the history CSV file loaded via history_path.\n"
|
|
1005
|
+
"\n"
|
|
1006
|
+
"[The current setting incompatibilities]\n"
|
|
1007
|
+
"{detail}\n"
|
|
1008
|
+
"\n"
|
|
1009
|
+
"[Countermeasure]\n"
|
|
1010
|
+
"When resuming optimization with history_path, "
|
|
1011
|
+
"the settings must be compatible with the previous run. "
|
|
1012
|
+
"To fix this, choose one of the following options:\n"
|
|
1013
|
+
" 1. Restore the settings to match the previous run.\n"
|
|
1014
|
+
" 2. Remove the history_path argument to start a new optimization.\n"
|
|
1015
|
+
" 3. Delete the history CSV file (and the .db file with the same name, if it exists) "
|
|
1016
|
+
"to discard the previous history and start fresh.",
|
|
1017
|
+
jp_message="現在のスクリプトの設定が、"
|
|
1018
|
+
"history_path で読み込んだ履歴 CSV ファイルの内容と一致しません。\n"
|
|
1019
|
+
"\n"
|
|
1020
|
+
"[現在の設定の不整合点]\n"
|
|
1021
|
+
"{detail}\n"
|
|
1022
|
+
"\n"
|
|
1023
|
+
"[対策]\n"
|
|
1024
|
+
"history_path を指定して最適化を再開する場合、"
|
|
1025
|
+
"設定は前回の実行と整合している必要があります。"
|
|
1026
|
+
"以下のいずれかの方法で対処してください:\n"
|
|
1027
|
+
" 1. 前回の実行と同じ設定に戻す。\n"
|
|
1028
|
+
" 2. history_path の指定を削除して新しい最適化を開始する。\n"
|
|
1029
|
+
" 3. 履歴 CSV ファイル(および同名の .db ファイルがあればそれも)を削除し、"
|
|
1030
|
+
"前回の履歴を破棄して最初からやり直す。",
|
|
1031
|
+
detail=detail,
|
|
1032
|
+
)
|
|
1033
|
+
|
|
958
1034
|
def check_problem_compatibility(self):
|
|
959
1035
|
# 読み込んだデータがないのであれば何もしない
|
|
960
1036
|
if self.loaded_df is None:
|
|
@@ -968,6 +1044,8 @@ class Records:
|
|
|
968
1044
|
self.loaded_meta_columns,
|
|
969
1045
|
)
|
|
970
1046
|
|
|
1047
|
+
incompatible_details: list[str] = []
|
|
1048
|
+
|
|
971
1049
|
# prm_names が過不足ないか
|
|
972
1050
|
loaded_prm_names = set(
|
|
973
1051
|
self.column_manager._filter_prm_names(loaded_columns, loaded_meta_columns)
|
|
@@ -976,7 +1054,13 @@ class Records:
|
|
|
976
1054
|
if not (
|
|
977
1055
|
len(loaded_prm_names - prm_names) == len(prm_names - loaded_prm_names) == 0
|
|
978
1056
|
):
|
|
979
|
-
|
|
1057
|
+
detail = self._incompatible_setting_detail(
|
|
1058
|
+
"parameter", "パラメータ",
|
|
1059
|
+
added=prm_names - loaded_prm_names,
|
|
1060
|
+
removed=loaded_prm_names - prm_names,
|
|
1061
|
+
)
|
|
1062
|
+
if detail:
|
|
1063
|
+
incompatible_details.append(detail)
|
|
980
1064
|
|
|
981
1065
|
# obj_names が増えていないか
|
|
982
1066
|
loaded_obj_names = set(
|
|
@@ -986,7 +1070,13 @@ class Records:
|
|
|
986
1070
|
)
|
|
987
1071
|
obj_names = set(self.column_manager.get_obj_names())
|
|
988
1072
|
if len(obj_names - loaded_obj_names) > 0:
|
|
989
|
-
|
|
1073
|
+
detail = self._incompatible_setting_detail(
|
|
1074
|
+
"objective", "目的関数",
|
|
1075
|
+
added=obj_names - loaded_obj_names,
|
|
1076
|
+
removed=set(),
|
|
1077
|
+
)
|
|
1078
|
+
if detail:
|
|
1079
|
+
incompatible_details.append(detail)
|
|
990
1080
|
|
|
991
1081
|
# cns_names が過不足ないか
|
|
992
1082
|
# TODO: cns の上下限は変更されてはならない。
|
|
@@ -999,7 +1089,18 @@ class Records:
|
|
|
999
1089
|
if not (
|
|
1000
1090
|
len(loaded_cns_names - cns_names) == len(cns_names - loaded_cns_names) == 0
|
|
1001
1091
|
):
|
|
1002
|
-
|
|
1092
|
+
detail = self._incompatible_setting_detail(
|
|
1093
|
+
"constraint", "拘束条件",
|
|
1094
|
+
added=cns_names - loaded_cns_names,
|
|
1095
|
+
removed=loaded_cns_names - cns_names,
|
|
1096
|
+
)
|
|
1097
|
+
if detail:
|
|
1098
|
+
incompatible_details.append(detail)
|
|
1099
|
+
|
|
1100
|
+
if incompatible_details:
|
|
1101
|
+
raise RuntimeError(
|
|
1102
|
+
self._incompatible_setting_message(incompatible_details)
|
|
1103
|
+
)
|
|
1003
1104
|
|
|
1004
1105
|
def reinitialize_record_with_loaded_data(
|
|
1005
1106
|
self, column_order_mode: str = ColumnOrderMode.per_category
|
|
@@ -1126,7 +1227,7 @@ class Records:
|
|
|
1126
1227
|
self.df_wrapper.set_df(df)
|
|
1127
1228
|
|
|
1128
1229
|
def remove_nan_columns(
|
|
1129
|
-
self, df, meta_columns, columns_to_keep: str |
|
|
1230
|
+
self, df, meta_columns, columns_to_keep: set[str] | None = None
|
|
1130
1231
|
) -> tuple[pd.DataFrame, tuple[str]]:
|
|
1131
1232
|
"""
|
|
1132
1233
|
|
|
@@ -1134,6 +1235,7 @@ class Records:
|
|
|
1134
1235
|
df:
|
|
1135
1236
|
meta_columns:
|
|
1136
1237
|
columns_to_keep: Allowing these columns to all NaN values.
|
|
1238
|
+
If None, use self.column_manager.columns_to_keep_even_if_nan().
|
|
1137
1239
|
|
|
1138
1240
|
Returns:
|
|
1139
1241
|
Removed DataFrame and corresponding meta_columns.
|
|
@@ -244,6 +244,16 @@ class AbstractFEMInterface:
|
|
|
244
244
|
def _get_additional_data(self) -> dict:
|
|
245
245
|
return dict()
|
|
246
246
|
|
|
247
|
+
# name
|
|
248
|
+
@property
|
|
249
|
+
def name(self) -> str:
|
|
250
|
+
if hasattr(self, '_name'):
|
|
251
|
+
return self._name
|
|
252
|
+
return self.__class__.__name__
|
|
253
|
+
|
|
254
|
+
@name.setter
|
|
255
|
+
def name(self, value: str):
|
|
256
|
+
self._name = value
|
|
247
257
|
|
|
248
258
|
class COMInterface(AbstractFEMInterface):
|
|
249
259
|
|
{pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_excel_interface/excel_interface.py
RENAMED
|
@@ -662,7 +662,6 @@ class ExcelInterface(COMInterface):
|
|
|
662
662
|
upper_bound=ub,
|
|
663
663
|
step=step,
|
|
664
664
|
fix=not use,
|
|
665
|
-
supress_duplicated_name_check=True,
|
|
666
665
|
)
|
|
667
666
|
|
|
668
667
|
elif kind == 'Categorical':
|
|
@@ -675,7 +674,6 @@ class ExcelInterface(COMInterface):
|
|
|
675
674
|
initial_value=value,
|
|
676
675
|
choices=choices,
|
|
677
676
|
fix=not use,
|
|
678
|
-
supress_duplicated_name_check=True,
|
|
679
677
|
)
|
|
680
678
|
|
|
681
679
|
else:
|
|
@@ -722,7 +720,6 @@ class ExcelInterface(COMInterface):
|
|
|
722
720
|
direction=direction,
|
|
723
721
|
fun=_ScapeGoatObjective(),
|
|
724
722
|
kwargs=dict(name=name),
|
|
725
|
-
supress_duplicated_name_check=True,
|
|
726
723
|
)
|
|
727
724
|
|
|
728
725
|
def load_constraints(self, opt: OptimizationDataPerFEM, raise_if_no_keyword=False):
|
|
@@ -784,7 +781,6 @@ class ExcelInterface(COMInterface):
|
|
|
784
781
|
fun=_ScapeGoatObjective(),
|
|
785
782
|
kwargs=dict(name=name),
|
|
786
783
|
using_fem=not calc_before_solve,
|
|
787
|
-
supress_duplicated_name_check=True,
|
|
788
784
|
)
|
|
789
785
|
|
|
790
786
|
def objective_from_excel(self, _, name: str):
|
{pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/_femtet_parametric.py
RENAMED
|
@@ -223,7 +223,6 @@ def add_parametric_results_as_objectives(opt, Femtet, indexes, directions) -> bo
|
|
|
223
223
|
# objective value function
|
|
224
224
|
opt.add_objective(
|
|
225
225
|
name=name, fun=_parametric_objective, direction=direction, args=(i,),
|
|
226
|
-
supress_duplicated_name_check=True,
|
|
227
226
|
)
|
|
228
227
|
return True # ここまで来たら成功
|
|
229
228
|
|
|
@@ -244,7 +243,7 @@ def _parametric_objective(Femtet, parametric_result_index):
|
|
|
244
243
|
return dll.GetPrmResult(parametric_result_index)
|
|
245
244
|
|
|
246
245
|
|
|
247
|
-
def solve_via_parametric_dll(Femtet) -> bool:
|
|
246
|
+
def solve_via_parametric_dll(Femtet, clear_sweep_table: bool = True) -> bool:
|
|
248
247
|
csv_processor = get_csv_processor(Femtet)
|
|
249
248
|
|
|
250
249
|
# remove previous csv if exists
|
|
@@ -256,11 +255,12 @@ def solve_via_parametric_dll(Femtet) -> bool:
|
|
|
256
255
|
dll = _get_dll_with_set_femtet(Femtet)
|
|
257
256
|
|
|
258
257
|
# reset existing sweep table
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
258
|
+
if clear_sweep_table:
|
|
259
|
+
dll.ClearPrmSweepTable.restype = ctypes.c_bool
|
|
260
|
+
succeed = dll.ClearPrmSweepTable()
|
|
261
|
+
if not succeed:
|
|
262
|
+
logger.error('Failed to remove existing sweep table!') # 通常ありえないので error
|
|
263
|
+
return False
|
|
264
264
|
|
|
265
265
|
# solve
|
|
266
266
|
dll.PrmCalcExecute.restype = ctypes.c_bool
|
{pyfemtet-1.8.3 → pyfemtet-1.9.1}/pyfemtet/opt/interface/_femtet_interface/femtet_interface.py
RENAMED
|
@@ -174,6 +174,7 @@ class FemtetInterface(COMInterface):
|
|
|
174
174
|
self._warn_if_undefined_variable = True
|
|
175
175
|
self.api_response_warning_time = 10 # mesh, solve, re-execute を除くマクロ実行警告時間
|
|
176
176
|
self.save_screenshot: Literal["result", "model", "none"] = "model"
|
|
177
|
+
self._clear_parametric_sweep_table: bool = True
|
|
177
178
|
|
|
178
179
|
# connect to Femtet
|
|
179
180
|
self._connect_and_open_femtet()
|
|
@@ -185,6 +186,17 @@ class FemtetInterface(COMInterface):
|
|
|
185
186
|
|
|
186
187
|
# ===== system =====
|
|
187
188
|
|
|
189
|
+
@property
|
|
190
|
+
def name(self) -> str:
|
|
191
|
+
name = ""
|
|
192
|
+
if self.femprj_path is not None:
|
|
193
|
+
name += os.path.basename(self.femprj_path)
|
|
194
|
+
if self.model_name is not None:
|
|
195
|
+
name += f' - {self.model_name}'
|
|
196
|
+
if name == "":
|
|
197
|
+
name = super().name
|
|
198
|
+
return name
|
|
199
|
+
|
|
188
200
|
@property
|
|
189
201
|
def object_pass_to_fun(self):
|
|
190
202
|
"""The object pass to the first argument of user-defined objective functions.
|
|
@@ -1000,7 +1012,7 @@ class FemtetInterface(COMInterface):
|
|
|
1000
1012
|
if_error=SolveError,
|
|
1001
1013
|
error_message=Msg.ERR_PARAMETRIC_SOLVE_FAILED,
|
|
1002
1014
|
is_Gaudi_method=True,
|
|
1003
|
-
args=(self.Femtet,),
|
|
1015
|
+
args=(self.Femtet, self._clear_parametric_sweep_table),
|
|
1004
1016
|
)
|
|
1005
1017
|
|
|
1006
1018
|
# parametric analysis の場合
|
|
@@ -122,7 +122,7 @@ class AbstractSurrogateModelInterfaceBase(AbstractFEMInterface):
|
|
|
122
122
|
def dummy(*args, **kwargs):
|
|
123
123
|
assert False
|
|
124
124
|
|
|
125
|
-
ctx.add_objective(obj_name, dummy, direction
|
|
125
|
+
ctx.add_objective(obj_name, dummy, direction)
|
|
126
126
|
|
|
127
127
|
# ctx の目的関数のうち train に含まれるものを差し替え
|
|
128
128
|
# directions の目的変数名を validation しているので漏れはないはず
|