Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 24 additions & 0 deletions .github/workflows/typo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Typo check

permissions:
contents: read

on:
push:
branches:
- main
pull_request:

env:
CLICOLOR: 1

jobs:
spelling:
name: Spell Check with Typos
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Spell Check Repo
uses: crate-ci/typos@v1
6 changes: 6 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ repos:
language: system
files: ^pylabrobot/.*$

- repo: https://github.com/crate-ci/typos
rev: v1
hooks:
- id: typos
files: ^pylabrobot/.*$
args: ["--force-exclude"]
25 changes: 0 additions & 25 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,31 +1,6 @@
{
"editor.tabSize": 2,
"files.trimTrailingWhitespace": true,
"cSpell.words": [
"agrow",
"agrowpumps",
"coro",
"cytomat",
"decalibrate",
"Defaultable",
"Deprecated",
"frontmost",
"hepa",
"Inheco",
"iswap",
"jsonify",
"klass",
"labware",
"modbus",
"pylabrobot",
"pytest",
"subclassing",
"subresource",
"tadm",
"tiprack",
"usascientific",
"websockets"
],
"python.linting.mypyEnabled": true,
"python.linting.enabled": true,
"python.testing.pytestArgs": ["."],
Expand Down
27 changes: 27 additions & 0 deletions _typos.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[default]
extend-ignore-identifiers-re = [
"AttributeID.*Supress.*",
]

[default.extend-identifiers]
AttributeIDSupressMenu = "AttributeIDSupressMenu"

[default.extend-words]
# words that should not be corrected
dot_acn = ".acn"
dot_fot = ".fot"
dot_ist = ".ist"
OT = "OT"
ot = "ot"
ser = "ser"
ba = "ba"
nd = "nd"
PN = "PN"
tro = "tro"
FO = "FO"
UE = "UE"

[files]
extend-exclude = [
"*.ipynb"
]
2 changes: 1 addition & 1 deletion docs/contributor_guide/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ It is recommend that you use VSCode, as we provide a workspace config in `/.vsco
Some VSCode Extensions I'd recommend:

- [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
- [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
- [Typos Checker](https://github.com/tekumara/typos-lsp)
- [mypy](https://marketplace.visualstudio.com/items?itemName=matangover.mypy)

## Testing, linting, formatting
Expand Down
2 changes: 1 addition & 1 deletion docs/resources/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ If you cannot find something, please contribute what you are looking for!
</ul>
<p>As a result, many automation software systems believe that it is impossible to reuse resource definitions.
In contrast, PyLabRobot is convinced that carefully created resource definitions combined with smart automation can be reused most of the time.</p>
<p>PLR is actively addressing these resource resuse constraints in numerous ways:</p>
<p>PLR is actively addressing these resource reuse constraints in numerous ways:</p>
<ul>
<li>Development of self-correcting machine backend methods.</li>
<li>Using Coordinate Measurement Machine-based generation of resource "ground truths" (e.g., via liquid handler-based resource probing or 3D scanning).</li>
Expand Down
2 changes: 1 addition & 1 deletion docs/resources/library/eppendorf.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Company page: [Eppendorf Wikipedia](https://en.wikipedia.org/wiki/Eppendorf_(com

| Description | Image | PLR definition |
|--------------------|--------------------|--------------------|
| 'Eppendorf_96_wellplate_250ul_Vb'<br>Part no.: 0030133374<br>[manufacturer website](https://www.eppendorf.com/gb-en/Products/Laboratory-Consumables/Plates/Eppendorf-twintec-PCR-Plates-p-0030133374) <br><br> - Material: polycarbonate (frame), polypropylene (wells)<br> - part of the twin.tec(R) product line<br> - WARNING: not ANSI/SLAS 1-2004 footprint dimenions (123x81 mm^2!) ==> requires `PlateAdapter`<br> - 'Can be divided into 4 segments of 24 wells each to prevent waste and save money'. | ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_COMPLETE.png) ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_DIVIDED.png) | `Eppendorf_96_wellplate_250ul_Vb` |
| 'Eppendorf_96_wellplate_250ul_Vb'<br>Part no.: 0030133374<br>[manufacturer website](https://www.eppendorf.com/gb-en/Products/Laboratory-Consumables/Plates/Eppendorf-twintec-PCR-Plates-p-0030133374) <br><br> - Material: polycarbonate (frame), polypropylene (wells)<br> - part of the twin.tec(R) product line<br> - WARNING: not ANSI/SLAS 1-2004 footprint dimensions (123x81 mm^2!) ==> requires `PlateAdapter`<br> - 'Can be divided into 4 segments of 24 wells each to prevent waste and save money'. | ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_COMPLETE.png) ![](img/eppendorf/Eppendorf_96_wellplate_250ul_Vb_DIVIDED.png) | `Eppendorf_96_wellplate_250ul_Vb` |

## Tubes

Expand Down
2 changes: 1 addition & 1 deletion docs/resources/library/porvair.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Company history: [Porvair Filtration Group](https://www.porvairfiltration.com/about/our-history/)

> Porvair Filtration Group, a wholly owned subsidiary of Porvair plc, is a specialist filtration and environmental technology group involved in developing, designing and manufacturing filtration and separation solutions to industry sectors such as the aviation, molten metal, energy, water treatment and life sciences markets. Porvair plc is a publically owned company with four principal subsidiaries: Porvair Filtration Group Ltd., Porvair Sciences Ltd., Selee Corporation and Seal Analytical Ltd.
> Porvair Filtration Group, a wholly owned subsidiary of Porvair plc, is a specialist filtration and environmental technology group involved in developing, designing and manufacturing filtration and separation solutions to industry sectors such as the aviation, molten metal, energy, water treatment and life sciences markets. Porvair plc is a publicly owned company with four principal subsidiaries: Porvair Filtration Group Ltd., Porvair Sciences Ltd., Selee Corporation and Seal Analytical Ltd.

## Plates

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"source": [
"## Example: Hamilton STARLet\n",
"\n",
"Here, we'll use a Hamilton STARLet as an example. For other robots, simply change the deck layout, makign sure that you have at least a tip rack and a plate to use."
"Here, we'll use a Hamilton STARLet as an example. For other robots, simply change the deck layout, making sure that you have at least a tip rack and a plate to use."
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This guide provides instructions for replacing the iSWAP arm on a Hamilton STAR liquid handling system.

Caution/Disclaimer:
Caution/Disclaimer:
1. This procedure is a work in progress and the user assumes all responsibility for any damage that may be done as a result.
2. This procedure should not be performed on any system that are either under the OEM Warranty period or currently on a service contract with the OEM or any third party service organization. This will certainly void the OEM Warranty/Service contract and likely invalidate any service agreement with third parties.
3. This procedure DOES NOT encapsulate the entire OEM adjustment procedure which includes specialized tooling and software to perform. Consult [iSWAP Auto Adjustment Guide](adjusting-iswap.md) for auto-calibrating arm after installation proceduce.
Expand Down Expand Up @@ -39,9 +39,9 @@ Note: Due to the way the iSWAP is taught, the calibration positions from machine

## Attaching the New iSWAP Arm and rough leveling

6. Place the replacement arm on the system, insert and tighten the two fixing screws, reattach the comunication and Y-drive ribon cables.
6. Place the replacement arm on the system, insert and tighten the two fixing screws, reattach the communication and Y-drive ribon cables.

Note: Once physically installed on the system it is recomended that you level the arm in relation to the deck.
Note: Once physically installed on the system it is recommended that you level the arm in relation to the deck.

7. Loosen the two fixing screws until the iSWAP is fixed in position but can still be rotated about the X Axis (left to right) of the machine.
8. Manually position the X-Arm in the center of the machine and the iSWAP in the middle of the X-Arm.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ await star.iswap_open_gripper()

## Rotations

You can rotate the iSWAP to 12 predifined positions using {meth}`~pylabrobot.liquid_handling.backends.hamilton.STAR_backend.STARBackend.iswap_rotate`.
You can rotate the iSWAP to 12 predefined positions using {meth}`~pylabrobot.liquid_handling.backends.hamilton.STAR_backend.STARBackend.iswap_rotate`.

the positions and their corresponding integer specifications are shown visually here.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ The `lld_mode` parameter can be one of the following:
The `lld_mode` parameter is a list, so you can specify a different LLD mode for each channel.

```{note}
The `lld_mode` parameter is only avilable when using the `STAR` backend.
The `lld_mode` parameter is only available when using the `STAR` backend.
```

## Catching errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Since the channnel will be above the tip rack, it should be safe to move up. We perform a quick check to make sure the z_safe is at least above the resources we know about."
"Since the channel will be above the tip rack, it should be safe to move up. We perform a quick check to make sure the z_safe is at least above the resources we know about."
]
},
{
Expand Down
2 changes: 1 addition & 1 deletion docs/user_guide/_getting-started/plr-architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,5 @@ Integrating New Machines



For detailed information on how to integrate new machiens into PLR ecosystem,
For detailed information on how to integrate new machines into PLR ecosystem,
and contribute to the PLR project, please refer to `Contributor Guide`:
2 changes: 1 addition & 1 deletion pylabrobot/centrifuge/vspin_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def __init__(self, calibration_offset: int, device_id: Optional[str] = None):

async def setup(self):
await self.io.setup()
# TODO: add functionality where if robot has been intialized before nothing needs to happen
# TODO: add functionality where if robot has been initialized before nothing needs to happen
for _ in range(3):
await self.configure_and_initialize()
await self.send(b"\xaa\x00\x21\x01\xff\x21")
Expand Down
22 changes: 11 additions & 11 deletions pylabrobot/liquid_handling/backends/hamilton/STAR_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ class ElementStillHoldingError(STARModuleError):
"""Element still holding

Possible cause(s):
"Get command" is sent twice or element is not droped expected element is missing (lost)
"Get command" is sent twice or element is not dropped expected element is missing (lost)

Code: 22
"""
Expand Down Expand Up @@ -896,14 +896,14 @@ def trace_information_to_string(module_identifier: str, trace_information: int)
62: "Z-drive movement error",
63: "Z-drive limit stop not found",
70: "No liquid level found (possibly because no liquid was present)",
71: "Not enough liquid present (Immersion depth or surface following position possiby"
71: "Not enough liquid present (Immersion depth or surface following position possibly"
"below minimal access range)",
72: "Auto calibration at pressure (Sensor not possible)",
73: "No liquid level found with dual LLD",
74: "Liquid at a not allowed position detected",
75: "No tip picked up, possibly because no was present at specified position",
76: "Tip already picked up",
77: "Tip not droped",
77: "Tip not dropped",
78: "Wrong tip picked up",
80: "Liquid not correctly aspirated",
81: "Clot detected",
Expand All @@ -913,9 +913,9 @@ def trace_information_to_string(module_identifier: str, trace_information: int)
85: "No communication to digital potentiometer",
86: "ADC algorithm error",
87: "2nd phase of liquid nt found",
88: "Not enough liquid present (Immersion depth or surface following position possiby"
88: "Not enough liquid present (Immersion depth or surface following position possibly"
"below minimal access range)",
90: "Limit curve not resetable",
90: "Limit curve not resettable",
91: "Limit curve not programmable",
92: "Limit curve not found",
93: "Limit curve data incorrect",
Expand Down Expand Up @@ -1177,7 +1177,7 @@ def num_channels(self) -> int:

def set_minimum_traversal_height(self, traversal_height: float):
raise NotImplementedError(
"set_minimum_traversal_height is depricated. use set_minimum_channel_traversal_height or "
"set_minimum_traversal_height is deprecated. use set_minimum_channel_traversal_height or "
"set_minimum_iswap_traversal_height instead."
)

Expand Down Expand Up @@ -2734,7 +2734,7 @@ async def core_move_picked_up_resource(
acceleration_index: int = 4,
z_speed: float = 50.0,
):
"""After a ressource is picked up, move it to a new location but don't release it yet.
"""After a resource is picked up, move it to a new location but don't release it yet.
Low level component of :meth:`move_resource`

Args:
Expand Down Expand Up @@ -6871,7 +6871,7 @@ async def iswap_rotate(
wrist_protection: Literal[0, 1, 2, 3, 4, 5, 6, 7] = 5,
):
"""
Rotate the iswap to a predifined position.
Rotate the iswap to a predefined position.
Velocity units are "incr/sec"
Acceleration units are "1_000 incr/sec**2"
For a list of the possible positions see the pylabrobot documentation on the R0 module.
Expand Down Expand Up @@ -6989,7 +6989,7 @@ async def move_plate_to_position(
ga=collision_control_level,
xe=f"{acceleration_index_high_acc} {acceleration_index_low_acc}",
)
# Once the command has completed successfuly, set _iswap_parked to false
# Once the command has completed successfully, set _iswap_parked to false
self._iswap_parked = False
return command_output

Expand Down Expand Up @@ -7654,7 +7654,7 @@ async def position_channels_in_y_direction(self, ys: Dict[int, float], make_spac
make_space: If True, the channels will be moved to ensure they are at least 9mm apart and in
descending order, after the channels in `ys` have been put at the desired locations. Note
that an error may still be raised, if there is insufficient space to move the channels or
if the requested locations are not valid. Set this to False if you wan to aviod inadvertently
if the requested locations are not valid. Set this to False if you wan to avoid inadvertently
moving other channels.
"""

Expand Down Expand Up @@ -8037,7 +8037,7 @@ async def stop_temperature_control_at_hhc(self, device_number: int):

class UnSafe:
"""
Namespace for actions that are unsafe to perfom.
Namespace for actions that are unsafe to perform.
For example, actions that send the iSWAP outside of the Hamilton Deck
"""

Expand Down
2 changes: 1 addition & 1 deletion pylabrobot/liquid_handling/backends/hamilton/STAR_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ def __init__(self, name: str):
async def asyncTearDown(self):
await self.lh.stop()

async def test_indictor_light(self):
async def test_indicator_light(self):
await self.STAR.set_loading_indicators(bit_pattern=[True] * 54, blink_pattern=[False] * 54)
self.STAR._write_and_read_command.assert_has_calls(
[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def parse_vantage_fw_string(s: str, fmt: Optional[Dict[str, str]] = None) -> dic
82: "TADM measurement out of lower limit curve",
83: "TADM measurement out of upper limit curve",
84: "Not enough memory for TADM measurement",
90: "Limit curve not resetable",
90: "Limit curve not resettable",
91: "Limit curve not programmable",
92: "Limit curve name not found",
93: "Limit curve data incorrect",
Expand Down Expand Up @@ -186,7 +186,7 @@ def parse_vantage_fw_string(s: str, fmt: Optional[Dict[str, str]] = None) -> dic
56: "Y drive not initialized",
57: "Y drive movement error",
58: "Y drive position out of permitted area",
59: "Divergance Y motion controller to linear encoder to heigh",
59: "Divergance Y motion controller to linear encoder to height",
60: "Z drive initialization failed",
61: "Z drive not initialized",
62: "Z drive movement error",
Expand All @@ -212,7 +212,7 @@ def parse_vantage_fw_string(s: str, fmt: Optional[Dict[str, str]] = None) -> dic
84: "Not enough memory for TADM measurement",
85: "Jet dispense pressure not reached",
86: "ADC algorithm error",
90: "Limit curve not resetable",
90: "Limit curve not resettable",
91: "Limit curve not programmable",
92: "Limit curve name not found",
93: "Limit curve data incorrect",
Expand Down
2 changes: 1 addition & 1 deletion pylabrobot/liquid_handling/backends/opentrons_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ async def move_pipette_head(
pipette_id: Optional[str] = None,
force_direct: bool = False,
):
"""Move the pipette head to the specified location. Whe a tip is mounted, the location refers
"""Move the pipette head to the specified location. When a tip is mounted, the location refers
to the bottom of the tip. If no tip is mounted, the location refers to the bottom of the
pipette head.

Expand Down
Loading