Skip to main content

Sawatabi is an application framework to develop and run stream-data-oriented Ising applications with quantum annealing.

Project description

sawatabi-logo

sawatabi

PyPI PyPI - Python Version GitHub repo size GitHub Workflow Status Codecov branch GitHub Code style: black

Sawatabi is an application framework to develop and run stream-data-oriented Ising applications with quantum annealing.

Visualization of a Sample Sawatabi Application

The animation shows visualization of Outlier Detection Problem and its solutions obtained by a Sawatabi application. The Ising fomulation for the Outlier Detection Problem proposed in [1] is used. The left figure represents continuous input event data (stream-data) where blue points mean normal values and red points mean abnormal values (outliers). The right figure represents solutions for Outlier Detection for each window of the input stream-data. The boxes try to cover only normal points as much as possible.

Outlier_Detection_JMA_Tokyo_202010_WINDOW

[1] V. N. Smelyanskiy, E. G. Rieffel, S. I. Knysh, C. P. Williams, M. W. Johnson, M. C. Thom, W. G. Macready, and K. L. Pudenz, "A near-term quantum computing approach for hard computational problems in space exploration," arXiv:1204.2821 [quant-ph], 2012. Available: https://arxiv.org/abs/1204.2821

Usage

Installation

pip install sawatabi

Sample Applications

This section only describes a sample application of NPP (Number Partition Problem), for other sample applications please see:
https://github.com/kotarot/sawatabi/tree/main/sample/algorithm

To run a sample NPP (Number Partition Problem) Sawatabi application on local environment

The following application reads numbers from a local file, run continuous annealing computations to solve NPP on local environment, and writes solutions to the stdout:

python sample/algorithm/npp_window.py --input="tests/algorithm/numbers_100.txt"

To run a sample NPP (Number Partition Problem) Sawatabi application on Google Cloud Dataflow using Google Cloud Pub/Sub

Please prepare your GCP service account credentials as ./gcp-key.json and open three terminals.

[1st terminal] The Pub/Sub publisher continuously publishes numbers to the specified Pub/Sub topic:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/pubsub/publish_pubsub.py \
        --project=<PROJECT> \
        --topic=<TOPIC> \
        --interval=1.0 \
        --random-number

where

  • <PROJECT> is your GCP project name, and
  • <TOPIC> is your Google Cloud Pub/Sub topic name to publish messages (numbers) to.

[2nd terminal] The Pub/Sub subscriber continuously subscribes solutions from the specified Pub/Sub subscription:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/pubsub/subscribe_pubsub.py \
        --project=<PROJECT> \
        --subscription=<SUBSCRIPTION>

where

  • <PROJECT> is your GCP project name, and
  • <SUBSCRIPTION> is your Google Cloud Pub/Sub subscription name to subscribe messages (solutions) from.

[3rd terminal] The following application reads numbers from the given Pub/Sub topic, run continuous annealing computations to solve NPP on Google Cloud Dataflow, and writes solutions to the given Pub/Sub topic:

GOOGLE_APPLICATION_CREDENTIALS="./gcp-key.json" \
    python sample/algorithm/npp_window.py \
        --project=<PROJECT> \
        --input-topic=<INPUT_TOPIC> \
        --output-topic=<OUTPUT_TOPIC> \
        --dataflow \
        --dataflow-bucket=<DATAFLOW_BUCKET>

where

  • <PROJECT> is your GCP project name,
  • <INPUT_TOPIC> is your Google Cloud Pub/Sub topic name of input,
  • <OUTPUT_TOPIC> is your Google Cloud Pub/Sub topic name of output, and
  • <DATAFLOW_BUCKET> is your GCS bucket name for Dataflow temporary files.

Solvers

If you would like to use the D-Wave solver

Please give credentials directly to the sawatabi.solver.DWaveSolver() constructor arguments, or set up a config using dwave-cloud-client:

$ dwave config create
Configuration file not found; the default location is: /path/to/your/location/dwave.conf
Configuration file path [/path/to/your/location/dwave.conf]:
Configuration file path does not exist. Create it? [y/N]: y
Profile (create new) [prod]: dev
API endpoint URL [skip]: xxxxxxxxxxxxxxxx
Authentication token [skip]: xxxxxxxxxxxxxxxx
Default client class [skip]:
Default solver [skip]: Advantage_system1.1
Configuration saved.

If you would like to use the Fixstars GPU solver (Optigan)

Please give credentials directly to the sawatabi.solver.OptiganSolver() constructor arguments, or set up a API Token in ~/.optigan.yml:

api:
    endpoint: http://optigan.example.com/method
    token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

For Contributions to the Sawatabi Framework

Please set up a development environment as follows:

python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install --editable ".[dev]"

Acknowledgement

This work is supported by the MITOU Target program from Information-technology Promotion Agency, Japan (IPA).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sawatabi-0.0.3.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

sawatabi-0.0.3-py3-none-any.whl (51.1 kB view details)

Uploaded Python 3

File details

Details for the file sawatabi-0.0.3.tar.gz.

File metadata

  • Download URL: sawatabi-0.0.3.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.6

File hashes

Hashes for sawatabi-0.0.3.tar.gz
Algorithm Hash digest
SHA256 cba56ffd6767bef55b032c1cb27febacb4e48c792c901f321335efa8af82f199
MD5 902462feb5d517f6a4235e0640265067
BLAKE2b-256 dd61b6b68630d9e1fbb26fa63f6da678f7d2841783b7833730fca32da1b6d2dc

See more details on using hashes here.

File details

Details for the file sawatabi-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: sawatabi-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 51.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.6

File hashes

Hashes for sawatabi-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 15bee2313ff18f46132a032eaacd74bc20ec64ad884a1de0677ed32528533f4a
MD5 771e3dd414be82f621461e8a2f32a769
BLAKE2b-256 1fb94ae72447daab2f26b5de01b4897827a760a1aa2e308c38c7baab77e30a7d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page