A client python API for accessing LightSolver's capabilities
Project description
LightSolver Client
The LightSolver Client is a Python package designed to interface with the LightSolver Cloud Platform to facilitate solving problems on LightSolver's LPU (Laser Processing Unit) and dLPU (digital-LPU) solvers.
This package is designated for early access to features during the development process and serves as a prototype for future versions of the production LightSolver Client.
Features
- QUBO DLPU Problem Solving: The
solve_qubofunction accepts a QUBO problem, represented either as a 2D array (matrix) or an adjacency list, and returns the solution using the dLPU. - Synchronous and Asynchronous Operation: Users can choose between blocking (synchronous) and non-blocking (asynchronous) modes during problem solving.
- Fetching Account Details: Account information is available through this client. Includes: email, dLPU solve time remaining, dLPU variable count ("spin") limit and the user's expiration date.
- Flexible Installation: Compatible with both Windows and MacOS systems.
- LPU Solvers: Dedicated methods for solving problems on the Laser Processing Unit (LPU):
solve_qubo_lpu: Solves QUBO problems on the LPUsolve_coupling_matrix_lpu: Solves coupling matrix problems on the LPU
Solve QUBO DLPU
The solve_qubo function solves QUBO problems, either represented by a 2D array (matrix) or by an adjacency list, over the dLPU. For code samples, see the /tests directory.
Input Matrix Validity
- The matrix must be square.
- The matrix supports int or float cell values.
Return Value
A dictionary with the following fields:
- 'id': Unique identifier of the solution.
- 'solution': The solution as a Python list() of 1s and 0s.
- 'objval: The objective value of the solution.
- 'solverRunningTime': Time spent by the solver to calculate the problem.
- 'receivedTime': Timestamp when the request was received by the server.
Solve QUBO LPU
The solve_qubo_lpu function solves QUBO problems on the Laser Processing Unit (LPU).
Input Requirements
- Matrix dimensions must be between 5x5 and 100x100
- Problem can be specified using one of these parameters:
matrixData: A 2D array (matrix) of int or float valuesedgeList: An adjacency list in the format[[i, j, value], ...]where:i,j: Node indices (1-based)value: Weight of the connection between nodes i and j
- The matrix must be symmetric (will be symmetrized if not)
Additional Parameters
num_runs: Number of times to run the solver (default: 1)waitForSolution: Whether to wait for the solution (default: True). When False, the function will return immediately with a token object, allowing the script to continue while the server processes the QUBO problem.
Return Value
A dictionary containing:
- 'command': The solver command type ('LPU')
- 'data': A dictionary containing:
- 'solutions': A list of solution dictionaries, one per run, each containing:
- 'solution': The solution as a list of binary values
- 'objval': The objective value of the solution
- 'solverRunningTime': Time spent calculating the solution on the LPU
- 'solution_warnings': (optional) Warning message, for example, if the problem is at the performance boundary of the LPU
- 'creation_time': Timestamp when the result was created
- 'reqTime': Timestamp when the request arrived at the server
- 'id': Unique identifier for this request
- 'userId': ID of the requesting user
- 'receivedTime': Timestamp when the request was received by the server
Solve Coupling Matrix LPU
The solve_coupling_matrix_lpu function solves coupling matrix problems on the LPU.
Input Matrix Requirements
- Must be a numpy array of type
numpy.complex64 - Matrix dimensions must be between 5x5 and 100x100
- The matrix represents coupling strengths between lasers
Return Value
A dictionary containing:
- 'command': The solver command type ('LPU')
- 'data': A dictionary containing:
- 'solutions': A list of solution dictionaries, one per run, each containing:
- 'phase_problem': List of phase differences between nodes
- 'energy_problem': List of energy values for the solution
- 'contrast_problem': List of contrast measures for the solution
- 'solverRunningTime': Time spent calculating the solution on the LPU
- 'warnings': (optional) Dictionary containing measurements that could indicate a problematic solution, for example:
- 'Contrast reference': Contrast of laser pairs in the reference run
- 'Energy reference': List of laser pair energy values in the reference run
- 'Contrast problem': Contrast of laser pairs in the problem run
- 'Energy problem': List of laser pair energy values in the problem run
- 'creation_time': Timestamp when the result was created
- 'reqTime': Timestamp when the request arrived at the server
- 'id': Unique identifier for this request
- 'userId': ID of the requesting user
- 'receivedTime': Timestamp when the request was received by the server
Synchronous and Asynchronous Usage
- Synchronous Mode (Default): The
waitForSolutionflag is set to True by default. The function blocks operations until a result is received. - Asynchronous Mode: Set
waitForSolutionto False. The function returns immediately with a token object, allowing the script to continue while the server processes the QUBO problem.
Fetching Account Details
The get_account_details() function returns a python dictionary containing the following keys:
- 'dlpu_spin_limit': an int indicating the largest matrix size the user can send to the dlpu (dimensions of dlpu_spin_limit X dlpu_spin_limit).
- 'username': the username / email associated with this user. String.
- 'expiration_date: an Epoch timestamp indicating when the user expires. Int.
- 'dlpu_credit_seconds': solve time remaining for the user. Float.
Setting Up
Prerequisites
- Operating System: MacOS or Windows 11.
- Valid token for connecting to the LightSolver Cloud (provided separately).
- Python 3.10 or higher (Download Here).
- Select the appropriate MacOS/Windows version at the bottom.
- Note: for Windows installation, switch on the "Add to Path" option in the wizard.
- Highly Recommended: Use a virtual environment before installing laser-mind-client (Please see detailed action further below under the relevant OS).
Installation
Complete the installation on Windows or MacOS as described below. For further assistance with setup or connection issues, contact support@lightsolver.com.
Windows
-
Press the windows key, type "cmd", and select "Command Prompt".
-
Navigate to the root folder of the project where you plan to use the LightSolver Client:
cd <your project folder>
- (Recommended) Create and activate the virtual environment:
python -m venv .venv
.venv\Scripts\activate
- Install the laser-mind-client package:
pip install laser-mind-client
- (Recommended) Test using one of the provided test examples. Under the above project folder unzip "lightsolver_onboarding.zip."
cd lightsolver_onboarding
open test_solve_qubo_matrix.py file for edit
enter the provided TOKEN in line 6 (userToken = "<my_token>")
python ./tests/test_solve_qubo_matrix.py
MacOS
-
Open new terminal window.
-
Navigate to the root folder of the project where you plan to use the LightSolver Client:
cd <your project folder>
- (Recommended) Create and activate the virtual environment:
python3 -m venv .venv
chmod 755 .venv/bin/activate
source .venv/bin/activate
- Install the laser-mind-client package.
pip install laser-mind-client
- (Recommended) Test using one of the provided test examples. Under the above project folder unzip "lightsolver_onboarding.zip."
cd lightsolver_onboarding
open test_solve_qubo_matrix.py file for edit
enter the provided TOKEN in line 6 (userToken = "<my_token>")
python3 ./tests/test_solve_qubo_matrix.py
Authentication
Initialization of the LaserMind class automatically forms a secure and authenticated connection with the LightSolver Cloud.
Subsequent calls by the same user are similarly secure and authenticated.
Usage
To begin solving any QUBO problem:
- Create an instance of the
LaserMindclass. This class represents the client that requests solutions from the LightSolver Cloud. - By default, all logs are printed to laser-mind.log file in current directory and to console. Output to console can be disabled by setting
logToConsole=False - Call the
solve_qubofunction using either a matrix or an adjacency list. Note: You may either provide a value formatrixDataor foredgeList, but not both.
Error Handling
All functions in the LightSolver Client will raise exceptions when errors occur. These exceptions include:
- Connection errors (e.g., "No access to LightSolver Cloud")
- Input validation errors (e.g., invalid matrix dimensions)
- Internal server errors
It's recommended to wrap API calls in try-except blocks to handle potential errors gracefully:
try:
result = client.solve_coupling_matrix_lpu(matrixData=coupling_matrix)
except Exception as e:
print(f"Error solving problem: {str(e)}")
Examples
Find examples of every feature in laser-mind-client under the "tests/" directory.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file laser_mind_client-0.34.0.tar.gz.
File metadata
- Download URL: laser_mind_client-0.34.0.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
832671d7982686244795bbd81544dad4b1b22e4f4c0d089f412bf4673235a54a
|
|
| MD5 |
e9043b97eec4b595e4364b4b5cd7459e
|
|
| BLAKE2b-256 |
531d84f11588b12923378e30c73716e2bdcf5dfa4da859c14361a04ada45ff16
|
Provenance
The following attestation bundles were made for laser_mind_client-0.34.0.tar.gz:
Publisher:
build-publish-pypi.yml on LightSolverInternal/laser-mind-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
laser_mind_client-0.34.0.tar.gz -
Subject digest:
832671d7982686244795bbd81544dad4b1b22e4f4c0d089f412bf4673235a54a - Sigstore transparency entry: 228701232
- Sigstore integration time:
-
Permalink:
LightSolverInternal/laser-mind-client@668008603f9de30ed31e194c54db565bb9f3f3cf -
Branch / Tag:
refs/heads/production - Owner: https://github.com/LightSolverInternal
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
self-hosted -
Publication workflow:
build-publish-pypi.yml@668008603f9de30ed31e194c54db565bb9f3f3cf -
Trigger Event:
push
-
Statement type:
File details
Details for the file laser_mind_client-0.34.0-py3-none-any.whl.
File metadata
- Download URL: laser_mind_client-0.34.0-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a55892cceb20696e4ccf9871cff534aed5c76d7ace42a7e520ee7a534b98ce09
|
|
| MD5 |
ef8cbbf0258e51459ec065877ec39cfe
|
|
| BLAKE2b-256 |
938c7d6d4c6c104a86c5870a3ae2c8039ed224ed37c47576bcf0104e98f11f60
|
Provenance
The following attestation bundles were made for laser_mind_client-0.34.0-py3-none-any.whl:
Publisher:
build-publish-pypi.yml on LightSolverInternal/laser-mind-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
laser_mind_client-0.34.0-py3-none-any.whl -
Subject digest:
a55892cceb20696e4ccf9871cff534aed5c76d7ace42a7e520ee7a534b98ce09 - Sigstore transparency entry: 228701296
- Sigstore integration time:
-
Permalink:
LightSolverInternal/laser-mind-client@668008603f9de30ed31e194c54db565bb9f3f3cf -
Branch / Tag:
refs/heads/production - Owner: https://github.com/LightSolverInternal
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
self-hosted -
Publication workflow:
build-publish-pypi.yml@668008603f9de30ed31e194c54db565bb9f3f3cf -
Trigger Event:
push
-
Statement type: