pyOpTools
pyOpTools is an open-source Python and Cython library for simulating optical systems using 3D non-sequential ray tracing, component modeling, and wavefront calculations.
Originally developed by the technological development team at Combustión Ingenieros S.A.S. and Colombian Imaging Technologies S.A.S..
Features
- 3D Ray Tracing: Fast 3D non-sequential ray tracing with Eigen-accelerated coordinate transformations and intersection solvers.
- Optical Component Library: Spherical lenses, aspheric lenses, prisms, mirrors, apertures, stops, detectors, and compound optical systems.
- Vendor Catalogs: Built-in access to commercial optics catalogs (Thorlabs, Edmund Optics).
- Wavefront Propagation & Diffraction: Rayleigh-Sommerfeld, Angular Spectrum, and Fractional Fourier Transform methods.
- Interactive Visualization: 3D interactive system visualization in JupyterLab and Marimo using Plotly and WebGL.
Installation
pyOpTools requires Python 3.10+.
Using uv (Recommended)
# Add to an existing uv project:
uv add pyoptools
# Or install in your virtual environment:
uv pip install pyoptools
Using pip
pip install pyoptools
Quickstart
Here is a simple example showing how to build an optical system with a spherical lens and trace a ray:
from pyoptools.raytrace.comp_lib import SphericalLens
from pyoptools.raytrace.ray import Ray
from pyoptools.raytrace.system import System
# 1. Define optical components
lens = SphericalLens(
radius=25.0,
thickness=5.0,
curvature_s1=1.0 / 100.0,
curvature_s2=-1.0 / 100.0,
material=1.5168,
)
# 2. Assemble the optical system
system = System(complist=[(lens, (0, 0, 50), (0, 0, 0))], n=1.0)
# 3. Define an incident ray and propagate
ray = Ray(origin=(0, 10, 0), direction=(0, 0, 1), wavelength=0.589)
system.ray_add(ray)
system.propagate()
# 4. Inspect traced ray and component hits
final_rays = ray.get_final_rays()
print("Final ray direction:", final_rays[0].direction)
print("Impacts on lens:", len(lens.hit_list))
Documentation
Comprehensive documentation, tutorials, and API reference are available at: https://pyoptools.readthedocs.io/
Contributing & Development
We welcome contributions! Please see:
- CONTRIBUTING.md for developer setup, testing, and pull request guidelines.
- AGENTS.md for automated agent and internal architectural guidelines.
To set up a local development environment:
git clone https://github.com/cihologramas/pyoptools.git
cd pyoptools
uv sync
uv run python setup.py build_ext --inplace
uv run pytest
Metadata
Release files for pyoptools 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 234.6 MB
Release files / pyoptools-0.4.1-cp313-cp313-win_amd64.whl
| Download URL | pyoptools-0.4.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 14.7 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
93e75a62f7dc58cb98c33c51f8d09058d72c06e615d590c9ffbc2cdff7605385
|
|
BLAKE2b-256 checksum How to use checksums |
c478831b69bd5cabdea288e778a84c25c9d9353ba7aadda704856484f7566b29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pyoptools-0.4.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 29.6 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
33826ff0e109009e8ec434b2ef4446960eeded7fe8f4ce798bfb719c83f2a16d
|
|
BLAKE2b-256 checksum How to use checksums |
4211d57f2a16004559d163e5989278d1aa5899285594b568b02eafae010a970a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pyoptools-0.4.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.8 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e8b257deadbce65da972e7093d38256220868ee65750115c1ec353afa8f2c29d
|
|
BLAKE2b-256 checksum How to use checksums |
e44faf21388085edec670895a21e2e763fa119d6819455895dbd34b38e34d141
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp312-cp312-win_amd64.whl
| Download URL | pyoptools-0.4.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 14.7 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f28b0b5383c8a66e28b01d921daef95d800b035013d56897aea6927ba95a1ed5
|
|
BLAKE2b-256 checksum How to use checksums |
de2c1df98a4d082102329ee981340ac52823ff1f6276f2f7c240bfa5c269375e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pyoptools-0.4.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 29.8 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e13752a4756347cf89cb779fddf6e2e3d999d7b0ff75d9ea25806e12069380f7
|
|
BLAKE2b-256 checksum How to use checksums |
820d05f1cd7f70099f11ec40aef378511b82b3b477c3a762b895f035f0de7997
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pyoptools-0.4.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.8 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8d9e4a5c07f91f4d9bb9b98ee651d0ff4aaf014e5aea58532a18509cb44295f8
|
|
BLAKE2b-256 checksum How to use checksums |
46f4cd7079eae89f4e9331fece0748526c76d6713d4c92adaca6016966a21b9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp311-cp311-win_amd64.whl
| Download URL | pyoptools-0.4.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 14.7 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9709029968c153d4d37c8ce1fdb53790a18747ad934cafaab28673452041befa
|
|
BLAKE2b-256 checksum How to use checksums |
2348796918a3c7acfbfacd666cc6142debd71300a89a269ce44e6157f3d1721e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pyoptools-0.4.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 29.6 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
bc1cf99f39922414b7cfafb1cc8d7e0773a189b98e11dafda49bb348417d44d3
|
|
BLAKE2b-256 checksum How to use checksums |
15953a47d9a61263b30c2a7947827177cd4d761f6e979831a49efec94a7e7211
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pyoptools-0.4.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.8 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
569cf99c7c72433a468b953dee77e0e13090728f677af4770ca4708b97fbf623
|
|
BLAKE2b-256 checksum How to use checksums |
bfda3a08ceecc256fe069668cae701d4831c853bb980fdbebad734aceab9874b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp310-cp310-win_amd64.whl
| Download URL | pyoptools-0.4.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 14.4 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f80f9e42b015a04189743e998a509dd213cd651bfce28f0127e9bac08bae7c87
|
|
BLAKE2b-256 checksum How to use checksums |
91bb24b966fd3ed6b24cc08a6d65b47d19b683bdd86e338aeef662ae4ecdce6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyoptools-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 27.8 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
e7355f646079b62c671892672746f3eb8632d4ad4843456e181eb1ec04fd2322
|
|
BLAKE2b-256 checksum How to use checksums |
a8b77694bcf358b0dd5c49763e0c8f7f2917da30ea0cc28b559544a91241555d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / pyoptools-0.4.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | pyoptools-0.4.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 14.8 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e7483c28786dd5c4a93d86d0de7e969dc7e75d0553c489f5daff94e962f90450
|
|
BLAKE2b-256 checksum How to use checksums |
561bca82a15c22556ef3f7248cad98f0594f5fd351779b2f57d9a49703dfd403
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for pyoptools 0.4.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.