pyfemtet 0.5.1__tar.gz → 0.5.2__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.

Potentially problematic release.


This version of pyfemtet might be problematic. Click here for more details.

Files changed (115) hide show
  1. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/PKG-INFO +3 -3
  2. pyfemtet-0.5.2/pyfemtet/__init__.py +1 -0
  3. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_femopt.py +12 -3
  4. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_femopt_core.py +73 -23
  5. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py +12 -2
  6. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyproject.toml +6 -5
  7. pyfemtet-0.5.1/pyfemtet/__init__.py +0 -1
  8. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/LICENSE +0 -0
  9. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/README.md +0 -0
  10. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/core.py +0 -0
  11. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/dispatch_extensions.py +0 -0
  12. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/logger.py +0 -0
  13. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/1. make_pot.bat +0 -0
  14. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/2. make_mo.bat +0 -0
  15. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/__init__.py +0 -0
  16. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/babel.cfg +0 -0
  17. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo +0 -0
  18. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/locales/ja/LC_MESSAGES/messages.po +0 -0
  19. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/locales/messages.pot +0 -0
  20. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/message/messages.py +0 -0
  21. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/__init__.py +0 -0
  22. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_test_utils/__init__.py +0 -0
  23. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_test_utils/control_femtet.py +0 -0
  24. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_test_utils/hyper_sphere.py +0 -0
  25. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/_test_utils/record_history.py +0 -0
  26. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/__init__.py +0 -0
  27. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_base.py +0 -0
  28. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet.py +0 -0
  29. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet_parametric.py +0 -0
  30. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet_with_nx/__init__.py +0 -0
  31. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet_with_nx/_interface.py +0 -0
  32. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet_with_nx/update_model.py +0 -0
  33. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/interface/_femtet_with_sldworks.py +0 -0
  34. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/__init__.py +0 -0
  35. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/_base.py +0 -0
  36. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/_optuna.py +0 -0
  37. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/_scipy.py +0 -0
  38. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/optimizer/_scipy_scalar.py +0 -0
  39. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/parameter.py +0 -0
  40. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/prediction/__init__.py +0 -0
  41. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/prediction/base.py +0 -0
  42. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/prediction/single_task_gp.py +0 -0
  43. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/.gitignore +0 -0
  44. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj +0 -0
  45. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/ParametricIF.py +0 -0
  46. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/ParametricIF_test_result.reccsv +0 -0
  47. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.femprj +0 -0
  48. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.prt +0 -0
  49. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.py +0 -0
  50. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_NX_test_result.reccsv +0 -0
  51. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
  52. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.femprj +0 -0
  53. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.py +0 -0
  54. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/cad_ex01_SW_test_result.reccsv +0 -0
  55. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/constrained_pipe.femprj +0 -0
  56. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/constrained_pipe.py +0 -0
  57. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/constrained_pipe_test_result.reccsv +0 -0
  58. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.femprj +0 -0
  59. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.py +0 -0
  60. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric_test_result.reccsv +0 -0
  61. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.femprj +0 -0
  62. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.py +0 -0
  63. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric_test_result.reccsv +0 -0
  64. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.femprj +0 -0
  65. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.py +0 -0
  66. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -0
  67. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.femprj +0 -0
  68. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.py +0 -0
  69. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_parallel.py +0 -0
  70. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_test_result.reccsv +0 -0
  71. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.femprj +0 -0
  72. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.py +0 -0
  73. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_parallel.py +0 -0
  74. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_test_result.reccsv +0 -0
  75. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.femprj +0 -0
  76. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.py +0 -0
  77. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
  78. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.py +0 -0
  79. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
  80. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.py +0 -0
  81. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/constrained_pipe_jp.py +0 -0
  82. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
  83. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.py +0 -0
  84. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
  85. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.py +0 -0
  86. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
  87. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.py +0 -0
  88. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
  89. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.py +0 -0
  90. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +0 -0
  91. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
  92. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py +0 -0
  93. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py +0 -0
  94. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/__init__.py +0 -0
  95. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/_create_wrapped_components.py +0 -0
  96. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/base.py +0 -0
  97. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/__init__.py +0 -0
  98. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/alert_region.py +0 -0
  99. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/control_femtet.py +0 -0
  100. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/main_figure_creator.py +0 -0
  101. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/main_graph.py +0 -0
  102. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/pm_graph.py +0 -0
  103. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/complex_components/pm_graph_creator.py +0 -0
  104. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/process_monitor/__init__.py +0 -0
  105. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/process_monitor/application.py +0 -0
  106. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/process_monitor/pages.py +0 -0
  107. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/result_viewer/.gitignore +0 -0
  108. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/result_viewer/__init__.py +0 -0
  109. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/result_viewer/application.py +0 -0
  110. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/result_viewer/pages.py +0 -0
  111. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/wrapped_components/__init__.py +0 -0
  112. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/wrapped_components/dbc.py +0 -0
  113. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/wrapped_components/dcc.py +0 -0
  114. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/wrapped_components/html.py +0 -0
  115. {pyfemtet-0.5.1 → pyfemtet-0.5.2}/pyfemtet/opt/visualization/wrapped_components/str_enum.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyfemtet
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: Design parameter optimization using Femtet.
5
5
  Home-page: https://github.com/pyfemtet/pyfemtet
