Optical Tweezers Force Engine — Python port of the OTS toolbox (Phase 1: Mie sphere, non-paraxial focused-beam force)
Project description
fatcuda
fatcuda is an intent-first optical tweezers force and field engine. It starts
from physical declarations - beam intent, optical system, particle or task, and
device policy - then lowers them into auditable intermediate representations and
verified CPU/CUDA/Metal execution paths.
The current production package lives in fatcuda/. The historical direct-port
implementation is archived in fatcuda_old/ and is kept only as an oracle,
comparison source, and history bundle.
Status
This project is still early. The current verified path focuses on homogeneous Mie spheres, non-paraxial Debye-Wolf focusing, multipole coefficients, field slices, force maps, and CPU/Metal/CUDA interface parity. APIs may still move while the package is prepared for a first public PyPI release.
Installation
After publication:
python -m pip install fatcuda
python -m pip install "fatcuda[metal]" # Apple Silicon / MLX path
python -m pip install "fatcuda[cuda12]" # CUDA 12 / CuPy path
For local development from this checkout:
python -m pip install -e ".[test,demo]"
python -m pip install -e ".[test,demo,metal]"
python -m pip install -e ".[test,demo,cuda12]"
The default portable execution path is CPU-only and depends on NumPy and SciPy.
Minimal Example
import numpy as np
from fatcuda import (
ForceAtPositions,
GaussianBeam,
OpticalSystem,
PupilGrid,
Sphere,
solve,
)
system = OpticalSystem(grid=PupilGrid(Nphi=32, Nr=16), power=1.0e-3)
beam = GaussianBeam(Ex0=1.0, Ey0=0.0)
sphere = Sphere(radius=0.2e-6, n_p=1.59, L=8)
task = ForceAtPositions(
positions=np.array(
[
[0.0, 0.0, 0.0],
[0.1e-6, 0.0, 0.0],
]
),
particle=sphere,
)
result = solve(
beam=beam,
system=system,
task=task,
strategy="auto",
device="cpu",
)
print(result.force)
print(result.torque)
print(result.audit.operator_plan)
Public API Shape
The recommended user flow is:
beam intent + optical system + particle/task + device/strategy -> auditable IR -> kernels
Common public declarations include:
| Concept | Examples |
|---|---|
| Beams | GaussianBeam, LaguerreGaussBeam, HermiteGaussBeam, AiryBeam, VortexBeam, SLMPhaseBeam |
| System | OpticalSystem, PupilGrid |
| Particles | Sphere |
| Tasks | ForceAtPositions, FieldSlice |
| Execution | solve, compile_problem, DevicePolicy, OperatorStrategy, PrecisionPolicy |
Verification
The repository uses MATLAB OTS fixtures, the current CPU NumPy path, and closed-form physics sanity checks as oracles. Typical local verification:
python -m pytest -q -p no:cacheprovider
CUDA numerical validation requires a CUDA machine. On macOS without CUDA, CUDA
tests are limited to import, collection, skip behavior, and shared-interface
non-breakage. Metal validation requires Apple Silicon with the metal extra
installed and MLX reporting Metal availability.
Documentation
The detailed code-layer notes live under doc/obsidian/fatcuda/代码层/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fatcuda-0.1.1.tar.gz.
File metadata
- Download URL: fatcuda-0.1.1.tar.gz
- Upload date:
- Size: 120.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e21485d6a1b457426b81fb2a8f066c012a7493d129d24e763fbf283e18389a8c
|
|
| MD5 |
53eba1fc7f6250778fb10c974faea318
|
|
| BLAKE2b-256 |
9b3195d97a25f2b4e8bca04e12b326e90c2b990c5ac0afacacfb69c07fa71203
|
File details
Details for the file fatcuda-0.1.1-py3-none-any.whl.
File metadata
- Download URL: fatcuda-0.1.1-py3-none-any.whl
- Upload date:
- Size: 142.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1642212de1ba36a0c4235011106ea9527d66dae65d382a61383ca989e27fe84c
|
|
| MD5 |
943f3ccdf8a87198b81f9fcab11de284
|
|
| BLAKE2b-256 |
e82222c14a4a2d94b5b16805fb55762cf9422763188776304d785de9818c3ac9
|