Diffractive Optics in Python
PyOptica is a Python package for simulation of diffractive optics. We implemented numerical methods in a pythonic way; it is one of the most important presupposition of the whole project to follow the Zen of Python and create a structure that is known to users from the most popular scientific packages: NumPy or SciPy.
The package is meant to provide functionality to propagate a wavefront through space, interact with optical elements (e.g. lenses or apertures), build optical systems, and to implement basic algorithms for holography. PyOPtica is a continuous work in progress – we are consistently developing new features.
Should you find our project worthwhile and would like to help us in development, we are looking for contributors. Everybody is welcome – both experienced developers or optical engineers and students who have just embarked on their adventure with optics.
To explore capabilities of PyOptica please visit our Gallery of use cases and Blog!
We focus on optics but make sure that the code is clean. We follow then Zen of Python, SOLID principles and TDD. Our focus is on potential users; we make the code readable and the entry threshold as low as possible.
Each implemented module is well documented including literature references (yes – we always provide sources on which software is based). On top of that each functionality comes with a usage example!
To best way (the only way?) to learn something is to do it! We provide interactive aplets demonstrating physical phenomena.
When designing the API we focus on the users. With PyOptica you can build a system of multiple optical elements in a single line. We do not simply follow textbooks but think about optical problems from the software development perspective.
We decided to go with our own approach to plotting. Of course we did not reinvent the wheel – matplotlib is at plotting engine. Following the SOLID principles we implemented plotting functionality so that we Do Not Repeat Ourselves. It is open to extensions and closed to modifications.
Our mission is to provide a robust Python library for numerical methods of optics. It is developed fully and solely in our free time as a contribution the open source community.
Access to the code, example gallery, blog (recent studies!), and future plans.
People driving the development of PyOptica.
An aspiring physicist passionate about optics and imaging.
Optical Engineer
PyOptica is open for contributors! Anyone can submit a PR or participate in development!