6
6
  License: BSD-3-Clause
@@ -22,8 +22,8 @@ Requires-Dist: distributed (>=2023.12.1,<2024.0.0)
22
22
  Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
23
23
  Requires-Dist: numpy (>=1.26.2,<2.0.0)
24
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)
25
+ Requires-Dist: optuna (>=3.4.0,<5.0.0)
26
+ Requires-Dist: optuna-integration (>=3.6.0,<5.0.0)
27
27
  Requires-Dist: pandas (>=2.1.3,<3.0.0)
28
28
  Requires-Dist: plotly (>=5.22.0,<6.0.0)
29
29
  Requires-Dist: psutil (>=5.9.6,<6.0.0)
@@ -0,0 +1 @@
1
+ __version__ = "0.5.2"
@@ -12,7 +12,7 @@ from traceback import print_exception
12
12
  # 3rd-party
13
13
  import numpy as np
14
14
  import pandas as pd
15
- from dask.distributed import LocalCluster, Client
15
+ from dask.distributed import LocalCluster, Client, Worker
16
16
 
17
17
  # pyfemtet relative
18
18
  from pyfemtet.opt.interface import FEMInterface, FemtetInterface
@@ -452,10 +452,16 @@ class FEMOpt:
452
452
  else:
453
453
  # ローカルクラスターを構築
454
454
  logger.info('Launching single machine cluster. This may take tens of seconds.')
455
- cluster = LocalCluster(processes=True, n_workers=n_parallel,
456
- threads_per_worker=1) # n_parallel = n_parallel - 1 + 1; main 分減らし、monitor 分増やす
455
+ cluster = LocalCluster(
456
+ processes=True,
457
+ n_workers=n_parallel, # n_parallel = n_parallel - 1 + 1; main 分減らし、monitor 分増やす
458
+ threads_per_worker=1,
459
+ worker_class=Worker,
460
+ )
461
+ logger.info('LocalCluster launched successfully.')
457
462
  self.client = Client(cluster, direct_to_workers=False)
458
463
  self.scheduler_address = self.client.scheduler.address
464
+ logger.info('Client launched successfully.')
459
465
 
460
466
  # 最適化タスクを振り分ける worker を指定
461
467
  subprocess_indices = list(range(n_parallel))[1:]
@@ -487,6 +493,7 @@ class FEMOpt:
487
493
  indexes,
488
494
  directions,
489
495
  )
496
+ logger.info('Femtet loaded successfully.')
490
497
 
491
498
  # actor の設定
492
499
  self.status = OptimizationStatus(_client)
@@ -500,6 +507,7 @@ class FEMOpt:
500
507
  _client,
501
508
  metadata,
502
509
  )
510
+ logger.info('Status Actor initialized successfully.')
503
511
 
