Metadata-Version: 2.4
Name: dydact-lab
Version: 0.1.0
Summary: Official Python SDK for DOLAS Lab — universal-substrate reasoning API
Author-email: DOLAS <lab@dydact.io>
License: Apache-2.0
Project-URL: Homepage, https://lab.dydact.io
Project-URL: Documentation, https://orthogonalabs.dydact.io
Project-URL: Source, https://github.com/dydact/dydact-lab-python
Keywords: dolas,dydact,constraint-satisfaction,sudoku,sat,chemistry,smiles,symbolic-math
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: httpx<1.0,>=0.27
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Requires-Dist: ruff>=0.5; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"

# dydact-lab

Official Python SDK for **DOLAS Lab** — universal-substrate reasoning API.

Zero-parameter, zero-training geometric compilation across domains: symbolic math, constraint satisfaction (Sudoku, SAT), chemistry (SMILES), and circuit equivalence — all served from a single op-routed endpoint.

```bash
pip install dydact-lab
```

## Quickstart

```python
from dydact_lab import Lab

lab = Lab(api_key="sk-dol-...")           # or set env DOLAS_API_KEY

# Math — LaTeX, sympy, or Python syntax
r = lab.math.evaluate("sqrt(3**2 + 4**2)")
print(r.result["value"])                   # → 5.0

# Sudoku — any perfect-square N (4, 9, 16, 25)
grid = [[5,3,0,0,7,0,0,0,0], ...]
r = lab.sudoku.solve(grid)
print(r.result["solved"], r.elapsed_ms)    # → True, ~30 ms

# Chemistry — SMILES → geometric signature + zero-shot properties
r = lab.smiles.encode("CN1C=NC2=C1C(=O)N(C(=O)N2C)C")  # caffeine
print(r.result["properties"]["molecular_weight"])

# Circuit equivalence — ISCAS'85 .bench format
r = lab.circuit.equivalence(bench_a, bench_b)
print(r.result["equivalent"])

# Boolean SAT — CNF as list of [(var_idx, negated), ...]
clauses = [[(0,False),(1,True),(2,False)], [(0,True),(1,False),(2,True)]]
r = lab.sat.solve(clauses, n_vars=3)
print(r.result["sat"], r.result["assignment"])
```

## Async

```python
import asyncio
from dydact_lab import AsyncLab

async def main():
    async with AsyncLab(api_key="sk-dol-...") as lab:
        r = await lab.math.evaluate("2+2")
        print(r.result["value"])

asyncio.run(main())
```

## Capability discovery

```python
lab.ops()    # → list of all ops + schemas supported by the deployed backend
```

## Unified compute (low-level)

Every namespace call routes through the same single endpoint:

```python
r = lab.compute("math.evaluate", {"math": "2+2"})
```

This is by design — minimizes API surface, makes adding new ops a backend-only change.

## Reproducibility

Every response includes a `trace_id` (SHA-256 of `op + input + options`) you can cite in publications. The compiler is deterministic given input + seed.

## Tiers + auth

- **Academic** — free for verified `.edu` researchers (citation required)
- **Pro Researcher** — $79/mo
- **Lab Enterprise** — $2,500/mo
- **DOLAS Strategic** — contracted

Sign up: <https://lab.dydact.io/signup>

## License

Apache-2.0.
