pyfemtet 0.4.24__py3-none-any.whl → 0.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (113) hide show
  1. pyfemtet/__init__.py +1 -1
  2. pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo +0 -0
  3. pyfemtet/message/locales/ja/LC_MESSAGES/messages.po +114 -62
  4. pyfemtet/message/locales/messages.pot +114 -62
  5. pyfemtet/message/messages.py +6 -2
  6. pyfemtet/opt/__init__.py +4 -2
  7. pyfemtet/opt/_femopt.py +27 -46
  8. pyfemtet/opt/_femopt_core.py +50 -33
  9. pyfemtet/opt/_test_utils/__init__.py +0 -0
  10. pyfemtet/opt/_test_utils/control_femtet.py +45 -0
  11. pyfemtet/opt/_test_utils/hyper_sphere.py +24 -0
  12. pyfemtet/opt/_test_utils/record_history.py +72 -0
  13. pyfemtet/opt/interface/_femtet.py +39 -1
  14. pyfemtet/opt/optimizer/__init__.py +12 -0
  15. pyfemtet/opt/{opt → optimizer}/_base.py +30 -9
  16. pyfemtet/opt/{opt → optimizer}/_optuna.py +15 -34
  17. pyfemtet/opt/optimizer/_optuna_botorchsampler_parameter_constraint_helper.py +331 -0
  18. pyfemtet/opt/{opt → optimizer}/_scipy.py +10 -6
  19. pyfemtet/opt/{opt → optimizer}/_scipy_scalar.py +24 -12
  20. pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric_test_result.reccsv +1 -1
  21. pyfemtet/opt/{femprj_sample → samples/femprj_sample}/her_ex40_parametric.py +10 -8
  22. pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +18 -0
  23. pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/her_ex40_parametric_jp.py +10 -8
  24. pyfemtet/opt/visualization/complex_components/main_figure_creator.py +69 -0
  25. pyfemtet/opt/visualization/complex_components/main_graph.py +299 -14
  26. pyfemtet/opt/visualization/process_monitor/pages.py +1 -1
  27. pyfemtet/opt/visualization/result_viewer/application.py +1 -1
  28. pyfemtet/opt/visualization/result_viewer/pages.py +9 -9
  29. {pyfemtet-0.4.24.dist-info → pyfemtet-0.5.0.dist-info}/METADATA +1 -1
  30. pyfemtet-0.5.0.dist-info/RECORD +112 -0
  31. pyfemtet/_test_util.py +0 -135
  32. pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -18
  33. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14.pdt +0 -0
  34. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.jpg +0 -0
  35. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.pdt +0 -0
  36. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.jpg +0 -0
  37. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.pdt +0 -0
  38. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.jpg +0 -0
  39. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.pdt +0 -0
  40. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.jpg +0 -0
  41. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.pdt +0 -0
  42. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.jpg +0 -0
  43. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.pdt +0 -0
  44. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.jpg +0 -0
  45. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.pdt +0 -0
  46. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.jpg +0 -0
  47. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.pdt +0 -0
  48. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.jpg +0 -0
  49. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.pdt +0 -0
  50. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.jpg +0 -0
  51. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.pdt +0 -0
  52. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.jpg +0 -0
  53. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.pdt +0 -0
  54. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.jpg +0 -0
  55. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.pdt +0 -0
  56. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.jpg +0 -0
  57. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.pdt +0 -0
  58. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.jpg +0 -0
  59. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.pdt +0 -0
  60. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.jpg +0 -0
  61. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.pdt +0 -0
  62. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.jpg +0 -0
  63. pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.pdt +0 -0
  64. pyfemtet/opt/opt/__init__.py +0 -12
  65. pyfemtet/opt/opt/_optuna_botorch_helper.py +0 -209
  66. pyfemtet-0.4.24.dist-info/RECORD +0 -140
  67. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/.gitignore +0 -0
  68. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF - True.femprj +0 -0
  69. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF.femprj +0 -0
  70. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF.py +0 -0
  71. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/ParametricIF_test_result.reccsv +0 -0
  72. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.femprj +0 -0
  73. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.prt +0 -0
  74. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX.py +0 -0
  75. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_NX_test_result.reccsv +0 -0
  76. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.SLDPRT +0 -0
  77. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.femprj +0 -0
  78. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW.py +0 -0
  79. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/cad_ex01_SW_test_result.reccsv +0 -0
  80. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric.femprj +0 -0
  81. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gal_ex58_parametric.py +0 -0
  82. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric.femprj +0 -0
  83. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric.py +0 -0
  84. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/gau_ex08_parametric_test_result.reccsv +0 -0
  85. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/her_ex40_parametric.femprj +0 -0
  86. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric.femprj +0 -0
  87. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric.py +0 -0
  88. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric_parallel.py +0 -0
  89. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/paswat_ex1_parametric_test_result.reccsv +0 -0
  90. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric.femprj +0 -0
  91. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric.py +0 -0
  92. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric_parallel.py +0 -0
  93. /pyfemtet/opt/{femprj_sample → samples/femprj_sample}/wat_ex14_parametric_test_result.reccsv +0 -0
  94. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/ParametricIF_jp.femprj +0 -0
  95. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/ParametricIF_jp.py +0 -0
  96. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_NX_jp.femprj +0 -0
  97. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_NX_jp.py +0 -0
  98. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_SW_jp.femprj +0 -0
  99. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/cad_ex01_SW_jp.py +0 -0
  100. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gal_ex58_parametric_jp.femprj +0 -0
  101. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gal_ex58_parametric_jp.py +0 -0
  102. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gau_ex08_parametric_jp.femprj +0 -0
  103. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/gau_ex08_parametric_jp.py +0 -0
  104. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/her_ex40_parametric_jp.femprj +0 -0
  105. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_jp.femprj +0 -0
  106. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_jp.py +0 -0
  107. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/paswat_ex1_parametric_parallel_jp.py +0 -0
  108. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_jp.femprj +0 -0
  109. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_jp.py +0 -0
  110. /pyfemtet/opt/{femprj_sample_jp → samples/femprj_sample_jp}/wat_ex14_parametric_parallel_jp.py +0 -0
  111. {pyfemtet-0.4.24.dist-info → pyfemtet-0.5.0.dist-info}/LICENSE +0 -0
  112. {pyfemtet-0.4.24.dist-info → pyfemtet-0.5.0.dist-info}/WHEEL +0 -0
  113. {pyfemtet-0.4.24.dist-info → pyfemtet-0.5.0.dist-info}/entry_points.txt +0 -0