504
512
  # launch monitor
505
513
  self.monitor_process_future = _client.submit(
@@ -516,6 +524,7 @@ class FEMOpt:
516
524
  workers=self.monitor_process_worker_name,
517
525
  allow_other_workers=False
518
526
  )
527
+ logger.info('Process monitor initialized successfully.')
519
528
 
520
529
  # fem
521
530
  self.fem._setup_before_parallel(_client)
@@ -150,9 +150,7 @@ def _remove_indent(source: str, indent: int) -> str: # returns source
150
150
  return edited_source
151
151
 
152
152
 
153
- def _check_accsess_femtet_objects(fun, target: str = None):
154
- if target is None:
155
- target = ''
153
+ def _check_access_femtet_objects(fun, target: str = 'Femtet'):
156
154
 
157
155
  # 関数fのソースコードを取得
158
156
  source = inspect.getsource(fun)
@@ -162,36 +160,88 @@ def _check_accsess_femtet_objects(fun, target: str = None):
162
160
  # instanceメソッドなどの場合を想定してインデントを削除
163
161
  source = _remove_indent(source, _get_scope_indent(source))
164
162
  tree = ast.parse(source)
165
- except:
163
+
164
+ except Exception:
166
165
  return False # パースに失敗するからと言ってエラーにするまででもない
167
166
 
168
- # 関数定義を見つける
167
+ # if function or staticmethod, 1st argument is Femtet. Find the name.
168
+ varname_contains_femtet = '' # invalid variable name
169
169
  for node in ast.walk(tree):
170
170
  if isinstance(node, ast.FunctionDef):
171
- # Femtet という名前の引数を取得
172
- first_arg_name = 'Femtet'
173
-
174
- # 関数内の全ての属性アクセスをチェック
175
- for sub_node in ast.walk(node):
176
- if isinstance(sub_node, ast.Attribute):
177
- # Femtet に対してアクセスがあるかチェック
178
- conditions = [isinstance(sub_node.value, ast.Name)]
179
- conditions.append(sub_node.value.id == first_arg_name) # Femtet にアクセスしている
180
- if target == 'Gogh':
181
- conditions.append(sub_node.attr == 'Gogh') # Femtet.Gogh にアクセスしている
182
- if all(conditions):
183
- return True
184
-
185
- # ここまできてもなければアクセスしてない
186
- return False
171
+ all_arguments: ast.arguments = node.args
172
+
173
+ args: list[ast.arg] = all_arguments.args
174
+ # args.extend(all_arguments.posonlyargs) # 先にこっちを入れるべきかも
175
+
176
+ target_arg = args[0]
177
+
178
+ # if class method or instance method, 2nd argument is it.
179
+ # In this implementation, we cannot detect the FunctionDef is
180
+ # method or not because the part of source code is unindented and parsed.
181
+ if target_arg.arg == 'self' or target_arg.arg == 'cls':
182
+ if len(args) > 1:
183
+ target_arg = args[1]
184
+ else:
185
+ target_arg = None
186
+
187
+ if target_arg is not None:
188
+ varname_contains_femtet = target_arg.arg
189
+
190
+ # check Femtet access
191
+ if target == 'Femtet':
192
+ for node in ast.walk(tree):
193
+
194
+ # by accessing argument directory
195
+ if isinstance(node, ast.Name):
196
+ # found local variables
197
+ node: ast.Name
198
+ if node.id == varname_contains_femtet:
199
+ # found Femtet
200
+ return True
201
+
202
+ # by accessing inside method
203
+ elif isinstance(node, ast.Attribute):
204
+ # found attribute of something
205
+ node: ast.Attribute
206
+ if node.attr == 'Femtet':
207
+ # found **.Femtet.**
208
+ return True
209
+
210
+ # check Gogh access
211
+ elif target == 'Gogh':
212
+ for node in ast.walk(tree):
213
+ if isinstance(node, ast.Attribute):
214
+ if node.attr == 'Gogh':
215
+ # found **.Gogh.**
216
+ node: ast.Attribute
217
+ parent = node.value
218
+
219
+ # by accessing argument directory
220
+ if isinstance(parent, ast.Name):
221
+ # found *.Gogh.**
222
+ parent: ast.Name
223
+ if parent.id == varname_contains_femtet:
224
+ # found Femtet.Gogh.**
225
+ return True
226
+
227
+ # by accessing inside method
228
+ if isinstance(parent, ast.Attribute):
229
+ # found **.*.Gogh.**
230
+ parent: ast.Attribute
231
+ if parent.attr == 'Femtet':
232
+ # found **.Femtet.Gogh.**
233
+ return True
234
+
235
+ # ここまで来たならば target へのアクセスはおそらくない
236
+ return False
187
237
 
