coordinate-system 5.2.2__cp313-cp313-win_amd64.whl → 6.0.0__cp313-cp313-win_amd64.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.
@@ -1,763 +1,125 @@
1
1
  """
2
- Quantum Frame Spectral Analysis - 量子标架谱分析
2
+ Quantum Frame Spectral Analysis - 向后兼容模块
3
3
  ==============================================
4
4
 
5
- 基于量子复标架理论的坐标场谱分析系统。
6
- 将傅里叶谱分析升级为量子几何框架。
5
+ 此模块已合并到 qframes.py 中。
6
+ 保留此文件仅用于向后兼容。
7
7
 
8
- 核心概念转换:
9
- - 传统傅里叶谱 量子标架场谱
10
- - FFT/IFFT → 标架旋转算符
11
- - 频域分析 → 动量标架表示
12
- - 谱密度 → 量子几何能量密度
13
- - 坐标场变换 → 复标架场旋转
14
-
15
- 量子几何特性:
16
- - 非对易代数 [x̂, p̂] = iħ
17
- - 标架旋转 = 傅里叶变换
18
- - 量子联络与曲率
19
- - Berry 相位与拓扑不变量
20
- - 外尔关系验证
21
-
22
- GPU 加速:
23
- - 支持 CuPy 加速的标架变换
24
- - 批量坐标变换优化
25
- - 大规模场计算
26
-
27
- Author: Quantum Frame Theory Edition
28
- Date: 2025-12-02
29
- """
30
-
31
- import numpy as np
32
- from typing import List, Tuple, Dict, Optional, Union, Any
33
- from dataclasses import dataclass
34
- from scipy import integrate, linalg
35
-
36
- # 导入坐标系统
37
- try:
38
- from .coordinate_system import coord3, vec3, quat
39
- except ImportError:
40
- import coordinate_system
41
- coord3 = coordinate_system.coord3
42
- vec3 = coordinate_system.vec3
43
- quat = coordinate_system.quat
44
-
45
- # 导入量子复标架
46
- try:
47
- from .qframes import (
48
- QFrame, QState, QOperator, WeylRelation, QConnection,
49
- coherent_state, uncertainty_product, HBAR
8
+ 请直接使用 qframes 模块:
9
+ from coordinate_system.qframes import (
10
+ QFrame,
11
+ QFrameSpectrum,
12
+ spectral_transform,
13
+ inverse_spectral_transform,
50
14
  )
51
- except ImportError:
52
- import qframes
53
- QFrame = qframes.QFrame
54
- QState = qframes.QState
55
- QOperator = qframes.QOperator
56
- WeylRelation = qframes.WeylRelation
57
- QConnection = qframes.QConnection
58
- coherent_state = qframes.coherent_state
59
- uncertainty_product = qframes.uncertainty_product
60
- HBAR = qframes.HBAR
61
-
62
- # GPU 可用性检查
63
- try:
64
- import cupy as cp
65
- import cupyx.scipy.fft as cufft
66
- GPU_AVAILABLE = True
67
- except ImportError:
68
- GPU_AVAILABLE = False
69
- class DummyCP:
70
- ndarray = np.ndarray
71
- def asarray(self, *args, **kwargs):
72
- raise RuntimeError("CuPy not available")
73
- def matmul(self, *args, **kwargs):
74
- raise RuntimeError("CuPy not available")
75
- cp = DummyCP()
76
- cufft = None
77
-
78
-
79
- @dataclass
80
- class QuantumFrameSpectrum:
81
- """
82
- 量子标架场谱 - 坐标场在动量标架下的表示
83
-
84
- 物理意义:
85
- - 每个坐标场分量在动量空间的分布
86
- - 量子几何的频谱特征
87
- - 标架旋转后的复振幅
88
-
89
- 数学形式:
90
- ψ̃(p) = ∫ ⟨p|x⟩ ψ(x) dx
91
- 其中 ⟨p|x⟩ = (1/√(2πħ)) e^{-ipx/ħ}
92
- """
93
- ux_spectrum: np.ndarray # x轴基矢量的动量谱
94
- uy_spectrum: np.ndarray # y轴基矢量的动量谱
95
- uz_spectrum: np.ndarray # z轴基矢量的动量谱
96
- origin_spectrum: np.ndarray # 原点位置的动量谱
97
-
98
- # 动量网格(kx, ky)
99
- momentum_grid: Tuple[np.ndarray, np.ndarray]
100
-
101
- # 量子几何参数
102
- hbar: float = HBAR
103
-
104
- # 量子几何量(可选)
105
- curvature: Optional[np.ndarray] = None # 量子曲率场
106
- berry_phase: Optional[complex] = None # Berry 相位
107
- chern_number: Optional[int] = None # Chern 数(拓扑不变量)
108
-
109
- def __post_init__(self):
110
- """验证谱数据维度一致性"""
111
- shapes = [
112
- self.ux_spectrum.shape,
113
- self.uy_spectrum.shape,
114
- self.uz_spectrum.shape,
115
- self.origin_spectrum.shape
116
- ]
117
- if not all(shape == shapes[0] for shape in shapes):
118
- raise ValueError("所有谱分量必须具有相同的维度")
119
-
120
- def total_energy(self) -> float:
121
- """
122
- 计算谱的总能量(量子几何能量)
123
-
124
- E = ∫ |ψ̃(p)|² dp
125
- """
126
- energy = (
127
- np.sum(np.abs(self.ux_spectrum)**2) +
128
- np.sum(np.abs(self.uy_spectrum)**2) +
129
- np.sum(np.abs(self.uz_spectrum)**2) +
130
- np.sum(np.abs(self.origin_spectrum)**2)
131
- )
132
- return float(energy)
133
-
134
- def uncertainty_product(self) -> float:
135
- """
136
- 计算不确定性乘积 ΔxΔp
137
-
138
- 通过位置谱和动量谱的宽度计算
139
- """
140
- # 简化计算:使用谱的二阶矩
141
- kx, ky = self.momentum_grid
142
- k_mag = np.sqrt(kx[:, None]**2 + ky[None, :]**2)
143
-
144
- # 动量宽度
145
- total_spectrum = (
146
- np.abs(self.ux_spectrum)**2 +
147
- np.abs(self.uy_spectrum)**2 +
148
- np.abs(self.uz_spectrum)**2
149
- ).mean(axis=-1) # 对矢量分量平均
150
-
151
- total_norm = np.sum(total_spectrum)
152
- if total_norm < 1e-15:
153
- # 谱太小,返回不确定性下限
154
- return self.hbar / 2
155
-
156
- delta_p_squared = np.sum(k_mag**2 * total_spectrum) / total_norm
157
- delta_p = np.sqrt(delta_p_squared) if delta_p_squared > 0 else 1.0
158
-
159
- # 根据不确定性原理估计位置宽度
160
- delta_x = self.hbar / (2 * delta_p) if delta_p > 1e-10 else 1.0
161
-
162
- return delta_x * delta_p
163
-
164
-
165
- class QuantumFrameTransformer:
166
- """
167
- 量子标架变换器 - 基于量子复标架理论的坐标场变换
168
-
169
- 核心原理:
170
- 1. 将坐标场视为复标架场 {|x⟩} 的叠加
171
- 2. 使用 QFrame.fourier_kernel 进行标架旋转
172
- 3. 位置标架 ↔ 动量标架的幺正变换
173
-
174
- 数学框架:
175
- - 标架旋转核:⟨p|x⟩ = (1/√(2πħ)) e^{ipx/ħ}
176
- - 非对易性:[x̂, p̂] = iħ
177
- - 幺正性:∫ |⟨p|x⟩|² dx = 1
178
- """
179
-
180
- def __init__(self, grid_size: Tuple[int, int] = (64, 64), hbar: float = HBAR):
181
- """
182
- 初始化量子标架变换器
183
-
184
- Args:
185
- grid_size: 网格尺寸 (ny, nx)
186
- hbar: 约化普朗克常数
187
- """
188
- self.grid_size = grid_size
189
- self.ny, self.nx = grid_size
190
- self.hbar = hbar
191
-
192
- # 创建位置和动量标架
193
- self.position_frame = QFrame('position', hbar)
194
- self.momentum_frame = QFrame('momentum', hbar)
195
-
196
- def coord_field_to_tensor(self, coord_field: List[List[coord3]]) -> np.ndarray:
197
- """
198
- 将坐标场转换为张量表示
199
-
200
- 张量结构: [ny, nx, 12]
201
- - [0:3]: 原点位置 (ox, oy, oz)
202
- - [3:6]: x轴基矢量 (ux.x, ux.y, ux.z)
203
- - [6:9]: y轴基矢量 (uy.x, uy.y, uy.z)
204
- - [9:12]: z轴基矢量 (uz.x, uz.y, uz.z)
205
- """
206
- actual_ny = len(coord_field)
207
- actual_nx = len(coord_field[0]) if actual_ny > 0 else 0
208
-
209
- if actual_ny != self.ny or actual_nx != self.nx:
210
- raise ValueError(
211
- f"坐标场维度 ({actual_ny}x{actual_nx}) "
212
- f"与期望网格尺寸 ({self.ny}x{self.nx}) 不匹配"
213
- )
214
-
215
- tensor_field = np.zeros((self.ny, self.nx, 12), dtype=np.float64)
216
-
217
- for i in range(self.ny):
218
- for j in range(self.nx):
219
- coord = coord_field[i][j]
220
- # 原点位置 (3) + 基矢量 (9)
221
- tensor_field[i, j, 0:3] = [coord.o.x, coord.o.y, coord.o.z]
222
- tensor_field[i, j, 3:6] = [coord.ux.x, coord.ux.y, coord.ux.z]
223
- tensor_field[i, j, 6:9] = [coord.uy.x, coord.uy.y, coord.uy.z]
224
- tensor_field[i, j, 9:12] = [coord.uz.x, coord.uz.y, coord.uz.z]
225
-
226
- return tensor_field
227
-
228
- def quantum_frame_transform(self, coord_field: List[List[coord3]]) -> QuantumFrameSpectrum:
229
- """
230
- 量子标架变换:位置标架 → 动量标架
231
-
232
- 使用量子复标架的 fourier_kernel 进行标架旋转
233
-
234
- 数学形式:
235
- ψ̃_μ(kx, ky) = ∫∫ ⟨k|x⟩ ψ_μ(x, y) dx dy
236
-
237
- 其中 μ ∈ {ux, uy, uz, origin}
238
- """
239
- tensor_field = self.coord_field_to_tensor(coord_field)
240
-
241
- # 分离各分量
242
- origin_field = tensor_field[..., 0:3]
243
- ux_field = tensor_field[..., 3:6]
244
- uy_field = tensor_field[..., 6:9]
245
- uz_field = tensor_field[..., 9:12]
246
-
247
- # 使用量子标架进行变换(标架旋转)
248
- origin_spectrum = self._qframe_transform_2d(origin_field)
249
- ux_spectrum = self._qframe_transform_2d(ux_field)
250
- uy_spectrum = self._qframe_transform_2d(uy_field)
251
- uz_spectrum = self._qframe_transform_2d(uz_field)
252
-
253
- # 动量网格
254
- kx = 2 * np.pi * np.fft.fftfreq(self.nx) / self.hbar
255
- ky = 2 * np.pi * np.fft.fftfreq(self.ny) / self.hbar
256
-
257
- return QuantumFrameSpectrum(
258
- ux_spectrum=ux_spectrum,
259
- uy_spectrum=uy_spectrum,
260
- uz_spectrum=uz_spectrum,
261
- origin_spectrum=origin_spectrum,
262
- momentum_grid=(kx, ky),
263
- hbar=self.hbar
264
- )
265
-
266
- def _qframe_transform_2d(self, field: np.ndarray) -> np.ndarray:
267
- """
268
- 二维量子标架变换
269
-
270
- 使用 FFT 实现高效的标架旋转
271
- (FFT 是量子标架变换的离散逼近)
272
-
273
- Args:
274
- field: 形状为 [ny, nx, n_components] 的场
275
-
276
- Returns:
277
- 动量标架下的谱,形状同上
278
- """
279
- # 对空间维度进行 FFT(标架旋转)
280
- # FFT 是 ⟨p|x⟩ = (1/√(2πħ)) e^{ipx/ħ} 的离散实现
281
- spectrum = np.fft.fft2(field, axes=(0, 1))
282
-
283
- # 归一化因子(量子标架归一化)
284
- normalization = 1.0 / np.sqrt(2 * np.pi * self.hbar)
285
- spectrum *= normalization
286
-
287
- return spectrum
288
-
289
- def inverse_quantum_transform(self, spectrum: QuantumFrameSpectrum) -> List[List[coord3]]:
290
- """
291
- 逆量子标架变换:动量标架 → 位置标架
292
-
293
- 重建坐标场
294
-
295
- 数学形式:
296
- ψ_μ(x, y) = ∫∫ ⟨x|k⟩ ψ̃_μ(kx, ky) dkx dky
297
- """
298
- # 逆变换各分量
299
- origin_field = self._qframe_inverse_transform_2d(spectrum.origin_spectrum)
300
- ux_field = self._qframe_inverse_transform_2d(spectrum.ux_spectrum)
301
- uy_field = self._qframe_inverse_transform_2d(spectrum.uy_spectrum)
302
- uz_field = self._qframe_inverse_transform_2d(spectrum.uz_spectrum)
303
-
304
- # 重建坐标场
305
- coord_field = []
306
- for i in range(self.ny):
307
- row = []
308
- for j in range(self.nx):
309
- o = vec3(
310
- origin_field[i, j, 0],
311
- origin_field[i, j, 1],
312
- origin_field[i, j, 2]
313
- )
314
- ux = vec3(ux_field[i, j, 0], ux_field[i, j, 1], ux_field[i, j, 2])
315
- uy = vec3(uy_field[i, j, 0], uy_field[i, j, 1], uy_field[i, j, 2])
316
- uz = vec3(uz_field[i, j, 0], uz_field[i, j, 1], uz_field[i, j, 2])
317
-
318
- # 创建坐标系统(使用单位四元数和尺度)
319
- coord = coord3(o, quat(1, 0, 0, 0), vec3(1, 1, 1))
320
- coord.ux, coord.uy, coord.uz = ux, uy, uz
321
- row.append(coord)
322
- coord_field.append(row)
323
-
324
- return coord_field
325
-
326
- def _qframe_inverse_transform_2d(self, spectrum: np.ndarray) -> np.ndarray:
327
- """
328
- 二维逆量子标架变换
329
-
330
- Args:
331
- spectrum: 动量标架下的谱
332
-
333
- Returns:
334
- 位置标架下的场
335
- """
336
- # 反归一化
337
- denormalization = np.sqrt(2 * np.pi * self.hbar)
338
- spectrum_scaled = spectrum * denormalization
339
-
340
- # IFFT(逆标架旋转)
341
- field = np.fft.ifft2(spectrum_scaled, axes=(0, 1)).real
342
-
343
- return field
344
-
345
- def compute_quantum_curvature(self, spectrum: QuantumFrameSpectrum) -> np.ndarray:
346
- """
347
- 计算量子曲率场
348
-
349
- 基于量子联络的曲率:R = [A_x, A_y]
350
-
351
- Returns:
352
- 曲率场,形状为 [ny, nx]
353
- """
354
- kx, ky = spectrum.momentum_grid
355
-
356
- # 使用谱的梯度近似计算曲率
357
- # ∂_x ψ̃ ~ i kx ψ̃
358
- # ∂_y ψ̃ ~ i ky ψ̃
359
-
360
- total_spectrum = (
361
- spectrum.ux_spectrum +
362
- spectrum.uy_spectrum +
363
- spectrum.uz_spectrum +
364
- spectrum.origin_spectrum
365
- )
366
-
367
- # 动量梯度(量子联络的近似)
368
- grad_x = 1j * kx[:, None, None] * total_spectrum
369
- grad_y = 1j * ky[None, :, None] * total_spectrum
370
-
371
- # 曲率 ~ [∂_x, ∂_y]
372
- curvature = np.abs(grad_x * grad_y - grad_y * grad_x).mean(axis=-1)
373
-
374
- return curvature
375
-
376
- def verify_unitarity(self, coord_field: List[List[coord3]]) -> Dict[str, float]:
377
- """
378
- 验证量子标架变换的幺正性
379
-
380
- 检验:∫ |⟨p|x⟩|² dx = 1
381
-
382
- 通过往返变换测试:field → spectrum → field'
383
- """
384
- # 前向变换
385
- spectrum = self.quantum_frame_transform(coord_field)
386
-
387
- # 逆变换
388
- reconstructed = self.inverse_quantum_transform(spectrum)
389
-
390
- # 计算重建误差
391
- max_error = 0.0
392
- for i in range(self.ny):
393
- for j in range(self.nx):
394
- orig = coord_field[i][j]
395
- recon = reconstructed[i][j]
396
-
397
- error = (
398
- abs(orig.o.x - recon.o.x) +
399
- abs(orig.o.y - recon.o.y) +
400
- abs(orig.o.z - recon.o.z)
401
- ) / 3
402
-
403
- max_error = max(max_error, error)
404
-
405
- return {
406
- 'max_reconstruction_error': max_error,
407
- 'is_unitary': max_error < 1e-10,
408
- 'relative_error': max_error / (self.nx * self.ny)
409
- }
410
-
411
-
412
- class GPUQuantumFrameTransformer(QuantumFrameTransformer):
413
- """
414
- GPU 加速的量子标架变换器
415
-
416
- 使用 CuPy 加速大规模场的标架旋转
417
- """
418
15
 
419
- def __init__(self, grid_size: Tuple[int, int] = (64, 64), hbar: float = HBAR):
420
- super().__init__(grid_size, hbar)
421
- if not GPU_AVAILABLE:
422
- raise RuntimeError("CuPy 不可用。GPU 加速需要安装 CuPy。")
423
-
424
- def _qframe_transform_2d(self, field: np.ndarray) -> np.ndarray:
425
- """GPU 加速的二维量子标架变换"""
426
- # 转移到 GPU
427
- field_gpu = cp.asarray(field)
428
-
429
- # GPU FFT(标架旋转)
430
- spectrum_gpu = cufft.fft2(field_gpu, axes=(0, 1))
431
-
432
- # 归一化
433
- normalization = 1.0 / np.sqrt(2 * np.pi * self.hbar)
434
- spectrum_gpu *= normalization
435
-
436
- # 转回 CPU
437
- return cp.asnumpy(spectrum_gpu)
438
-
439
- def _qframe_inverse_transform_2d(self, spectrum: np.ndarray) -> np.ndarray:
440
- """GPU 加速的二维逆量子标架变换"""
441
- # 转移到 GPU
442
- spectrum_gpu = cp.asarray(spectrum)
443
-
444
- # 反归一化
445
- denormalization = np.sqrt(2 * np.pi * self.hbar)
446
- spectrum_gpu *= denormalization
447
-
448
- # GPU IFFT
449
- field_gpu = cufft.ifft2(spectrum_gpu, axes=(0, 1)).real
450
-
451
- # 转回 CPU
452
- return cp.asnumpy(field_gpu)
453
-
454
-
455
- class QuantumSpectralAnalyzer:
456
- """
457
- 量子谱分析器 - 量子几何与拓扑分析
458
-
459
- 功能:
460
- - 量子能量谱密度
461
- - 径向谱平均(ShapeDNA)
462
- - Berry 相位计算
463
- - Chern 数(拓扑不变量)
464
- - 外尔关系验证
465
- """
466
-
467
- def __init__(self, transformer: QuantumFrameTransformer = None):
468
- self.transformer = transformer or QuantumFrameTransformer()
469
-
470
- def compute_spectral_density(self, spectrum: QuantumFrameSpectrum) -> np.ndarray:
471
- """
472
- 计算量子谱密度
473
-
474
- ρ(k) = Σ_μ |ψ̃_μ(k)|²
475
-
476
- 物理意义:动量空间的能量分布
477
- """
478
- energy_density = (
479
- np.abs(spectrum.ux_spectrum)**2 +
480
- np.abs(spectrum.uy_spectrum)**2 +
481
- np.abs(spectrum.uz_spectrum)**2 +
482
- np.abs(spectrum.origin_spectrum)**2
483
- )
484
- return np.mean(energy_density, axis=-1) # 对矢量分量平均
485
-
486
- def radial_spectrum_average(self, spectrum: QuantumFrameSpectrum) -> Tuple[np.ndarray, np.ndarray]:
487
- """
488
- 径向谱平均(Quantum ShapeDNA)
489
-
490
- 将二维动量谱投影到径向分布
491
-
492
- Returns:
493
- (k_bins, radial_avg): 动量大小与对应的平均谱密度
494
- """
495
- kx, ky = spectrum.momentum_grid
496
- k_mag = np.sqrt(kx[:, None]**2 + ky[None, :]**2)
497
-
498
- spectral_density = self.compute_spectral_density(spectrum)
499
-
500
- # 径向分箱
501
- k_max = np.max(k_mag)
502
- k_bins = np.linspace(0, k_max, 50)
503
- radial_avg = np.zeros_like(k_bins)
504
-
505
- for i in range(len(k_bins) - 1):
506
- mask = (k_mag >= k_bins[i]) & (k_mag < k_bins[i + 1])
507
- if np.any(mask):
508
- radial_avg[i] = np.mean(spectral_density[mask])
509
-
510
- return k_bins, radial_avg
511
-
512
- def compute_berry_phase(self, spectrum: QuantumFrameSpectrum,
513
- path_indices: List[Tuple[int, int]]) -> complex:
514
- """
515
- 计算 Berry 相位
516
-
517
- γ = i ∮ ⟨ψ|∇_k|ψ⟩ · dk
518
-
519
- Args:
520
- spectrum: 量子标架谱
521
- path_indices: 动量空间中的闭合路径(索引列表)
522
-
523
- Returns:
524
- Berry 相位(复数)
525
- """
526
- total_spectrum = (
527
- spectrum.ux_spectrum +
528
- spectrum.uy_spectrum +
529
- spectrum.uz_spectrum +
530
- spectrum.origin_spectrum
531
- )
532
-
533
- berry_phase = 0j
534
- n_points = len(path_indices)
535
-
536
- for i in range(n_points):
537
- idx_current = path_indices[i]
538
- idx_next = path_indices[(i + 1) % n_points]
539
-
540
- # 当前点和下一点的波函数
541
- psi_current = total_spectrum[idx_current]
542
- psi_next = total_spectrum[idx_next]
543
-
544
- # Berry 联络的近似:A ~ ⟨ψ|∇|ψ⟩
545
- # 使用相位差近似
546
- overlap = np.vdot(psi_current, psi_next)
547
- berry_phase += np.angle(overlap)
548
-
549
- return berry_phase
550
-
551
- def compute_chern_number(self, spectrum: QuantumFrameSpectrum) -> int:
552
- """
553
- 计算 Chern 数(拓扑不变量)
554
-
555
- C = (1/2πi) ∫∫ F(k) dkx dky
556
-
557
- 其中 F 是 Berry 曲率
558
-
559
- Returns:
560
- Chern 数(整数)
561
- """
562
- # 简化计算:使用曲率场的积分
563
- curvature_field = self.transformer.compute_quantum_curvature(spectrum)
564
-
565
- # 对整个 Brillouin 区积分
566
- total_curvature = np.sum(curvature_field)
567
-
568
- # Chern 数应该是整数
569
- chern = int(np.round(total_curvature / (2 * np.pi)))
570
-
571
- return chern
572
-
573
- def verify_weyl_relation(self, grid_size: int = 10) -> Dict[str, Any]:
574
- """
575
- 验证外尔关系 T(a)U(b) = e^{-iab/ħ} U(b)T(a)
576
-
577
- Args:
578
- grid_size: 用于验证的网格大小
579
-
580
- Returns:
581
- 验证结果字典
582
- """
583
- grid = np.linspace(-5, 5, grid_size)
584
- weyl = WeylRelation(hbar=self.transformer.hbar)
585
-
586
- result = weyl.verify(grid, a=1.0, b=1.0)
587
-
588
- return {
589
- 'weyl_relation_valid': result['valid'],
590
- 'max_difference': result['max_difference'],
591
- 'expected_phase': result['expected_phase'],
592
- 'grid_size': grid_size
593
- }
594
-
595
-
596
- # ========== 便利函数 ==========
597
-
598
- def quantum_frame_transform(coord_field: List[List[coord3]],
599
- grid_size: Tuple[int, int] = (64, 64),
600
- use_gpu: bool = False,
601
- hbar: float = HBAR) -> QuantumFrameSpectrum:
602
- """
603
- 量子标架变换:坐标场 → 动量谱
604
-
605
- Args:
606
- coord_field: 坐标场
607
- grid_size: 网格尺寸
608
- use_gpu: 是否使用 GPU 加速
609
- hbar: 约化普朗克常数
610
-
611
- Returns:
612
- 量子标架谱
613
- """
614
- if use_gpu and GPU_AVAILABLE:
615
- transformer = GPUQuantumFrameTransformer(grid_size, hbar)
616
- else:
617
- transformer = QuantumFrameTransformer(grid_size, hbar)
618
-
619
- return transformer.quantum_frame_transform(coord_field)
620
-
621
-
622
- def inverse_quantum_transform(spectrum: QuantumFrameSpectrum,
623
- use_gpu: bool = False) -> List[List[coord3]]:
624
- """
625
- 逆量子标架变换:动量谱 → 坐标场
626
-
627
- Args:
628
- spectrum: 量子标架谱
629
- use_gpu: 是否使用 GPU 加速
630
-
631
- Returns:
632
- 重建的坐标场
633
- """
634
- grid_size = spectrum.ux_spectrum.shape[:2]
635
-
636
- if use_gpu and GPU_AVAILABLE:
637
- transformer = GPUQuantumFrameTransformer(grid_size, spectrum.hbar)
638
- else:
639
- transformer = QuantumFrameTransformer(grid_size, spectrum.hbar)
640
-
641
- return transformer.inverse_quantum_transform(spectrum)
642
-
643
-
644
- def compute_quantum_spectral_density(spectrum: QuantumFrameSpectrum) -> np.ndarray:
645
- """
646
- 计算量子谱密度
16
+ Author: Quantum Frame Theory
17
+ Date: 2025-12-03
18
+ """
647
19
 
648
- Args:
649
- spectrum: 量子标架谱
20
+ import warnings
650
21
 
651
- Returns:
652
- 谱密度数组
653
- """
654
- analyzer = QuantumSpectralAnalyzer()
655
- return analyzer.compute_spectral_density(spectrum)
22
+ # 发出弃用警告
23
+ warnings.warn(
24
+ "fourier_spectral 模块已合并到 qframes.py 中。"
25
+ "请直接使用: from coordinate_system.qframes import ...",
26
+ DeprecationWarning,
27
+ stacklevel=2
28
+ )
656
29
 
30
+ # 从 qframes 重导出所有内容
31
+ from .qframes import (
32
+ # 核心类
33
+ QFrame,
34
+ QuantumState,
35
+ PathIntegral,
36
+ QFrameSpectrum,
657
37
 
658
- def compute_radial_spectrum(spectrum: QuantumFrameSpectrum) -> Tuple[np.ndarray, np.ndarray]:
659
- """
660
- 计算径向谱(Quantum ShapeDNA)
38
+ # 便利函数
39
+ spectral_transform,
40
+ inverse_spectral_transform,
661
41
 
662
- Args:
663
- spectrum: 量子标架谱
42
+ # 常数
43
+ HBAR,
44
+ GPU_AVAILABLE,
45
+ )
664
46
 