pyfemtet/_test_util.py DELETED
@@ -1,135 +0,0 @@
1
- import os
2
- import csv
3
- from shutil import copy
4
- from time import sleep
5
- from subprocess import run
6
- from multiprocessing import Process
7
- from glob import glob
8
-
9
- import numpy as np
10
- import pandas as pd
11
- from tqdm import tqdm
12
- from win32com.client import Dispatch
13
- from femtetutils import util
14
-
15
- from pyfemtet.opt import FEMOpt
16
-
17
-
18
- class SuperSphere:
19
- def __init__(self, n):
20
- self.n = n
21
-
22
- def x(self, radius, *angles):
23
- assert len(angles) == self.n - 1, 'invalid angles length'
24
-
25
- out = []
26
-
27
- for i in range(self.n):
28
- if i == 0:
29
- out.append(radius * np.cos(angles[0]))
30
- elif i < self.n - 1:
31
- product = radius
32
- for j in range(i):
33
- product *= np.sin(angles[j])
34
- product *= np.cos(angles[i])
35
- out.append(product)
36
- else:
37
- product = radius
38
- for j in range(i):
39
- product *= np.sin(angles[j])
40
- out.append(product)
41
- return out
42
-
43
-
44
- def _open_femprj(femprj_path):
45
- Femtet = Dispatch('FemtetMacro.Femtet')
46
- for _ in tqdm(range(5), 'wait for dispatch Femtet'):
47
- sleep(1)
48
- Femtet.LoadProject(femprj_path, True)
49
-
50
-
51
- def launch_femtet(femprj_path):
52
- # launch Femtet externally
53
- print('Launching Femtet...')
54
- util.execute_femtet()
55
- pid = util.get_last_executed_femtet_process_id()
56
- for _ in tqdm(range(8), 'Wait for launch Femtet.'):
57
- sleep(1)
58
-
59
- # open femprj in a different process
60
- # to release Femtet for sample program
61
- print('Opening femprj...')
62
- if femprj_path:
63
- p = Process(
64
- target=_open_femprj,
65
- args=(femprj_path,),
66
- )
67
- p.start()
68
- p.join()
69
-
70
-
71
- def taskkill_femtet():
72
- for _ in tqdm(range(3), 'wait before taskkill Femtet'):
73
- sleep(1)
74
- run(['taskkill', '/f', '/im', 'Femtet.exe'])
75
- for _ in tqdm(range(3), 'wait after taskkill Femtet'):
76
- sleep(1)
77
-
78
-
79
- def find_latest_csv(dir_path=None):
80
- if dir_path is None: dir_path = '.'
81
- target = os.path.join(dir_path, '*.csv')
82
- files = [(f, os.path.getmtime(f)) for f in glob(target)]
83
- out = sorted(files, key=lambda files: files[1])[-1]
84
- return os.path.abspath(out[0])
85
-
86
-
87
- def py_to_reccsv(py_path, suffix=''):
88
- dst_csv_path = py_path + suffix
89
- dst_csv_path = dst_csv_path.replace(f'.py{suffix}', f'{suffix}.reccsv')
90
- return dst_csv_path
91
-
92
-
93
- def record_result(src: FEMOpt or str, py_path, suffix=''):
94
- """Record the result csv for `is_equal_result`."""
95
-
96
- if isinstance(src, FEMOpt): # get df directory
97
- src_csv_path = src.history_path
98
- else:
99
- src_csv_path = os.path.abspath(src)
100
-
101
- dst_csv_path = py_to_reccsv(py_path, suffix)
102
- copy(src_csv_path, dst_csv_path)
103
-
104
-
105
- def _get_obj_from_csv(csv_path, encoding='cp932'):
106
- df = pd.read_csv(csv_path, encoding=encoding, header=2)
107
- columns = df.columns
108
- with open(csv_path, mode='r', encoding=encoding, newline='\n') as f:
109
- reader = csv.reader(f, delimiter=',')
110
- meta = reader.__next__()
111
- obj_indices = np.where(np.array(meta) == 'obj')[0]
112
- out = df.iloc[:, obj_indices]
113
- return out, columns
114
-
115
-
116
- def is_equal_result(ref_path, dif_path, log_path):
117
- """Check the equality of two result csv files."""
118
- ref_df, ref_columns = _get_obj_from_csv(ref_path)
119
- dif_df, dif_columns = _get_obj_from_csv(dif_path)
120
-
121
- with open(log_path, 'a', newline='\n') as f:
122
- f.write('\n\n===== 結果の分析 =====\n\n')
123
- f.write(f' \tref\tdif\n')
124
- f.write(f'---------------------\n')
125
- f.write(f'len(col)\t{len(ref_columns)}\t{len(dif_columns)}\n')
126
- f.write(f'len(df) \t{len(ref_df)}\t{len(dif_df)}\n')
127
- try:
128
- difference = (np.abs(ref_df.values - dif_df.values) / np.abs(dif_df.values)).mean()
129
- f.write(f'diff \t{int(difference*100)}%\n')
130
- except Exception:
131
- f.write(f'diff \tcannot calc\n')
132
-
133
- assert len(ref_columns) == len(dif_columns), '結果 csv の column 数が異なります。'
134
- assert len(ref_df) == len(dif_df), '結果 csv の row 数が異なります。'
135
- assert difference <= 0.05, '前回の結果との平均差異が 5% を超えています。'
@@ -1,18 +0,0 @@
1
- "{""femprj_path"": null, ""model_name"": ""Harm""}",prm,prm_lb,prm_ub,prm,prm_lb,prm_ub,prm,prm_lb,prm_ub,obj,obj_direction,,cns,cns_lb,cns_ub,cns,cns_lb,cns_ub,,,,
2
- ,,,,,,,,,,,,,,,,,,,,,,
3
- trial,antenna_radius,antenna_radius_lower_bound,antenna_radius_upper_bound,substrate_w,substrate_w_lower_bound,substrate_w_upper_bound,port_x,port_x_lower_bound,port_x_upper_bound,first resonant frequency(Hz),first resonant frequency(Hz)_direction,non_domi,antenna and substrate clearance,antenna and substrate clearance_lower_bound,antenna and substrate clearance_upper_bound,antenna and port clearance,antenna and port clearance_lower_bound,antenna and port clearance_upper_bound,feasible,hypervolume,message,time
4
- 1,10.0,5.0,20.0,50.0,40.0,60.0,5.0,1.0,20.0,4289000000.0,3000000000.0,False,15.0,1,,5.0,1,,True,-1.0,initial,2024-07-24 10:30:06.939869
5
- 2,13.979877262955549,5.0,20.0,43.12037280884873,40.0,60.0,3.96389588638785,1.0,20.0,3050000000.0,3000000000.0,False,7.580309099999999,1,,10.01598141,1,,True,-1.0,,2024-07-24 10:30:19.275568
6
- 3,17.48663961200633,5.0,20.0,44.246782213565524,40.0,60.0,4.4546743769349115,1.0,20.0,2460000000.0,3000000000.0,False,4.636751499999999,1,,13.03196522,1,,True,-1.0,,2024-07-24 10:30:35.798531
7
- 4,11.841049763255539,5.0,20.0,55.70351922786027,40.0,60.0,4.793801861008835,1.0,20.0,3581000000.0,3000000000.0,False,16.0107098,1,,7.04724794,1,,True,-1.0,,2024-07-24 10:30:51.243382
8
- 5,12.713516576204174,5.0,20.0,51.84829137724085,40.0,60.0,1.8825578416799567,1.0,20.0,2932000000.0,3000000000.0,False,13.2106291,1,,10.83095876,1,,True,-1.0,,2024-07-24 10:31:01.335664
9
- 6,14.113172778521575,5.0,20.0,43.41048247374583,40.0,60.0,2.235980266720311,1.0,20.0,2991000000.0,3000000000.0,True,7.592068450000001,1,,11.877192529999999,1,,True,-1.0,,2024-07-24 10:31:14.045279
10
- 7,19.233283058799998,5.0,20.0,59.31264066149119,40.0,60.0,16.35954961421276,1.0,20.0,2283000000.0,3000000000.0,False,10.42303725,1,,2.8737335,1,,True,-1.0,,2024-07-24 10:31:40.560920
11
- 8,11.60228740609402,5.0,20.0,42.44076469689558,40.0,60.0,10.408361292114133,1.0,20.0,3758000000.0,3000000000.0,False,9.618094950000001,1,,1.1939261000000005,1,,True,-1.0,,2024-07-24 10:31:57.496815
12
- 9,14.93783426530973,5.0,20.0,46.23422152178822,40.0,60.0,10.881292402378406,1.0,20.0,2932000000.0,3000000000.0,False,8.179276449999998,1,,4.056541900000001,1,,True,-1.0,,2024-07-24 10:32:18.322964
13
- 10,13.968499682166277,5.0,20.0,58.437484700462335,40.0,60.0,2.6813575389864703,1.0,20.0,2991000000.0,3000000000.0,True,15.250242649999999,1,,11.28714216,1,,True,-1.0,,2024-07-24 10:32:32.049325
14
- 11,14.058429837987106,5.0,20.0,51.01029232478569,40.0,60.0,1.738898798219626,1.0,20.0,2814000000.0,3000000000.0,False,11.44671635,1,,12.319531000000001,1,,True,-1.0,,2024-07-24 10:32:44.208324
15
- 12,14.260807151712159,5.0,20.0,57.66392990209854,40.0,60.0,8.792627280104398,1.0,20.0,3050000000.0,3000000000.0,False,14.57115775,1,,5.468179920000001,1,,True,-1.0,,2024-07-24 10:33:18.982843
16
- 13,13.508818923150182,5.0,20.0,59.99999999999999,40.0,60.0,4.887635502556277,1.0,20.0,3109000000.0,3000000000.0,False,16.4911811,1,,8.6211834,1,,True,-1.0,,2024-07-24 10:33:35.259275
17
- 14,14.885966644225132,5.0,20.0,40.0,40.0,60.0,4.993357418116345,1.0,20.0,2814000000.0,3000000000.0,False,5.1140334,1,,9.892609180000001,1,,True,-1.0,,2024-07-24 10:34:06.248951
18
- 15,19.999999999999996,5.0,20.0,59.99999999999999,40.0,60.0,1.0,1.0,20.0,4525000000.0,3000000000.0,False,10.0,1,,19.0,1,,True,-1.0,,2024-07-24 10:34:37.774576
@@ -1,12 +0,0 @@
1
- from pyfemtet.opt.opt._base import AbstractOptimizer, logger, OptimizationMethodChecker
2
- from pyfemtet.opt.opt._optuna import OptunaOptimizer
3
- from pyfemtet.opt.opt._scipy import ScipyOptimizer
4
- from pyfemtet.opt.opt._scipy_scalar import ScipyScalarOptimizer
5
-
6
- __all__ = [
7
- 'ScipyScalarOptimizer',
8
- 'ScipyOptimizer',
9
- 'OptunaOptimizer',
10
- 'AbstractOptimizer',
11
- 'logger',
12
- ]
@@ -1,209 +0,0 @@
1
- from typing import Optional, List, Tuple, Callable
2
- from functools import partial
3
- import inspect
4
-
5
- import numpy as np
6
- import optuna.study
7
- import torch
8
- from torch import Tensor
9
- from botorch.optim.initializers import gen_batch_initial_conditions
10
- from botorch.utils.transforms import unnormalize
11
- from optuna.study import Study
12
- from botorch.acquisition import AcquisitionFunction
13
-
14
- from pyfemtet.opt.opt import AbstractOptimizer
15
- from pyfemtet.opt.parameter import ExpressionEvaluator
16
-
17
- # module to monkey patch
18
- import optuna_integration
19
-
20
-
21
- # モンキーパッチを実行するため、optimize_acqf の引数を MonkyPatch クラスで定義し optuna に上書きされないようにするためのクラス
22
- class NonOverwritablePartial(partial):
23
- def __call__(self, /, *args, **keywords):
24
- stored_kwargs = self.keywords
25
- keywords.update(stored_kwargs)
26
- return self.func(*self.args, *args, **keywords)
27
-
28
-
29
- # prm_name を引数に取る関数を optimize_acqf の nonlinear_inequality_constraints に入れられる形に変換する関数
30
- class ConvertedConstraintFunction:
31
- def __init__(self, fun, prm_args, kwargs, variables: ExpressionEvaluator, study: optuna.study.Study):
32
- self.fun = fun
33
- self.prm_args = prm_args
34
- self.kwargs = kwargs
35
- self.variables = variables
36
- self.study = study
37
-
38
- self.bounds = None
39
- self.prm_name_seq = None
40
-
41
- # fun の prm として使う引数が指定されていなければ fun の引数を取得
42
- if self.prm_args is None:
43
- signature = inspect.signature(fun)
44
- prm_inputs = set([a.name for a in signature.parameters.values()])
45
- else:
46
- prm_inputs = set(self.prm_args)
47
-
48
- # 引数の set から kwargs の key を削除
49
- self.prm_arg_names = prm_inputs - set(kwargs.keys())
50
-
51
- # 変な引数が残っていないか確認
52
- assert all([(arg in variables.get_parameter_names()) for arg in self.prm_arg_names])
53
-
54
- def __call__(self, x: Tensor or np.ndarray):
55
- # x: all of normalized parameters whose sequence is sorted by optuna
56
-
57
- if not isinstance(x, Tensor):
58
- x = torch.tensor(np.array(x)).double()
59
-
60
- x = unnormalize(x, self.bounds)
61
-
62
- # fun で使うパラメータのみ value を取得
63
- kwargs = self.kwargs
64
- kwargs.update(
65
- {k: v for k, v in zip(self.prm_name_seq, x) if k in self.prm_arg_names}
66
- )
67
-
68
- return self.fun(**kwargs)
69
-
70
-
71
- # 与えられた獲得関数に拘束を満たさない場合 0 を返すよう加工された獲得関数
72
- class AcqWithConstraint(AcquisitionFunction):
73
-
74
- # noinspection PyAttributeOutsideInit
75
- def set(self, _org_acq_function: AcquisitionFunction, nonlinear_constraints):
76
- self._org_acq_function = _org_acq_function
77
- self._nonlinear_constraints = nonlinear_constraints
78
-
79
- def forward(self, X: Tensor) -> Tensor:
80
- base = self._org_acq_function.forward(X)
81
-
82
- is_feasible = all([cons(X[0][0]) > 0 for cons, _ in self._nonlinear_constraints])
83
- if is_feasible:
84
- return base
85
- else:
86
- # penalty = torch.Tensor(size=base.shape)
87
- # penalty = torch.fill(penalty, -1e10)
88
- # return base * penalty
89
- return base * 0.
90
-
91
-
92
- def remove_infeasible(_ic_batch, nonlinear_constraints):
93
- # infeasible なものを削除
94
- remove_indices = []
95
- for i, ic in enumerate(_ic_batch): # ic: 1 x len(params) tensor
96
- # cons: Callable[["Tensor"], "Tensor"]
97
- is_feasible = all([cons(ic[0]) > 0 for cons, _ in nonlinear_constraints])
98
- if not is_feasible:
99
- # ic_batch[i] = torch.nan # これで無視にならない
100
- remove_indices.append(i)
101
- for i in remove_indices[::-1]:
102
- _ic_batch = torch.cat((_ic_batch[:i], _ic_batch[i + 1:]))
103
- return _ic_batch
104
-
105
-
106
- class OptunaBotorchWithParameterConstraintMonkeyPatch:
107
-
108
- def __init__(self, study: Study, opt: AbstractOptimizer):
109
- self.num_restarts: int = 20
110
- self.raw_samples_additional: int = 512
111
- self.eta: float = 2.0
112
- self.study = study
113
- self.opt = opt
114
- self.nonlinear_inequality_constraints = []
115
- self.additional_kwargs = dict()
116
- self.bounds = None
117
- self.prm_name_seq = None
118
-
119
- def add_nonlinear_constraint(self, fun, prm_args, kwargs):
120
- f = ConvertedConstraintFunction(
121
- fun,
122
- prm_args,
123
- kwargs,
124
- self.opt.variables,
125
- self.study,
126
- )
127
-
128
- # 初期化
129
- self.nonlinear_inequality_constraints = self.nonlinear_inequality_constraints or []
130
-
131
- # 自身に追加
132
- self.nonlinear_inequality_constraints.append((f, True))
133
-
134
- # optimize_acqf() に渡す引数に追加
135
- self.additional_kwargs.update(
136
- nonlinear_inequality_constraints=self.nonlinear_inequality_constraints
137
- )
138
-
139
- def _detect_prm_seq_if_needed(self):
140
- # study から distribution の情報を復元する。
141
- if self.bounds is None or self.prm_name_seq is None:
142
- from optuna._transform import _transform_search_space
143
- # sample_relative の後に呼ばれているから最後の trial は search_space を持つはず
144
- search_space: dict = self.study.sampler.infer_relative_search_space(self.study, self.study.trials[-1])
145
- self.bounds = _transform_search_space(search_space, False, False)[0].T
146
- self.prm_name_seq = list(search_space.keys())
147
-
148
- for cns in self.nonlinear_inequality_constraints:
149
- cns[0].bounds = torch.tensor(self.bounds)
150
- cns[0].prm_name_seq = self.prm_name_seq
151
-
152
- def generate_initial_conditions(self, *args, **kwargs):
153
- self._detect_prm_seq_if_needed()
154
-
155
- # acqf_function を 上書きし、拘束を満たさないならば 0 を返すようにする
156
- org_acq_function = kwargs['acq_function']
157
- new_acqf = AcqWithConstraint(None)
158
- new_acqf.set(org_acq_function, self.nonlinear_inequality_constraints)
159
- kwargs['acq_function'] = new_acqf
160
-
161
- # initial condition の提案 batch を作成
162
- # ic: `num_restarts x q x d` tensor of initial conditions.
163
- # q = 1, d = len(params)
164
- ic_batch = gen_batch_initial_conditions(*args, **kwargs)
165
-
166
- # 拘束を満たさないものを削除
167
- ic_batch = remove_infeasible(ic_batch, self.nonlinear_inequality_constraints)
168
-
169
- # 全部なくなっているならばランダムに生成
170
- if len(ic_batch) == 0:
171
- print('拘束を満たす組み合わせがなかったのでランダムサンプリングします')
172
- while len(ic_batch) == 0:
173
- size = ic_batch.shape
174
- ic_batch = torch.rand(size=[100, *size[1:]]) # 正規化された変数の組合せ
175
- ic_batch = remove_infeasible(ic_batch, self.nonlinear_inequality_constraints)
176
-
177
- return ic_batch
178
-
179
- def do_monkey_patch(self):
180
- """optuna_integration.botorch には optimize_acqf に constraints を渡す方法が用意されていないので、モンキーパッチして渡す
181
-
182
- モンキーパッチ自体は最適化実行前のどの時点で呼んでも機能するが、additional_kwargs の更新後に
183
- モンキーパッチを呼ぶ必要があるのでコンストラクタにこの処理は入れない。
184
- 各 add_constraint に入れるのはいいかも。
185
-
186
- """
187
-
188
- # === reconstruct argument ``options`` for optimize_acqf ===
189
- options = dict() # initialize
190
-
191
- # for nonlinear-constraint
192
- options.update(dict(batch_limit=1))
193
-
194
- # for gen_candidates_scipy()
195
- # use COBYLA or SLSQP only.
196
- options.update(dict(method='SLSQP'))
197
-
198
- # make partial of optimize_acqf used in optuna_integration.botorch and replace to it.
199
- original_fun = optuna_integration.botorch.optimize_acqf
200
- overwritten_fun = NonOverwritablePartial(
201
- original_fun,
202
- q=1, # for nonlinear constraints
203
- options=options,
204
- num_restarts=20, # gen_batch_initial_conditions に渡すべきで、self.generate_initial_conditions に渡される変数。
205
- raw_samples=512, # gen_batch_initial_conditions に渡すべきで、self.generate_initial_conditions に渡される変数。
206
- nonlinear_inequality_constraints=self.nonlinear_inequality_constraints,
207
- ic_generator=self.generate_initial_conditions,
208
- )
209
- optuna_integration.botorch.optimize_acqf = overwritten_fun
@@ -1,140 +0,0 @@
1
- pyfemtet/__init__.py,sha256=LCS1ryUP4e5uYaNvtTtYvsm3x-_EtvKrlSrr2OZR6DA,22
2
- pyfemtet/_test_util.py,sha256=v41jPexrQFdBCn8n5W0xirgfgWSsN-WQudnnS40PpWc,4235
3
- pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
4
- pyfemtet/dispatch_extensions.py,sha256=XVZajbjh7mb6NG4Hq8qff2TJWab75r4Hd59cIvCRsVg,16213
5
- pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
6
- pyfemtet/message/1. make_pot.bat,sha256=oS38xYsaUnQAuKwUR8hZJFgt3AKBU993fWFDSg2ROz4,570
7
- pyfemtet/message/2. make_mo.bat,sha256=nqUi3Cze7JGKkYItlch8ZG2gSbRNZiS2ltuCS7DbmG8,154
8
- pyfemtet/message/__init__.py,sha256=gE1-XX_PzHj9BbhqPaK5VcIHuv6_Tec5qlPMC3IRiBg,100
9
- pyfemtet/message/babel.cfg,sha256=rlvsm_EjDU2ki-OLVPG3toWspVuVA0JFAFvFp2U-By4,72
10
- pyfemtet/message/locales/ja/LC_MESSAGES/messages.mo,sha256=VbUncnHf3ztDF3WqaoNd4AcGqpYKLMEKc1LL5P4yuoQ,16965
11
- pyfemtet/message/locales/ja/LC_MESSAGES/messages.po,sha256=6UtCDxiDiRetnnSRo-l_BunYfYoIm0L-9Z8qU3r8z8Q,21723
12
- pyfemtet/message/locales/messages.pot,sha256=JWknwqPn_541aeIEbxp9Y2tqXvUcoM-vgdjeUo4C2T0,12336
13
- pyfemtet/message/messages.py,sha256=5noem1v82W0hNB-PTQq-Y3jz-VpXLUurxKcjviU_vBY,12628
14
- pyfemtet/opt/__init__.py,sha256=AJc1_d0sQ2_X4h_8FOcdmHvSPrFV_vfxlRrZTsqDZuE,612
15
- pyfemtet/opt/_femopt.py,sha256=n8wUEYSoN88wIbus9d26zl9Lqq2CkZG3LNt6aMdJreU,27229
16
- pyfemtet/opt/_femopt_core.py,sha256=6tjaepx_2qrgBk52KnjmYL7yMiJPYx3zD4Y5wX0ozXo,27417
17
- pyfemtet/opt/femprj_sample/.gitignore,sha256=hx-5Hhaf7kpHe1wvWWfJqjPfObg-zf9CTI4joNh2Hk4,28
18
- pyfemtet/opt/femprj_sample/ParametricIF - True.femprj,sha256=tCd29CUXmyJ0VH6cV0xTdjQMLBPkCk0UrFwvRbyrcYA,431415
19
- pyfemtet/opt/femprj_sample/ParametricIF.femprj,sha256=9BtDHmc3cdom0Zq33DTdZ0mDAsIUY6i8SRkkg-n7GO0,442090
20
- pyfemtet/opt/femprj_sample/ParametricIF.py,sha256=oXzchBZEbH69xacDht5HDnbZzKwapXsn6bp9qihY17Y,707
21
- pyfemtet/opt/femprj_sample/ParametricIF_test_result.reccsv,sha256=TiOAqEDMub6SCGYClBv1JvQxphDOY3iIdr_pMmGgJ9M,2859
22
- pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj,sha256=KC8JlHqHzqgyKriK911QSnQByQpRlw-SX5OSQ_GNe5M,149193
23
- pyfemtet/opt/femprj_sample/cad_ex01_NX.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
24
- pyfemtet/opt/femprj_sample/cad_ex01_NX.py,sha256=_wrpHQ6NlNJ9js0PwR3tfuxXt5fxORTa9h8BvjiWOcg,4621
25
- pyfemtet/opt/femprj_sample/cad_ex01_NX_test_result.reccsv,sha256=hFxjat32G71F3XE_UtC9zzi5HZxu0Q0MXjU9e1xVIDM,4710
26
- pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT,sha256=jjBi4aRRwZPK-4-YRKDC4eO_Ch2jwd7M7chvJlnBbZU,97158
27
- pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj,sha256=knN0bBTHm5CqExLdmxdJvPldJ6ahnQesKt974qRjWh4,126837
28
- pyfemtet/opt/femprj_sample/cad_ex01_SW.py,sha256=JoGQSwH3yJnABxyd-WJfrwMkhd1UV0yYF2L2RvMFXmc,4559
29
- pyfemtet/opt/femprj_sample/cad_ex01_SW_test_result.reccsv,sha256=NS0Zik2c1mbMdGa0hGJaRQdCD08Bltx84n9QzP5CjPo,4736
30
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj,sha256=dbanN3W2eX_ciZ0wZGqK60mc4edSVh5G2OqbbMKyFng,74898
31
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.py,sha256=RxLSXFs0SqUjlug_JZAKlkJhqJdQCY3Y3F-DtSQRtVM,2458
32
- pyfemtet/opt/femprj_sample/gal_ex58_parametric_test_result.reccsv,sha256=IcGm9f5YEACTGavoyMlAY-zUvsl-Zz-rTlSRhBVDzz8,1267
33
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj,sha256=Yb9ILeTEKx5xfJGk8IZH_DVlgkpGB33Vy9-LGIEQboY,279251
34
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.py,sha256=5KazqJ5wRbGs0dBMJslZ1eRCUWq8j3k1mqlhyB8M0g8,1929
35
- pyfemtet/opt/femprj_sample/gau_ex08_parametric_test_result.reccsv,sha256=yZ9aHthiKIBY_NMOz94Jl2dyHIH-GWMvukgHk4ZeT_o,3474
36
- pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj,sha256=LLAUDlUo1dIpRzlKPs1lvACzJQxjnWW3xAGAodYEqRM,117221
37
- pyfemtet/opt/femprj_sample/her_ex40_parametric.py,sha256=5WQ7pgYB3_-DCGg0KZuY0kPrWFkFrYc3VDRZmQpLJT8,4812
38
- pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv,sha256=UrNZP9DtjvE3wSgEVF9i4CxO26y3vPmIVF2lFpwy2Hw,3462
39
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj,sha256=z2NHFJWiuiLv_zhxjFpLpmRbYVvQ43bAMj_NLioQGsk,262283
40
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py,sha256=2oUBg2MvKuewO5Acs5FO3dkXX0QIZGRR5RRvKAb4CMk,2361
41
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py,sha256=V6XYS3RblruTi8T43lEnNl_3pgdsobknspsD_K2iEpU,2472
42
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric_test_result.reccsv,sha256=6PjbmLfwDx01Z0pywDL9eT5lfRKgZDU3r_H2SfZYaT4,3885
43
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14.pdt,sha256=WTb5gutfp0NN64AbBAa5LOPjgDYQ8ix2FFeIYSc8Tfk,3382324
44
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.jpg,sha256=N11tFxfTixrwbCJOH1lhcw4UuPCYb-9xJAwiynbN2DE,44463
45
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial1.pdt,sha256=zw7xEknDqb8eW-LFMhwgerXzwr-9blyF1iVb3c7EgkA,5526273
46
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.jpg,sha256=J_MVih-XFB51Gwy0dnBS4qyXimavtLf0_3kT_RH_-_A,42256
47
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial10.pdt,sha256=_u84XyonXuOXNsvAhhu940Uak0WeLRGOzA4FO0kJtcA,3704384
48
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.jpg,sha256=1GZkQ1sVd3EWUoNTomey-y6w1F1beHP90TRMwPdd1yE,42961
49
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial11.pdt,sha256=7NaeQ-de7fBm74qOex1sU55sEVK8ZexiXwYVy0n7Zu0,3348404
50
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.jpg,sha256=AV5aHAzJKN1S428MmcO6TNQX8p4bhnXWbjJwZVX4nOc,39907
51
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial12.pdt,sha256=iNDAnX7aIwcNql97JNGhuHoMR_bZ6Vp9woeSj_uS740,3433511
52
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.jpg,sha256=lB7kSly-vblBmlTF01q0_09qnMcga2ZUZVmaBSUNNjg,42577
53
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial13.pdt,sha256=zAwCW_dKjywSXnw5YPNsFU_xtri0wZJatKP-SAQbQPY,4139928
54
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.jpg,sha256=HhtmxvKqTouxYvGRlg29zMOUphW3xRlcOBoKkMlfzY0,41749
55
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial14.pdt,sha256=aA-Alw_e87U9g94BUpQRvXhGn_TnEvutmRT1C31JVkI,3894438
56
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.jpg,sha256=u7rUO00hCL8fZFfPTz3dlcShedMJt26Rw5xnumurOJs,42278
57
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial15.pdt,sha256=WTb5gutfp0NN64AbBAa5LOPjgDYQ8ix2FFeIYSc8Tfk,3382324
58
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.jpg,sha256=e7iH0SsvLoccjnpYftVDS3GhERC6l9DzTydGD_Zyfbo,42138
59
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial2.pdt,sha256=Hb3D8QJfrGdqEt87b-2gb0JUNgs_GUSzV9NGCqhta0I,4123659
60
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.jpg,sha256=m1RIkIXPVa-UK5YNA0HPhxQoHlx1ryN5WoazVoT6KuA,43608
61
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial3.pdt,sha256=Ie4qeII4KnvmJ5iiP563NElRDuI8wWXDON5_zYhqRfA,4617734
62
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.jpg,sha256=cboEONqtG8JsAU4LjJtMg2l-aU2kG6Uy-RuC1AGMDK0,41595
63
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial4.pdt,sha256=9XSpu9nR-IhSDvJXLmVMq2xIgKW4PUIThFrD4yXUdUY,2937145
64
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.jpg,sha256=4SsRPthYsWWSCNXQmkyVEf_Nh1GLv5ZhxBgFjHZoGyU,40154
65
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial5.pdt,sha256=PHpW7mKjplAduzLbc7Tus8iDmJMV96caDlMH5eyYGuo,3586395
66
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.jpg,sha256=KEIL0wqqGEJclYSzzMtcaGPqQhRMkNMPORohMn5SmLE,43299
67
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial6.pdt,sha256=IUQkH7WFalhEXjEJPTRC_t_dT3VmpehcFAF56pzKA40,4909332
68
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.jpg,sha256=lOwd4FX7esqoRpmOSu2w8_AzX6gdoeIAtanvIR4zxek,39647
69
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial7.pdt,sha256=pE-KtXakIOUaQHH1d_oL3wGIZLJuV_ajJ-BGJqUB8uU,3424944
70
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.jpg,sha256=m5ok4ST4FItQHrgH08MQ7HsIrG_DL_9g-fbDdLiPmJk,43939
71
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial8.pdt,sha256=43xKAF3u8fwrRP4aCk9hJ_xNXcIJrffqfw784crjaAs,3904937
72
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.jpg,sha256=ZszK2ZXT0WLkwrwg86I61EvCfg4QNCuslwkc3NC2D9g,41198
73
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.Results/Ex14_trial9.pdt,sha256=YNL2baRPN4Hb6cn2bw_5FwWI65h__plWI0JgIXW54zM,2907148
74
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj,sha256=F-yu2dGrsbrIA1Lhizu2aHTjQFTohyBmOuJv-Iyl8jk,179596
75
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.py,sha256=K9ZlIkmD05NOF2dXnv4AmYsvM7klhm8Ss7irAr74MVQ,2213
76
- pyfemtet/opt/femprj_sample/wat_ex14_parametric_parallel.py,sha256=UjPMpoZY99rJY9mqudsK7MOGURhzwOulwDkrRiclZzI,2289
77
- pyfemtet/opt/femprj_sample/wat_ex14_parametric_test_result.reccsv,sha256=bvHgcuFZ1iS8sb_FT5W7MuquODxmv3IcFkiNOdSMiK8,3450
78
- pyfemtet/opt/femprj_sample_jp/ParametricIF_jp.femprj,sha256=9BtDHmc3cdom0Zq33DTdZ0mDAsIUY6i8SRkkg-n7GO0,442090
79
- pyfemtet/opt/femprj_sample_jp/ParametricIF_jp.py,sha256=oXzchBZEbH69xacDht5HDnbZzKwapXsn6bp9qihY17Y,707
80
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj,sha256=0RBhOGhtiFAp0QSCTBYEaDY9EZymn9hJYchAOJ6PaBA,143533
81
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=B7wVemkiVzh0NJXDzG3fdigWBOb58ZxrJZUT4NRvW9Q,4899
82
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj,sha256=ZZhT9XjB9Xu9YwHWv4gbvKBiUWlOFKEoHjAcGWb3vvQ,128026
83
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py,sha256=e-XaHBZ8syWlG9pObcDDkHGLC5t338zAt_NyRXty338,4837
84
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=PzqtNVde6VnMHFpedRBsOq9JVhCY0ymQPVs54EKsNLw,75668
85
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py,sha256=97np4uH-UQqpv4UDwJS0doFYA7TOkXnbhLdkZExdNek,2461
86
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj,sha256=TTXw_8YT8pzHQlu4ufGzTq1IFYSwcWWt4GA6sIY1YPM,295600
87
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py,sha256=8Op_zwz9SD0NfGg4TFlcNvs-ZlU0bxgs5oaaI9UtlRU,2087
88
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj,sha256=OJ7f8iw0z1BZqanuNn71uEaoM2Kgb93ptUU8iYwYON0,129783
89
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py,sha256=t0M8sYeiCokETe6grdgvejfTCN__y_ZYdSQprtENntE,5245
90
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj,sha256=y7eURFBdqh6PmD4zbelGuB458HmfihVht0K4wVI-mik,265368
91
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py,sha256=ibXVhya5JV7CfCD2srQceXOj1sYjH3kWtaIEfyu98u4,2489
92
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py,sha256=cY9RhoAFEnVUkfGhbXpn3LavT_NRp_OwVxGbL7jSbBQ,2605
93
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
94
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vMy-KUP1wEMV9Rt6yXjkE40Fcs1t1cpQK-nQJK8hHao,2284
95
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py,sha256=4X0cl3YWpYarcNBCH79mrlyFuKUYSqvnGzokEbv9ILk,2335
96
- pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
97
- pyfemtet/opt/interface/_base.py,sha256=I4pJttLeRW-6WWMuCNynwxWPwriiGZk20vHLVcfixZY,2332
98
- pyfemtet/opt/interface/_femtet.py,sha256=vWPEn8TpJFCSN48uk430kAFr7_5ralMoOGF8IKvpIjU,34441
99
- pyfemtet/opt/interface/_femtet_parametric.py,sha256=KDG8SB43AgwuhpCStjvx10G0RzyHhga6k4dfvp0gvYU,2175
100
- pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
101
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=cibPOhsUAvTDJa1xdEhVClZjwPkEx2kBmi61vyTJHUs,5514
102
- pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=P7VH0i_o-X9OUe6AGaLF1fACPeHNrMjcrOBCA3MMrI4,3092
103
- pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=Ldr8Esa5xZ-D_E5uIXBTF2DHslXVMFDYOsqTd8FhY1M,6242
104
- pyfemtet/opt/opt/__init__.py,sha256=_9hkYtxk-8PfWkWJaiYqESrH5CnSKM2Gv93HxtD-f3o,383
105
- pyfemtet/opt/opt/_base.py,sha256=EZsmVQmLkWNXCV960XKdV6hFoKR74TloyPjJnKw-7PA,11424
106
- pyfemtet/opt/opt/_optuna.py,sha256=sCAg5lHEY0aZcau5ZuqFbZYYeuLMDRRf1XXEwLap8sw,12203
107
- pyfemtet/opt/opt/_optuna_botorch_helper.py,sha256=6d5LOCXhSyiffCW-mraAXUiHN6YdG-qz67F2_9m3Jec,8613
108
- pyfemtet/opt/opt/_scipy.py,sha256=8Alx9sIlLzNTxuVGTHOJMsvW5LSp8WDFiqD8IV6CVPc,4203
109
- pyfemtet/opt/opt/_scipy_scalar.py,sha256=ot1KbetZeQh5XkllzHc1PubPjBPgVBtC0a4jllNi8G4,2833
110
- pyfemtet/opt/parameter.py,sha256=YLE9lmYRaZA8isnTPJnbYXpUn6zsJFW4xg03QaSWey8,3950
111
- pyfemtet/opt/prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
- pyfemtet/opt/prediction/base.py,sha256=q4lDqrOtAkiWG-OblQEddnEVj29Q-EJE3-O5QTOb3Q4,1761
113
- pyfemtet/opt/prediction/single_task_gp.py,sha256=VbsVllzXzCGqkM1fC61Ouqwuv3ddS5INbFwDG8v-d6g,3303
114
- pyfemtet/opt/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- pyfemtet/opt/visualization/_create_wrapped_components.py,sha256=XpOv_iEEB3lFT3vYuCnCCbwUwRFbCYgvsZDpaiSzmZY,2511
116
- pyfemtet/opt/visualization/base.py,sha256=XhZodLEr5PPHmtNai6uZcPJobKurENepuGCUaqDOI7I,7588
117
- pyfemtet/opt/visualization/complex_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- pyfemtet/opt/visualization/complex_components/alert_region.py,sha256=IIsfw4Dwlag7ked94X7MF2UxEODJCBeYruDOUQsKzGQ,2104
119
- pyfemtet/opt/visualization/complex_components/control_femtet.py,sha256=b4gn_pQMXe3NL3aqfEgsPTvhmdWmg-tRBvaHG659lZg,6240
120
- pyfemtet/opt/visualization/complex_components/main_figure_creator.py,sha256=mdX1DvMp75iGHMLzI13ki216iPO-wvB6XdxDqWdZVeM,5140
121
- pyfemtet/opt/visualization/complex_components/main_graph.py,sha256=RkFe2GVYfXa1_e0d4maj4RMqKqk3QUNuIYrXi1qu7oE,10259
122
- pyfemtet/opt/visualization/complex_components/pm_graph.py,sha256=n1p-yruqo9NW93UOUIdxPF2QdO4qDSuH37h6l8C68BQ,24921
123
- pyfemtet/opt/visualization/complex_components/pm_graph_creator.py,sha256=ukv9XqW_Mzdsw9Oxc3JXLwKJTyXPSrt9DiB3dvKv4uk,7302
124
- pyfemtet/opt/visualization/process_monitor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
- pyfemtet/opt/visualization/process_monitor/application.py,sha256=ir0xVTsbqFWq2FlPw75XNcMpFEUQNUQr5OcAW0r-FuY,7922
126
- pyfemtet/opt/visualization/process_monitor/pages.py,sha256=JiWeaPt6uww1XsdEDefcaMn9qFNdVLg-6_Bf17u-nV8,15112
127
- pyfemtet/opt/visualization/result_viewer/.gitignore,sha256=ryvb4aqbbsHireHWlPQfxxqDHQJo6YkVYhE9imKt0b8,6
128
- pyfemtet/opt/visualization/result_viewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- pyfemtet/opt/visualization/result_viewer/application.py,sha256=jq_OyHOv8tXQBc884sWennWRpeMmWRmy53kxjpwsNm0,1688
130
- pyfemtet/opt/visualization/result_viewer/pages.py,sha256=2ABJAb_d7RVP5lTZWf4z3DcxmYaPAM16HDP3W0ydP6g,32002
131
- pyfemtet/opt/visualization/wrapped_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
- pyfemtet/opt/visualization/wrapped_components/dbc.py,sha256=wzR1ZMOb4uwPNTMFn5upLJ9tXeuJ22mLGynyJlA2cho,42161
133
- pyfemtet/opt/visualization/wrapped_components/dcc.py,sha256=hcW7SR6VIMn4S4-JMyohvOzdc0Aw8A4chIeHqQEUbFU,17499
134
- pyfemtet/opt/visualization/wrapped_components/html.py,sha256=sE2XHTDY1GvA1NW7y6SKWf-WglVXFKKvXhU9h3z53_g,95652
135
- pyfemtet/opt/visualization/wrapped_components/str_enum.py,sha256=NZqbh2jNEAckvJyZv__MWeRs2F2Q-dkJCWo30rU2rrM,1383
136
- pyfemtet-0.4.24.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
137
- pyfemtet-0.4.24.dist-info/METADATA,sha256=9OXrLPkD3nKvfJHVCg1FWDELoTWvJk1YSgoucyLMisQ,3288
138
- pyfemtet-0.4.24.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
139
- pyfemtet-0.4.24.dist-info/entry_points.txt,sha256=ZfYqRaoiPtuWqFi2_msccyrVF0LurMn-IHlYamAegZo,104
140
- pyfemtet-0.4.24.dist-info/RECORD,,