188
238
 
189
239
  def _is_access_gogh(fun):
190
- return _check_accsess_femtet_objects(fun, target='Gogh')
240
+ return _check_access_femtet_objects(fun, target='Gogh')
191
241
 
192
242
 
193
243
  def _is_access_femtet(fun):
194
- return _check_accsess_femtet_objects(fun)
244
+ return _check_access_femtet_objects(fun, target='Femtet')
195
245
 
196
246
 
197
247
  def is_feasible(value, lb, ub):
@@ -39,12 +39,22 @@ def do_patch(
39
39
  opt (OptunaOptimizer): OptunaOptimizer.
40
40
  """
41
41
  import optuna_integration
42
- target_fun = optuna_integration.botorch.optimize_acqf
42
+
43
+ from optuna_integration import version
44
+ if int(version.__version__.split('.')[0]) >= 4:
45
+ target_fun = optuna_integration.botorch.botorch.optimize_acqf
46
+ else:
47
+ target_fun = optuna_integration.botorch.optimize_acqf
48
+
43
49
  new_fun: callable = OptimizeReplacedACQF(target_fun)
44
50
  new_fun.set_constraints(list(constraints.values()))
45
51
  new_fun.set_study(study)
46
52
  new_fun.set_opt(opt)
47
- optuna_integration.botorch.optimize_acqf = new_fun
53
+
54
+ if int(version.__version__.split('.')[0]) >= 4:
55
+ optuna_integration.botorch.botorch.optimize_acqf = new_fun
56
+ else:
57
+ optuna_integration.botorch.optimize_acqf = new_fun
48
58
 
49
59
 
50
60
  class GeneralFunctionWithForwardDifference(torch.autograd.Function):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pyfemtet"
3
- version = "0.5.1" # ignored by versioning plugin
3
+ version = "0.5.2" # ignored by versioning plugin
4
4
  description = "Design parameter optimization using Femtet."
5
5
  authors = ["kazuma.naito <kazuma.naito@murata.com>"]
6
6
  readme = "README.md"
@@ -29,8 +29,8 @@ numpy = ">=1.26.2, <2.0.0"
29
29
  pandas = "^2.1.3"
30
30
  openpyxl = "^3.1.2"
31
31
  scipy = "^1.11.4"
32
- optuna = "^3.4.0"
33
- optuna-integration = "^3.6.0"
32
+ optuna = ">=3.4.0, <5.0.0"
33
+ optuna-integration = ">=3.6.0, <5.0.0"
34
34
  botorch = "==0.9.5"
35
35
  torch = "~2.3.0"
36
36
 
@@ -42,8 +42,9 @@ sphinx = "==7.2.6"
42
42
  myst-parser = "==2.0.0"
43
43
  sphinx-rtd-theme = "==2.0.0"
44
44
  sphinx-autobuild = "==2021.3.14"
45
- sphinx-design = "^0.5.0"
46
- sphinx-intl = "^2.2.0"
45
+ sphinx-design = "==0.5.0"
46
+ sphinx-intl = "==2.2.0"
47
+ argostranslate = "^1.9.6"
47
48
  # debug
48
49
  bokeh = "^3.3.3"
49
50
  # test
@@ -1 +0,0 @@
1
- __version__ = "0.5.1"
File without changes
File without changes
File without changes
File without changes