665
- Returns:
666
- (k_bins, radial_avg): 动量大小与谱密度
667
- """
668
- analyzer = QuantumSpectralAnalyzer()
669
- return analyzer.radial_spectrum_average(spectrum)
47
+ # 向后兼容别名
48
+ QuantumFrameSpectrum = QFrameSpectrum
49
+ QuantumFrameTransformer = QFrame # QFrame 现在包含变换方法
670
50
 
671
51
 
672
- def verify_quantum_unitarity(coord_field: List[List[coord3]],
673
- grid_size: Tuple[int, int] = (64, 64)) -> Dict[str, float]:
52
+ def quantum_frame_transform(coord_field, grid_size=None, use_gpu=False, hbar=HBAR):
674
53
  """
675
- 验证量子标架变换的幺正性
676
-
677
- Args:
678
- coord_field: 坐标场
679
- grid_size: 网格尺寸
680
-
681
- Returns:
682
- 验证结果字典
54
+ 向后兼容函数 - 已整合到 QFrame.from_coord_field()
683
55
  """
684
- transformer = QuantumFrameTransformer(grid_size)
685
- return transformer.verify_unitarity(coord_field)
686
-
56
+ warnings.warn(
57
+ "quantum_frame_transform() 已弃用,请使用 QFrame.from_coord_field()",
58
+ DeprecationWarning,
59
+ stacklevel=2
60
+ )
61
+ return QFrame.from_coord_field(coord_field, hbar)
687
62
 
688
- # ========== 高级量子几何分析 ==========
689
63
 
690
- def compute_quantum_curvature_field(spectrum: QuantumFrameSpectrum) -> np.ndarray:
64
+ def inverse_quantum_transform(spectrum, use_gpu=False):
691
65
  """
