Skip to content
/ linopt Public

Linear optics circuit calculator

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING
Notifications You must be signed in to change notification settings

qotlabs/linopt

Repository files navigation

Linopt

Linopt is a library for linear optics calculations. It consists of C++11 core library and Python bindings to it.

Getting started

Linopt has the following directory structure:

  • lib -- C++ library source code,
  • examples -- examples of C++ library using,
  • pylib -- Python bindings to C++ library,
  • pyexamples -- Python example scripts.

Prerequisites

Linopt uses Eigen library for matrix operations and pybind11 for Python bindings to C++ code. We use Doxygen to generate documentation from the source code comments.

  • Eigen -- library for linear algebra.
  • pybind11 -- library for exposing C++ types in Python.
  • OpenMP -- API for parallel programming.
  • Doxygen -- documentation generator from source code.

Building

Linopt is likely to compile with any C++11 compatible compiler which is supported by its dependencies (libraries from prerequisites section). We have tested Linopt with the following compilers:

  • GCC 7.2 or newer,
  • Microsoft Visual Studio 2017.

We develop Linopt under Ubuntu 18.04 and provide Makefiles for building. To build C++ library you should run make command from the lib directory. It will generate static version of the library liblinopt.a. Type make help for a list of available commands.

If you want to build Python version of the library go to pylib directory and execute make in it. If the build is successful Python module linopt.so will appear. We also provide Qt Creator project files (with extension *.creator) for convenience (however, Qt Creator uses the same Makefiles for building).

Makefile for building Python version of Linopt assumes that pybind11 Python module is installed on your system. The easiest way to get it is via PIP:

sudo -H pip3 install pybind11

This command will install pybind11 system-wide for Python 3.

Documentation

Documentation is available here. The most recent version of documentation can be generated from the source code using Doxygen. Simply run make doc in the lib directory.

About

Versioning

We use SemVer for versioning.

Currently this project is under initial development, so the major version is 0.

Contributing

Contributing to Linopt is done via pull request mechanism. See CONTRIBUTING.md for more details.

Authors

License

Copyright © 2018-2020, Quantum Optical Technologies Laboratories.

Linopt is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Linopt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See COPYING and COPYING.LESSER for more details.