-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_basic_functionality.py
More file actions
224 lines (184 loc) · 7.54 KB
/
test_basic_functionality.py
File metadata and controls
224 lines (184 loc) · 7.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/usr/bin/env python3
"""
基本功能測試:驗證修改後的 SQUID 分析代碼可以正確載入並初始化
這個測試不需要完整的依賴項,只驗證核心邏輯
"""
import sys
import os
import importlib.util
from pathlib import Path
def test_squid_analyzer_import():
"""測試 SQUIDAnalyzer 類可以正確導入"""
print("測試 1: SQUIDAnalyzer 類導入")
print("-" * 40)
try:
# Import using importlib since filename has hyphens
spec = importlib.util.spec_from_file_location(
"squid_analysis",
"/home/runner/work/Qcodes_Albert/Qcodes_Albert/analysis/analysis_v3/squid-cpr-analysis_v3.py"
)
squid_module = importlib.util.module_from_spec(spec)
# Mock dependencies to avoid import errors
import types
mock_qcodes = types.ModuleType('qcodes')
mock_qcodes.config = {'core': {'db_location': ''}}
mock_qcodes.initialise_database = lambda: None
mock_lmfit = types.ModuleType('lmfit')
mock_lmfit.minimize = lambda *args, **kwargs: None
mock_lmfit.Parameters = lambda: None
mock_lmfit.Parameter = lambda *args, **kwargs: None
mock_lmfit.report_fit = lambda *args, **kwargs: None
# Create a mock minimizer module
mock_minimizer = types.ModuleType('minimizer')
mock_minimizer.MinimizerResult = type('MinimizerResult', (), {})
mock_lmfit.minimizer = mock_minimizer
mock_hv = types.ModuleType('holoviews')
mock_hv.extension = lambda *args: None
mock_hv.opts = types.ModuleType('opts')
mock_hv.opts.defaults = lambda *args: None
mock_hv.opts.Image = lambda **kwargs: None
mock_hv.opts.Curve = lambda **kwargs: None
mock_hv.opts.Points = lambda **kwargs: None
mock_hv.Overlay = type('Overlay', (), {})
mock_hv.Layout = type('Layout', (), {})
mock_hv.Scatter = lambda *args, **kwargs: type('Scatter', (), {'opts': lambda **k: None})()
mock_hv.Curve = lambda *args, **kwargs: type('Curve', (), {'opts': lambda **k: None})()
mock_hv.HLine = lambda *args: type('HLine', (), {'opts': lambda **k: None})()
mock_hv.save = lambda *args, **kwargs: None
# Create core namespace
mock_core = types.ModuleType('core')
mock_core.Element = type('Element', (), {})
mock_core.Overlay = type('Overlay', (), {})
mock_core.Layout = type('Layout', (), {})
mock_hv.core = mock_core
mock_panel = types.ModuleType('panel')
mock_panel.extension = lambda *args, **kwargs: None
mock_display = lambda *args: None
sys.modules['qcodes'] = mock_qcodes
sys.modules['qcodes.dataset.data_set'] = types.ModuleType('data_set')
sys.modules['qcodes.dataset.data_set'].load_by_run_spec = lambda *args: None
sys.modules['lmfit'] = mock_lmfit
sys.modules['holoviews'] = mock_hv
sys.modules['panel'] = mock_panel
sys.modules['IPython.display'] = types.ModuleType('display')
sys.modules['IPython.display'].display = mock_display
spec.loader.exec_module(squid_module)
SQUIDAnalyzer = squid_module.SQUIDAnalyzer
print("✓ 成功導入 SQUIDAnalyzer")
return True, SQUIDAnalyzer
except Exception as e:
print(f"✗ 導入失敗: {e}")
return False, None
def test_squid_analyzer_initialization(SQUIDAnalyzer):
"""測試 SQUIDAnalyzer 初始化"""
print("\n測試 2: SQUIDAnalyzer 初始化")
print("-" * 40)
try:
analyzer = SQUIDAnalyzer()
print("✓ 成功創建 SQUIDAnalyzer 實例")
# 檢查縮放因子是否正確設置
expected_scaling = {
'current_factor': 1e3,
'field_factor': 1e3,
'area_factor': 1e9
}
scaling_ok = True
for key, expected_value in expected_scaling.items():
if hasattr(analyzer, 'scaling') and key in analyzer.scaling:
actual_value = analyzer.scaling[key]
if actual_value == expected_value:
print(f"✓ {key}: {actual_value} (正確)")
else:
print(f"✗ {key}: 期望 {expected_value}, 實際 {actual_value}")
scaling_ok = False
else:
print(f"✗ 缺少縮放因子: {key}")
scaling_ok = False
return scaling_ok, analyzer
except Exception as e:
print(f"✗ 初始化失敗: {e}")
return False, None
def test_scaling_methods(analyzer):
"""測試縮放相關方法"""
print("\n測試 3: 縮放方法可用性")
print("-" * 40)
methods_to_check = [
'scale_data_for_fitting',
'compute_initial_fit_params',
'plot_raw_data',
'plot_fit_results',
'save_results'
]
all_methods_available = True
for method_name in methods_to_check:
if hasattr(analyzer, method_name):
print(f"✓ 方法可用: {method_name}")
else:
print(f"✗ 方法缺失: {method_name}")
all_methods_available = False
return all_methods_available
def test_physical_constants(analyzer):
"""測試物理常數設置"""
print("\n測試 4: 物理常數")
print("-" * 40)
try:
# 檢查磁通量子
if hasattr(analyzer, 'PHI0'):
phi0 = analyzer.PHI0
expected_phi0 = 2.07e-15 # 大約值
if abs(phi0 - expected_phi0) / expected_phi0 < 0.1: # 10% 容差
print(f"✓ 磁通量子 PHI0: {phi0:.2e} Wb")
return True
else:
print(f"✗ 磁通量子值不正確: {phi0}")
return False
else:
print("✗ 缺少磁通量子常數 PHI0")
return False
except Exception as e:
print(f"✗ 物理常數檢查失敗: {e}")
return False
def main():
"""執行所有基本功能測試"""
print("SQUID CPR 分析基本功能測試")
print("=" * 50)
# 測試 1: 導入
import_ok, SQUIDAnalyzer = test_squid_analyzer_import()
if not import_ok:
return False
# 測試 2: 初始化
init_ok, analyzer = test_squid_analyzer_initialization(SQUIDAnalyzer)
if not init_ok:
return False
# 測試 3: 方法可用性
methods_ok = test_scaling_methods(analyzer)
# 測試 4: 物理常數
constants_ok = test_physical_constants(analyzer)
# 總結
print("\n" + "=" * 50)
print("測試總結")
print("=" * 50)
tests = [
("類導入", import_ok),
("初始化", init_ok),
("方法可用性", methods_ok),
("物理常數", constants_ok)
]
all_passed = True
for test_name, passed in tests:
status = "✓ 通過" if passed else "✗ 失敗"
print(f"{test_name}: {status}")
if not passed:
all_passed = False
print(f"\n整體結果: {'✓ 所有測試通過' if all_passed else '✗ 有測試失敗'}")
if all_passed:
print("\n✓ 基本功能驗證成功!")
print(" - SQUIDAnalyzer 類可以正確載入")
print(" - 縮放因子設置正確")
print(" - 所有必要方法都可用")
print(" - 物理常數設置正確")
print(" - 準備好進行完整測試")
return all_passed
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)