692
- 计算量子曲率场 R = [A_x, A_y]
693
-
694
- Args:
695
- spectrum: 量子标架谱
696
-
697
- Returns:
698
- 曲率场
66
+ 向后兼容函数 - 已整合到 QFrameSpectrum.to_coord_field()
699
67
  """
700
- grid_size = spectrum.ux_spectrum.shape[:2]
701
- transformer = QuantumFrameTransformer(grid_size, spectrum.hbar)
702
- return transformer.compute_quantum_curvature(spectrum)
68
+ warnings.warn(
69
+ "inverse_quantum_transform() 已弃用,请使用 spectrum.to_coord_field()",
70
+ DeprecationWarning,
71
+ stacklevel=2
72
+ )
73
+ return spectrum.to_coord_field()
703
74
 
704
75
 
705
- def compute_berry_phase(spectrum: QuantumFrameSpectrum,
706
- path_indices: List[Tuple[int, int]]) -> complex:
76
+ def compute_quantum_spectral_density(spectrum):
707
77
  """
708
- 计算 Berry 相位
709
-
710
- Args:
711
- spectrum: 量子标架谱
712
- path_indices: 动量空间闭合路径
713
-
714
- Returns:
715
- Berry 相位
78
+ 向后兼容函数 - 已整合到 QFrameSpectrum.spectral_density()
716
79
  """
717
- analyzer = QuantumSpectralAnalyzer()
718
- return analyzer.compute_berry_phase(spectrum, path_indices)
80
+ warnings.warn(
81
+ "compute_quantum_spectral_density() 已弃用,请使用 spectrum.spectral_density()",
82
+ DeprecationWarning,
83
+ stacklevel=2
84
+ )
85
+ return spectrum.spectral_density()
719
86
 
720
87
 
721
- def compute_topological_invariants(spectrum: QuantumFrameSpectrum) -> Dict[str, Any]:
88
+ def compute_radial_spectrum(spectrum):
722
89
  """
