How to run this route from Python with the Ouro SDK.
API access requires an API key. Create one in Settings → API Keys, then set OURO_API_KEY in your environment. Install the SDK with pip install ouro-py.
POST /structure/supercellParameters and request body schema for this route.
2x2x23x3x34x4x42x2x13x3x14x4x1Predefined supercell size option (ignored when dimensions is set)
Range: to 50
Minimum total vacuum thickness in Å along vacuum_axis. Expands the cell and centers the slab if current vacuum is smaller. Typical for 2D materials: 15–20. Applied after the supercell transform.
Symmetry precision for structure analysis
Custom supercell dimensions [nx, ny, nz]. Overrides size when set. Use e.g. [5, 5, 1] for monolayers.
012Lattice axis for vacuum padding (0=a, 1=b, 2=c). Default c.
Angle tolerance for symmetry finding in degrees (°)
Pass the ID of an Ouro asset for each of these in input_assets. Ouro loads the asset and sends it to the route.
Each run saves these to Ouro. Read them by name from action.final_data.
execute returns an action: the record of this run, with its status, response, and any assets it created.
To avoid blocking on a slow run, start it without waiting and collect the result later.
By default a failed run comes back as an action with status error. Pass raise_on_error=True to raise an exception instead.
Every run is saved as an action. List yours, or read the logs of a single run. See the Python SDK reference for everything an action carries.
import os
from ouro import Ouro
ouro = Ouro(api_key=os.environ.get("OURO_API_KEY"))
# The ID also works, and stays the same if the route is renamed: "0bd98417-bc11-43e6-a67e-f301d57035cc"
route = ouro.routes.retrieve("hermes/expand-a-crystal-structure-into-a-supercell")
action = route.execute(
body={
"size": "2x2x2",
"vacuum": 0,
"symprec": 0.1,
"dimensions": [],
"vacuum_axis": 2,
"angle_tolerance": 5,
},
input_assets={
"file": "your-file-id",
},
)
print(action.status) # "success" or "error"
print(action.final_data)
# Assets the run created are keyed by output name
file = action.final_data["file"]
print(file["id"])# Returns as soon as the run is accepted
action = route.execute(
body={
"size": "2x2x2",
"vacuum": 0,
"symprec": 0.1,
"dimensions": [],
"vacuum_axis": 2,
"angle_tolerance": 5,
},
input_assets={
"file": "your-file-id",
},
wait=False,
)
print(action.id, action.status)
# Later, even from another process
action = ouro.routes.poll_action(str(action.id), poll_interval=5, timeout=1800)
print(action.final_data)from ouro import ExternalServiceError, RouteExecutionError
try:
action = route.execute(
body={
"size": "2x2x2",
"vacuum": 0,
"symprec": 0.1,
"dimensions": [],
"vacuum_axis": 2,
"angle_tolerance": 5,
},
input_assets={
"file": "your-file-id",
},
raise_on_error=True,
)
except ExternalServiceError as exc:
# The API behind this route failed
print(exc.status_code, exc.retryable)
except RouteExecutionError as exc:
print(exc.action_id, exc.status, exc.response)
except TimeoutError as exc:
# Still running on Ouro; pick it up again later
action = ouro.routes.poll_action(exc.action_id, timeout=None)route = ouro.routes.retrieve("hermes/expand-a-crystal-structure-into-a-supercell")
# Your runs of this route
actions = route.read_actions()
for action in actions:
print(action.id, action.status, action.created_at)
# One run and its logs
action = ouro.routes.retrieve_action("your-action-id")
for entry in action.read_logs(chronological=True):
print(entry.level, entry.message)Expand a crystal structure into a supercell and return a CIF file.
Size
size: presets 2x2x2, 3x3x3, 4x4x4 (bulk) or 2x2x1, 3x3x1, 4x4x1 (in-plane / 2D).
dimensions: custom [nx, ny, nz] (overrides size). Use e.g. [5, 5, 1] for monolayers like MoS2.
Vacuum (2D / slabs)
vacuum: minimum total vacuum in Å along vacuum_axis (default axis 2 = c). Expands the cell if needed and centers the slab. Typical values: 15–20 Å.
Does not extract a monolayer from bulk; pads whatever layers are already in the cell.
Limits: each dimension 1–20; result capped at 2000 atoms.
Response includes the CIF plus lattice parameters and resolved vacuum for both the input and supercell.
Execution
Usage
159 callsView history