Metadata-Version: 2.4
Name: labware
Version: 0.1.3
Summary: Microplate and dish definitions: footprint, well geometry, skirt, material and vendor drawing
Author-email: Ramona Optics <jed@ramonaoptics.com>
License-Expression: BSD-3-Clause
Project-URL: Homepage, https://github.com/ramonaoptics/labware
Project-URL: Viewer, https://docs.ramonaoptics.com/tools/labware_viewer.html
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: pydantic>=2
Dynamic: license-file

# labware

Microplate and dish definitions for software: outer footprint, well geometry,
skirt, material, and the vendor drawing each dimension came from.

Browse them in 3D: https://docs.ramonaoptics.com/tools/labware_viewer.html

## Install

```bash
pip install labware
```

or

```bash
conda install -c conda-forge labware
```

## Example

```python
from labware import load_labware

plates = load_labware()
plate = plates["SBS_96_well_plate"]

print(plate.name)  # SBS 96 well
print(plate.well_dimensions.rows, plate.well_dimensions.columns)  # 8 12
print(plate.well_dimensions.pitch)  # 0.009, in meters
```

## Layout

- `labware/definitions/` holds one JSON file per part. The file name, without
  `.json`, is the key `load_labware()` returns it under.
- `labware/schema.py` is the pydantic model every definition is validated
  against.
- `labware/labware.v1.schema.json` is that model published as a JSON schema.
  Each definition names it in its `$schema` key.

## Releasing

Uploads to PyPI are automatic, and the version comes from the git tag, so
there is no version number to edit in the source.

A merge to `main` that changes the package is released on its own: the
`pypi` workflow runs the tests, creates the tag and a GitHub release, and
publishes.

- If anything in `labware/` other than a JSON file changed, such as the
  schema model or the loader, the minor version goes up.
- Otherwise, if a JSON file in `labware/` was added, changed or deleted,
  which is what a new or corrected plate definition is, the patch version
  goes up.
- A merge that only touches files outside `labware/`, such as this README,
  the tests or the CI, is not released.

A major version is always made by hand.

To release by hand, create the tag from the GitHub web interface:

1. Open https://github.com/ramonaoptics/labware/releases/new
2. Under "Choose a tag", type the new version with a leading `v`, for example
   `v0.1.1`, and pick "Create new tag on publish".
3. Leave the target as `main`, click "Generate release notes", then
   "Publish release".

The `pypi` workflow then builds the sdist and wheel and publishes them, and
`labware.__version__` in the installed package reports that same version.