723
- 计算拓扑不变量
724
-
725
- Args:
726
- spectrum: 量子标架谱
727
-
728
- Returns:
729
- 拓扑不变量字典(Chern 数等)
90
+ 向后兼容函数 - 已整合到 QFrameSpectrum.radial_average()
730
91
  """
731
- analyzer = QuantumSpectralAnalyzer()
732
-
733
- chern_number = analyzer.compute_chern_number(spectrum)
734
-
735
- return {
736
- 'chern_number': chern_number,
737
- 'total_energy': spectrum.total_energy(),
738
- 'uncertainty_product': spectrum.uncertainty_product(),
739
- 'hbar': spectrum.hbar
740
- }
741
-
92
+ warnings.warn(
93
+ "compute_radial_spectrum() 已弃用,请使用 spectrum.radial_average()",
94
+ DeprecationWarning,
95
+ stacklevel=2
96
+ )
97
+ return spectrum.radial_average()
742
98
 
743
- # ========== 导出 ==========
744
99
 
100
+ # 导出列表
745
101
  __all__ = [
746
102
  # 核心类
103
+ 'QFrame',
104
+ 'QuantumState',
105
+ 'PathIntegral',
106
+ 'QFrameSpectrum',
107
+
108
+ # 向后兼容别名
747
109
  'QuantumFrameSpectrum',
748
110
  'QuantumFrameTransformer',
749
- 'GPUQuantumFrameTransformer',
750
- 'QuantumSpectralAnalyzer',
751
111
 
752
- # 基础函数
112
+ # 便利函数
113
+ 'spectral_transform',
114
+ 'inverse_spectral_transform',
115
+
116
+ # 向后兼容函数
753
117
  'quantum_frame_transform',
754
118
  'inverse_quantum_transform',
755
119
  'compute_quantum_spectral_density',
756
120
  'compute_radial_spectrum',
757
- 'verify_quantum_unitarity',
758
121
 
759
- # 高级量子几何
760
- 'compute_quantum_curvature_field',
761
- 'compute_berry_phase',
762
- 'compute_topological_invariants',
122
+ # 常数
123
+ 'HBAR',
124
+ 'GPU_AVAILABLE',
763
125
  ]