PyOptica

Numerical Methods of Optics

PyOptica

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!

Features

Clean Code photo

Clean Code

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.

Thoroughly Documented photo

Thoroughly Documented

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!

Interactive examples photo

Interactive examples

To best way (the only way?) to learn something is to do it! We provide interactive aplets demonstrating physical phenomena.

A user-oriented scientific package

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.

Plot whatever you need

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.

We do what we are passionate about

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.

Credits

People driving the development of PyOptica.

Maciej Grochowicz photo

Maciej Grochowicz

Co-Founder and Developer

An aspiring physicist passionate about optics and imaging.

Michał Miler photo

Michał Miler

Co-Founder and Developer

Optical Engineer

Placeholder person

You!

Community Contributors

PyOptica is open for contributors! Anyone can submit a PR or participate in development!

Open Chat