Skip to content

Argmaster/CSSFinder

 
 

Repository files navigation

CSSFinder

GitHub release GitHub Release Date - Published_At PyPI release PyPI Downloads Supported Python versions Supported Python implementations license_mit Pull requests Open issues GitHub repo size GitHub code size in bytes GitHub Repo stars Poetry Code Style

CSSFinder - Closest Separable State Finder

CSSFinder is a software designed to find the closest separable state (CSS) for a given quantum state. This helps in quantifying entanglement and classifying quantum states as entangled or separable.

This software has been designed in a modular way. This is manifested by the separation of the main part, which contains the user interface and modularity support elements, from the algorithm implementation. The main part was written in Python and uses the mechanisms of Python modules. Since it is possible to craft shared libraries in such a way that Python imports them as native modules any compiled language can be used to create highly optimized implementations of desired algorithms. Such implementations are called backends and they use minimalistic interface to interact with main part of the program.

In parallel with the development of this main part, two implementations of the algorithm were created:

  • cssfinder_backend_numpy - based on Python NumPy library implementing highly optimized multidimensional arrays and linear algebra.
  • cssfinder_backend_rust - based on Rust ndarray crate which is an equivalent of NumPy from Rust language world.

Development of those two implementations allowed us to better understand limits of what can and what can not become faster.

Documentation

CSSFinder online documentation can be found here.

Installation

To install CSSFinder from PyPI, use pip in terminal:

pip install cssfinder

You will have to also install a backend package, which contains concrete implementation of algorithms. Simples way is to just install numpy or rust extras set:

pip install cssfinder[numpy]
pip install cssfinder[rust]

For more detailed description of installation process visit CSSFinder online documentation.

Quick start guide

For quick start guide please visit Quick Start Guide in CSSFinder online documentation.

Command line interface

To display command line interface map use following command:

cssfinder show-command-tree

Output should look similar to this:

 ...cssfinder show-command-tree
main                           - CSSFinder is a script for finding closest separable states.
├── clone-example              - Clone one of examples to specific location.
├── create-new-json-project    - Create new JSON based project directory `<name>` in current working directory.
├── create-new-python-project  - Create new Python based project directory `<name>` in current working
├── list-backends              - List available backends.
├── list-examples              - Show list of all available example projects.
├── project                    - Group of commands for interaction with projects.
│   ├── add-gilbert-task       - Add new gilbert algorithm task.
│   ├── create-json-summary    - Load and display project.
│   ├── create-task-report     - Create short report for task.
│   ├── inspect                - Load project from PROJECT_PATH and display its contents.
│   ├── inspect-output         - Load project from PROJECT_PATH and display output of task specified by
│   ├── inspect-tasks          - Load project from PROJECT_PATH and inspect configuration of tasks specified by
│   ├── list-tasks             - Load project from PROJECT_PATH and list names of all tasks defined.
│   ├── run-tasks              - Run tasks from the project.
│   └── to-python              - Load project from JSON_PROJECT_PATH and convert it to Python based project.
└── show-command-tree          - Show the command tree of your CLI.

Development

For development guidelines please visit Development in CSSFinder online documentation.