Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
895957d
libre scripts
Gonza10V Apr 25, 2024
53b05cc
adding dark mode logo
Gonza10V Jan 7, 2025
8772de8
Update README.md with new logo
Gonza10V Jan 7, 2025
792f1eb
new sbol2assembly function and script
Gonza10V May 15, 2025
6287ae4
Update assembly.py
LukeDysart17 May 19, 2025
6c66831
LukeChangetoPUDU
LukeDysart17 May 20, 2025
b42071c
Update run_sbol2assembly_libre.py
LukeDysart17 May 21, 2025
ed63cbf
Update run_sbol2assembly_libre.py
LukeDysart17 May 21, 2025
f1ab491
practice push
LukeDysart17 May 21, 2025
f572676
practice push
LukeDysart17 May 21, 2025
5b7eaec
practice push
LukeDysart17 May 21, 2025
06e8904
found error that needs to be addressed with enzyme
LukeDysart17 May 21, 2025
7aad891
adding xlsx output to sbol2assembly
Gonza10V May 22, 2025
4fa7dc7
adds a file creation call
LukeDysart17 May 22, 2025
a920d87
fixes indentation error
LukeDysart17 May 22, 2025
e280cc6
fixes minor bugs
LukeDysart17 May 22, 2025
63ccdae
fixes minor bugs
LukeDysart17 May 22, 2025
b611f49
fixes minor bugs
LukeDysart17 May 22, 2025
d28f375
added xml to dictionary code
LukeDysart17 Jun 4, 2025
286ac0f
added xml to dictionary code
LukeDysart17 Jun 4, 2025
5a086e1
added xml to dictionary code
LukeDysart17 Jun 4, 2025
45bb674
recursive update to sbol2 assembly untested
LukeDysart17 Jun 4, 2025
8c694ab
recursive update to sbol2 assembly untested
LukeDysart17 Jun 4, 2025
506b238
recursive update to sbol2 assembly untested
LukeDysart17 Jun 4, 2025
b4e61c2
recursive update to sbol2 assembly untested
LukeDysart17 Jun 4, 2025
a5dec1f
recursive update to sbol2 still error with load_module
LukeDysart17 Jun 4, 2025
e0a8e35
added xml to dictionary code
LukeDysart17 Jun 5, 2025
7049187
revert back to old
LukeDysart17 Jun 5, 2025
74335f5
updates to assembly
LukeDysart17 Jun 5, 2025
f766007
updates to assembly
LukeDysart17 Jun 5, 2025
01f24d5
3 different dictionaries with promoters
LukeDysart17 Jun 11, 2025
b3db297
Added the dictionary list creator to utils
LukeDysart17 Jun 11, 2025
f44c016
Added the dictionary list creator to utils
LukeDysart17 Jun 12, 2025
b15f000
Fixed bug in dictionaryListCreator
LukeDysart17 Jun 16, 2025
1c48e22
Fixes to dictionary list creator so it can be used in runsbol2
LukeDysart17 Jun 18, 2025
03355e3
edits to runsbol2 to have the xml go directly to assembly
LukeDysart17 Jun 18, 2025
5f81313
added three promoter golden gate function to my utils
LukeDysart17 Jun 18, 2025
05e6623
Added temporary utils to avoid import errors
LukeDysart17 Jun 18, 2025
5a10e7c
Additions to assembly, still does not work issues with tempUtils import
LukeDysart17 Jun 18, 2025
ad29059
new dev repo
Gonza10V Jun 20, 2025
2dcd62b
added test files
LukeDysart17 Jun 23, 2025
bd81630
Change to notebook
LukeDysart17 Jun 25, 2025
161c2db
Working Notebooks
LukeDysart17 Jun 25, 2025
f9adb1a
Assemblies fully tested and functional for taking json
LukeDysart17 Jul 2, 2025
536f1f3
Luke Dysart final push
LukeDysart17 Jul 3, 2025
5a52cbb
Merge pull request #1 from MyersResearchGroup/luke
Gonza10V Jul 23, 2025
d972b3e
Delete scripts/LukeTestingNotebook.ipynb
Gonza10V Jul 23, 2025
87ac274
Delete scripts/sbol2_assembly_output.xlsx.xlsx
Gonza10V Jul 23, 2025
243cd06
Delete scripts/SBOL_xlsx5.xlsx
Gonza10V Jul 23, 2025
2d3f9da
Update utils.py
Gonza10V Aug 13, 2025
c465eb2
Update utils.py
Gonza10V Aug 20, 2025
2d9351c
Update utils.py
Gonza10V Aug 27, 2025
1b9ad45
Added yml file for github action
Aaron1776 Aug 29, 2025
5d0c7c0
Deleted test_setup.py and replaced with sample_preparation.py (test i…
Aaron1776 Aug 29, 2025
f3cfe87
Added simple test file to test all scripts
Aaron1776 Aug 29, 2025
6a45a3f
Added a bacterial transformation script that is more Object oriented …
Aaron1776 Aug 29, 2025
8db7dbd
Changed source code to reflect hyperparameter tuning and OOP design. …
Aaron1776 Sep 2, 2025
1cdd51b
fixed testing to use pudu in development mode
Aaron1776 Sep 3, 2025
559b374
fixed testing to only use python 3.10
Aaron1776 Sep 3, 2025
8cf4717
integrated xlsx output into assembly.py instead of having to code in …
Aaron1776 Sep 3, 2025
03f2a86
Update pyproject.toml
Gonza10V Sep 9, 2025
d7159af
Update pyproject.toml
Gonza10V Sep 9, 2025
99097bf
Delete requirements.txt
Gonza10V Sep 9, 2025
4c532c5
Merge branch 'main' into oscar_SPUR
Gonza10V Sep 9, 2025
75b5bbc
Update utils.py
Gonza10V Sep 9, 2025
51c1a60
Update utils.py
Gonza10V Sep 9, 2025
7d14e0e
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
3789b35
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
519c8fd
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
b72df47
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
b233886
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
fcb8248
Update run_sbol2assembly.py
Gonza10V Sep 9, 2025
e5489cf
Merge pull request #2 from MyersResearchGroup/oscar_SPUR
Gonza10V Sep 9, 2025
daad2e8
Relaxing dependencies
Aaron1776 Sep 16, 2025
287b5e6
Change to show which scripts are running
Aaron1776 Sep 16, 2025
d3e4e96
Merge pull request #3 from MyersResearchGroup/oscar_SPUR
Gonza10V Sep 16, 2025
dc55ee0
changed version to 1.0.0b4;
Aaron1776 Sep 19, 2025
780b348
new version
Gonza10V Sep 22, 2025
0707da2
Merge branch 'main' into oscar_SPUR
Gonza10V Sep 22, 2025
449b799
Merge pull request #4 from MyersResearchGroup/oscar_SPUR
Gonza10V Sep 22, 2025
46be39c
Fixed recovery_incubation input error
Aaron1776 Sep 23, 2025
8a7a3e3
Merge remote-tracking branch 'origin/oscar_SPUR' into oscar_SPUR
Aaron1776 Sep 23, 2025
d5c9a70
Update pyproject.toml
Gonza10V Sep 23, 2025
a623b51
Update pyproject.toml
Gonza10V Sep 30, 2025
4c1dba6
Update pyproject.toml
Gonza10V Sep 30, 2025
eba7099
Update pyproject.toml
Gonza10V Sep 30, 2025
dfa05dd
removing SBOL2 dependency
Gonza10V Oct 3, 2025
bcb5009
plating added to init
Gonza10V Oct 14, 2025
148a8e7
Delete scripts/run_sbol2assembly.py
Gonza10V Nov 11, 2025
b14e9ad
Update path for output.json in run_sbol2assembly_libre.py
Gonza10V Nov 11, 2025
b39d36a
Add initial documentation file
Gonza10V Dec 15, 2025
43bdf2e
Add files via upload
Gonza10V Dec 15, 2025
924b12c
Refactored `assembly.py` to support advanced parameter merging via JS…
Aaron1776 Dec 16, 2025
676f76b
Validated reaction volume constraints in `assembly.py` to ensure phys…
Aaron1776 Dec 18, 2025
2a6ba5d
Added `initial_tip` parameter in `assembly.py` for improved tip manag…
Aaron1776 Dec 18, 2025
508e0a7
Refactored `transformation.py` to support advanced parameter merging …
Aaron1776 Dec 19, 2025
9ed61f5
Refactored `plating.py` to support advanced parameter merging via JSO…
Aaron1776 Dec 19, 2025
6b6dba9
Refactored `assembly.py` to support advanced parameter merging via `a…
Aaron1776 Dec 19, 2025
94a36e4
Added `generate_protocol.py` to enable protocol generation for assemb…
Aaron1776 Dec 19, 2025
cdc79e6
Added transformation and plating input JSON export functionality for …
Aaron1776 Dec 19, 2025
3e3c566
Updated `apiLevel` to 2.21 in `generate_protocol.py`.
Aaron1776 Dec 19, 2025
8a2b1ae
Fixed hardcoded `num_parts=2` in `_validate_reaction_volumes` within …
Aaron1776 Jan 16, 2026
5580b32
Merge branch 'main' into oscar_SPUR
Gonza10V Jan 16, 2026
1189737
Merge pull request #5 from MyersResearchGroup/oscar_SPUR
Gonza10V Jan 16, 2026
2f199e3
Merge branch 'main' into json_Oscar
Gonza10V Jan 16, 2026
25b9033
Merge pull request #6 from MyersResearchGroup/json_Oscar
Aaron1776 Jan 27, 2026
24b961c
Refactor HeatShockTransformation transfer logic and add protocol gene…
Aaron1776 Mar 5, 2026
254bb7d
Refactored transformation protocols to use updated `transformation_da…
Aaron1776 Mar 5, 2026
3e78ef3
Add ManualAssembly Markdown protocol generation for Golden Gate
Gonza10V Apr 7, 2026
31cd481
Refactor _transfer_competent_cells to use distribute() per source tube
Aaron1776 Apr 7, 2026
341e1a9
Add plasmid replicate consistency check and transformation unit tests
Aaron1776 Apr 8, 2026
0c3e86e
Populate product_uri_to_wells in Domestication and ManualLoopAssembly
Aaron1776 Apr 8, 2026
23d4521
Add initial_tip_p20 and initial_tip_p300 parameters to transformation…
Aaron1776 Apr 8, 2026
bee04f8
Refine ManualAssembly markdown sections and thermocycling defaults
Gonza10V Apr 8, 2026
e086bc3
Merge pull request #11 from MyersResearchGroup/codex/add-manualassemb…
Gonza10V Apr 8, 2026
64448ed
Update assembly notes and instructions in assembly.py
Gonza10V Apr 8, 2026
494933f
Add URI name collision detection in _parse_transformation_data
Aaron1776 Apr 29, 2026
9eaeb74
Include initial_dna_well offset in temp-module capacity check
Aaron1776 Apr 29, 2026
34a3207
Bump apiLevel to 2.14 in four pre-existing failing scripts
Aaron1776 Apr 29, 2026
bc55866
Move competent cells and media to a dedicated tube rack
Aaron1776 Apr 29, 2026
2dd7242
Validate non-empty plasmid location wells
Gonza10V Apr 29, 2026
31568ea
Merge pull request #7 from MyersResearchGroup/json_Oscar
Gonza10V Apr 29, 2026
5ece671
Improve manual assembly markdown output format
Gonza10V Apr 30, 2026
bf6fe96
Add manual transformation protocol generator and class
Gonza10V May 1, 2026
934e3ce
Add manual plating protocol generator and class
Gonza10V May 1, 2026
a97b8dc
Fix legacy thermocycling profile markdown rendering
Gonza10V May 1, 2026
d7bf83a
Merge pull request #14 from MyersResearchGroup/codex/improve-manual-a…
Gonza10V May 1, 2026
e10f654
Merge branch 'main' into human_instructions
Gonza10V May 1, 2026
95e50b9
Reorganize scripts by protocol type and split script tests
Gonza10V May 1, 2026
d62ee8a
Merge pull request #15 from MyersResearchGroup/codex/organize-scripts…
Gonza10V May 1, 2026
f7d652a
Refactor plating protocol: single LB tip, shared dilution wells, dilu…
Aaron1776 May 5, 2026
17de57e
Cap mix volume to dilution well capacity
Aaron1776 May 5, 2026
5e32085
Remove generated .md output from version control
Aaron1776 May 5, 2026
195c957
Fix default paths in manual generators and add missing example inputs
Aaron1776 May 5, 2026
9c12ef1
Fix two Codex review issues and commit missing .gitignore entry
Aaron1776 May 7, 2026
b004a48
Update test to assert thermocycling_cycles flows through dynamically
Aaron1776 May 7, 2026
985ca08
Merge pull request #16 from MyersResearchGroup/json_Oscar
Gonza10V May 7, 2026
004df4d
Merge pull request #13 from MyersResearchGroup/human_instructions
Gonza10V May 7, 2026
d1296ee
Bump version from 1.0.0b7 to 1.0.0b9
Gonza10V May 7, 2026
b4bd1df
Add agar plate map outputs (JSON and Excel) to Plating protocol
Aaron1776 May 19, 2026
341cf72
Fix single-dilution overflow in build_agar_plate_map
Aaron1776 May 28, 2026
2db8b58
Add comprehensive docstrings and Sphinx documentation
Aaron1776 May 28, 2026
c4a359b
Merge pull request #17 from MyersResearchGroup/plating_feature
Aaron1776 May 28, 2026
708054a
Simplify input file paths in workflow docs and code snippets
Aaron1776 May 28, 2026
13ec567
Merge pull request #18 from MyersResearchGroup/plating_feature
Aaron1776 May 28, 2026
ea29ba8
Add Read the Docs link to README, replacing TODO placeholders
Aaron1776 May 28, 2026
14b743e
Merge pull request #19 from MyersResearchGroup/plating_feature
Aaron1776 May 28, 2026
b880836
Add comprehensive JSON and Python test inputs for assembly, transform…
Aaron1776 May 28, 2026
7bd2ec0
Merge pull request #20 from MyersResearchGroup/plating_feature
Aaron1776 May 28, 2026
3dcae01
fixes for worklow example
Gonza10V May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Python package

on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'

jobs:
build:

runs-on: [ubuntu-latest]
strategy:
fail-fast: false
matrix:
python-version: ["3.10"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
python -m pip install --upgrade pip

- name: Install pudu package in development mode with test dependencies
run: |
pip install -e .[test]

- name: Test scripts with opentrons_simulate
run: |
pytest -s -v
13 changes: 12 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
venv
venv

# Generated protocol output files produced by scripts/manual/ generators
scripts/manual/*.md

# Sphinx build output
docs/_build/

# Python cache
__pycache__/
*.pyc
*.egg-info/
17 changes: 17 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
version: 2

build:
os: ubuntu-22.04
tools:
python: "3.11"

sphinx:
configuration: docs/conf.py

python:
install:
- requirements: docs/requirements.txt
- method: pip
path: .
extra_requirements:
- test
24 changes: 20 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
Welcome to the PUDU (Protocol Unified Design Unit) repository, our Python package for liquid handling robot control on Synthetic Biology workflows.


<img src="https://github.com/RudgeLab/PUDU/blob/main/images/PUDU_Logo.png#gh-light-mode-only" alt="PUDU logo" width="250"/>
<img src="https://github.com/RudgeLab/PUDU/blob/main/images/PUDU_Logo.png#gh-dark-mode-only" alt="PUDU night logo" width="250"/>
<img src="https://github.com/MyersResearchGroup/PUDU/blob/main/images/PUDU_Logo.png#gh-light-mode-only" alt="PUDU logo" width="250"/>
<img src="https://github.com/MyersResearchGroup/PUDU/blob/main/images/PUDU_Logo_dark.png#gh-dark-mode-only" alt="PUDU night logo" width="250"/>

## *The art of automated liquid handling*

Expand Down Expand Up @@ -46,7 +46,7 @@ Run:

This code can be executed in the terminal and in jupyter notebooks.

For more details please refer to our Wiki (TODO) for installation instructions and developer guides.
For more details please refer to our [documentation](https://pudu.readthedocs.io/en/latest/) for installation instructions and developer guides.

### OT-2 installation

Expand All @@ -62,8 +62,24 @@ then in the OT-2 terminal run:

## Documentation

Please visit our documentation with API reference at Read the Docs (TODO)
Please visit our documentation with full API reference at [pudu.readthedocs.io](https://pudu.readthedocs.io/en/latest/)

## Tutorials

TODO

## Manual Golden Gate protocol generation

PUDU now supports generating a **human-readable manual Golden Gate protocol** from SBOL-style JSON input using `ManualAssembly`.

- The class builds structured per-reaction records (product, backbone, ordered parts, enzyme, and calculated reagent volumes).
- It renders a Markdown protocol suitable for lab use and future PDF conversion.
- It does **not** generate OT-2 commands.

Example script:

```bash
PYTHONPATH=src python scripts/generate_manual_assembly_protocol.py
```

This writes a protocol document to `scripts/manual_assembly_protocol.md`.
46 changes: 46 additions & 0 deletions docs/api/assembly.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
pudu.assembly
=============

Classes for automated Golden Gate DNA assembly on the Opentrons OT-2.

The module exposes four concrete classes and one factory:

* :class:`~pudu.assembly.Domestication` — assembles individual parts into a universal acceptor backbone, one part at a time.
* :class:`~pudu.assembly.ManualLoopAssembly` — combinatorial Loop Assembly from role-based part lists; detects Odd/Even receivers and selects the correct enzyme automatically.
* :class:`~pudu.assembly.SBOLLoopAssembly` — explicit Loop Assembly from SBOL-format input; each assembly dict specifies parts, backbone, and enzyme directly.
* :class:`~pudu.assembly.ManualAssembly` — generates a human-readable Markdown bench protocol (no OT-2 commands).
* :class:`~pudu.assembly.LoopAssembly` — factory that auto-detects input format and returns the appropriate subclass.

All OT-2 classes inherit from :class:`~pudu.assembly.BaseAssembly`, which
implements shared hardware setup, tip management, and liquid transfer.

.. autoclass:: pudu.assembly.BaseAssembly
:members:
:special-members: __init__

.. autoclass:: pudu.assembly.Domestication
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.assembly.ManualLoopAssembly
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.assembly.SBOLLoopAssembly
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.assembly.ManualAssembly
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.assembly.LoopAssembly
:members:
:show-inheritance:

.. autoclass:: pudu.assembly.ManualReactionRecord
:members:
33 changes: 33 additions & 0 deletions docs/api/calibration.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
pudu.calibration
================

Classes for automated plate-reader calibration following the iGEM 2022
InterLab calibration protocol.

Two protocols are provided:

* :class:`~pudu.calibration.GFPODCalibration` — two calibrants (fluorescein
and silica microspheres), two replicates each; for GFP fluorescence and
OD600 calibration.
* :class:`~pudu.calibration.RGBODCalibration` — four calibrants (fluorescein,
sulforhodamine 101, cascade blue, microspheres), two replicates each; for
RGB fluorescence and OD600 calibration.

Both subclass :class:`~pudu.calibration.BaseCalibration` and use the
template-method pattern: ``run()`` is implemented in the base class and calls
abstract methods for the calibrant-specific steps.

Reference protocol:
`iGEM 2022 InterLab Calibration Protocol <https://old.igem.org/wiki/images/a/a4/InterLab_2022_-_Calibration_Protocol_v2.pdf>`_

.. autoclass:: pudu.calibration.BaseCalibration
:members:
:special-members: __init__

.. autoclass:: pudu.calibration.GFPODCalibration
:members:
:show-inheritance:

.. autoclass:: pudu.calibration.RGBODCalibration
:members:
:show-inheritance:
12 changes: 12 additions & 0 deletions docs/api/generate_protocol.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
pudu.generate_protocol
======================

Command-line tool and Python API for generating standalone Opentrons ``.py``
protocol files from JSON inputs.

See the module docstring below for the full CLI flag reference, JSON input
formats, copy-paste terminal workflow, and Python API usage examples.

.. automodule:: pudu.generate_protocol
:members:
:undoc-members: False
13 changes: 13 additions & 0 deletions docs/api/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
API Reference
=============

.. toctree::
:maxdepth: 1

assembly
transformation
plating
calibration
sample_preparation
utils
generate_protocol
27 changes: 27 additions & 0 deletions docs/api/plating.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
pudu.plating
============

Classes for automated and manual serial-dilution spot plating.

* :class:`~pudu.plating.Plating` — OT-2 protocol that takes transformed
bacteria from a thermocycler plate, performs up to two serial dilutions,
and spots each dilution onto agar plates with replicates.
* :class:`~pudu.plating.ManualPlating` — generates a human-readable Markdown
bench protocol.

On simulation, :class:`~pudu.plating.Plating` writes:

* ``{protocol_name}.json`` — machine-readable agar plate map
* ``{protocol_name}.xlsx`` — colour-coded Excel grid (blue = dilution 1, orange = dilution 2)

.. autoclass:: pudu.plating.Plating
:members:
:special-members: __init__

.. autoclass:: pudu.plating.ManualPlating
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.plating.ManualPlatingRecord
:members:
28 changes: 28 additions & 0 deletions docs/api/sample_preparation.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
pudu.sample_preparation
========================

Classes for distributing samples and creating inducer gradients on 96-well
plates for characterisation experiments.

* :class:`~pudu.sample_preparation.PlateSamples` — distributes a list of
samples into replicate wells across a plate.
* :class:`~pudu.sample_preparation.PlateWithGradient` — creates a serial
inducer-concentration gradient (e.g. IPTG dose-response) across replicate
rows on a 96-well plate.

Both subclass :class:`~pudu.sample_preparation.SamplePreparation`, which
provides shared labware loading and well-slot management.

.. autoclass:: pudu.sample_preparation.SamplePreparation
:members:
:special-members: __init__

.. autoclass:: pudu.sample_preparation.PlateSamples
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.sample_preparation.PlateWithGradient
:members:
:special-members: __init__
:show-inheritance:
37 changes: 37 additions & 0 deletions docs/api/transformation.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
pudu.transformation
===================

Classes for automated and manual bacterial heat-shock transformation.

* :class:`~pudu.transformation.HeatShockTransformation` — OT-2 protocol that
loads DNA and competent cells into a thermocycler plate, runs the heat-shock
cycle, adds recovery media, and exports a plating map.
* :class:`~pudu.transformation.ManualTransformation` — generates a
human-readable Markdown bench protocol.

Both classes accept SBOL-style transformation data of the form::

[
{
"Strain": "https://SBOL2Build.org/strain_GFP/1",
"Chassis": "https://sbolcanvas.org/DH5alpha/1",
"Plasmids": ["https://SBOL2Build.org/composite_1/1"]
}
]

.. autoclass:: pudu.transformation.Transformation
:members:
:special-members: __init__

.. autoclass:: pudu.transformation.HeatShockTransformation
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.transformation.ManualTransformation
:members:
:special-members: __init__
:show-inheritance:

.. autoclass:: pudu.transformation.ManualTransformationRecord
:members:
22 changes: 22 additions & 0 deletions docs/api/utils.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
pudu.utils
==========

Shared utilities used across PUDU protocols.

* :class:`~pudu.utils.Camera` — captures images and records video via ffmpeg
during OT-2 protocol runs.
* :class:`~pudu.utils.SmartPipette` — pipette wrapper that uses the
Opentrons liquid-tracking API to compute safe aspiration heights for
conical tubes, preventing tip plunging as tubes empty.
* ``colors`` — list of 24 hex colour strings used to colour-code liquids in
the Opentrons deck visualiser.

.. autodata:: pudu.utils.colors

.. autoclass:: pudu.utils.Camera
:members:
:special-members: __init__

.. autoclass:: pudu.utils.SmartPipette
:members:
:special-members: __init__
Loading
Loading