Python client for Spaya
Project description
pyspaya
Description
Spaya API
This package provides an easy way to score SMILES with the Spaya API.
This restrosynthesis score (RScore) is a metric provided by the Spaya algorithms, related to the probability of a disconnection and consequently to the confidence the algorithm has on this disconnection/route.
Spaya API employs a data-driven AI approach to discover retrosynthetic routes. An iterative exploration of all possible routes is performed until commercially available starting materials are identified.
Useful links:
Score
Each scored SMILES return a RetrosynthesisResult:
from typing import Dict
from iktos.spaya import BearerToken, SpayaClientREST, RetrosynthesisResult
# Create a client
client = SpayaClientREST(url="https://spaya.ai", authorization=BearerToken(token="YourToken"))
# Start a retrosynthesis and wait for the results
result: Dict[str, RetrosynthesisResult] = client.score_smiles(smiles=["c1ccn2nccc2c1"])
# Show results
retro_result: RetrosynthesisResult = result["c1ccn2nccc2c1"]
print(f"Progress:{retro_result.progress} Status:{retro_result.status}")
print(f"Score:{retro_result.rscore} Number of steps:{retro_result.nb_steps}")
Clients
To match every case, this API provides 3 different clients:
SpayaClientREST: A synchronous clientSpayaClientAsync: An asynchronous client with reconnection and helpers for the websocketSpayaClientCallback: An asynchronous client that allows you to get results using a Callback
REST
SpayaClientREST sends SMILES synchronously to be scored
Example using a list of SMILES:
from iktos.spaya import BearerToken, SpayaClientREST
# Create client with authorization
client = SpayaClientREST(url="https://spaya.ai",
authorization=BearerToken("myT0ken"))
# Start a retrosynthesis and wait for the results
scored_smiles = client.score_smiles(smiles=["O=C1CCCCO1", "O=C1CCCNN1",])
# Show the results
for smiles, result in scored_smiles.items():
print(f"{smiles}: {result.rscore} / {result.nb_steps}")
Example using a DataFrame:
from iktos.spaya import BearerToken, SpayaClientREST
from pandas import DataFrame
# Create client with authorization
client = SpayaClientREST(url="https://spaya.ai/",
authorization=BearerToken("myT0ken"))
# Start a retrosynthesis and wait for the results with a dataframe
df = DataFrame({"input_smiles": ["O=C1CCCCO1", "O=C1CCCNN1",]})
df = client.score_smiles(
smiles=df,
dataframe_smiles_column="input_smiles",
callback_progression=lambda p: print(f"progression:{p}")
)
# Show the results
print(f"result: {df}")
Example using a list of SMILES and consume function:
from iktos.spaya import BearerToken, SpayaClientREST
# Create client with authorization
client = SpayaClientREST(url="https://spaya.ai/",
authorization=BearerToken("myT0ken"))
# Start a retrosynthesis
client.start_retrosynthesis(smiles=["O=C1CCCCO1", "O=C1CCCNN1",])
# Consume the results as soon as possible
while not client.is_empty:
for smiles, result in client.consume():
print(f"{smiles} {result}")
Async
SpayaClientAsync sends SMILES asynchronously to be scored
import asyncio
from iktos.spaya import BearerToken, SpayaClientAsync
async def score():
async with SpayaClientAsync(url="https://spaya.ai",
authorization=BearerToken("myT0ken")
) as client:
# Start scoring SMILES
await client.start_retrosynthesis(["O=C1CCCCO1", "O=C1CCCNN1",])
# Wait and print scores as soon as received
async for smiles, result in client.consume():
print(f"{smiles}: {result.rscore} / {result.nb_steps}")
asyncio.run(score())
Callback
SpayaClientCallback calls a function as soon as a SMILES is scored
import asyncio
from iktos.spaya import (
BearerToken, SpayaClientCallback, RetrosynthesisResult
)
async def generator(client: SpayaClientCallback):
# Generate and start scoring SMILES
for smiles in ["O=C1CCCCO1", "O=C1CCCNN1"]:
await client.start_retrosynthesis(smiles)
async def callback(smiles: str, result: RetrosynthesisResult):
# Handle the results
print(f"{smiles}: {result.rscore} / {result.nb_steps}")
async def generate_and_score():
async with SpayaClientCallback(url="https://spaya.ai",
authorization=BearerToken("myT0ken"),
callback=callback) as client:
# Generate SMILES
await generator(client)
# Block until the ends
await client.wait_result()
asyncio.run(generate_and_score())
Url and Authorization
To access the Spaya API, you need to generate a token from the Spaya API page in your
Spaya account
Unless specified, use the BearerToken class
Bearer token
The server is protected by a token
from iktos.spaya import BearerToken, SpayaClientREST
SpayaClientREST(url="https://spaya.ai", authorization=BearerToken(token="itb3cy0s..."))
Custom Bearer token
The server is protected by a token and it uses a custom header
from iktos.spaya import CustomBearerToken, SpayaClientREST
SpayaClientREST(
url="https://spaya.ai",
authorization=CustomBearerToken(token="itb3cy0s...", header_key="X-Iktos-Authorization")
)
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
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 pyspaya-1.1.1.tar.gz.
File metadata
- Download URL: pyspaya-1.1.1.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf1558baab3988d18734b8aa124c08d8fcf08e6f88576222b6ea09fbe88df657
|
|
| MD5 |
a5fad3a41fe09d878268f90b46e95ae5
|
|
| BLAKE2b-256 |
a02e216c83e31c18da6bfb0824f6f376b8f48b05e0b39382e625fbf8943a391a
|
File details
Details for the file pyspaya-1.1.1-py3-none-any.whl.
File metadata
- Download URL: pyspaya-1.1.1-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e24eb3de740fdb648d3c8cbd45e50ec9d9e513b67d71898c90538b869d1bcd8
|
|
| MD5 |
822a40cc70cb9ae5be55ba8222b83c6c
|
|
| BLAKE2b-256 |
f0006f216d4741f20138bcf2a1aecb5219b8843a45e71b1615aa7ff73971cef3
|