semvec/pypi-packages huggingface dataset:
drylab 0.0.1
event‑sourced lab‑automation core
Requires Python: >=3.10

# Drylab (python package)

Event-sourced lab automation core library for Python.

## Overview

Drylab delivers **unbreakable reproducibility** and an **immutable audit trail** for every step of the autonomous science workflows carried out by your scientific AI agents.

Drylab uses an event‐sourced ledger that **cryptographically seals**, **schema‐validates** and **version‐controls** every instrument readout, simulation snapshot and llm insight

- **instant provenance**: trace any result back to the exact raw bytes
- **built-in verification**: reject bad data before it contaminates your analysis
- **replay & branching**: fork a run, tweak parameters and diff outcomes in seconds

## Features

- Event-sourced architecture for reliable lab automation
- Schema validation and registry for lab protocols
- SQLite-based ledger for event persistence
- Type-safe interfaces for lab operations
- Pydantic integration for data validation

## Requirements

- Python >= 3.10
- Dependencies:
  - pydantic >= 2.6
  - sqlite-utils >= 3.35
  - jsonschema >= 4.22

## Installation

You can install DryLab using pip:

```bash
pip install drylab
```

Or install from source:

```bash
git clone https://github.com/drylab/drylab-python.git
cd drylab-python
pip install -e .
```

## Quick Start

```python
from drylab import Reactor, Ledger

# Initialize the reactor and ledger
ledger = Ledger("lab_events.db")
reactor = Reactor(ledger)

# Your lab automation code here
```

## Project Structure

```
drylab/
├── schemas/         # JSON schemas for lab protocols
├── reactor.py      # Core reactor implementation
├── ledger.py       # Event persistence layer
├── types.py        # Type definitions
└── schema_registry.py  # Schema management
```

## Documentation

For detailed documentation, visit [https://drylab.bio](https://drylab.bio)

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the terms of the license included in the repository.

## Contact

- Email: dev@drylab.io
- Website: https://drylab.bio
dtools.splitends 0.29.0
### Developer Tools - splitends
Requires Python: >=3.12
Keywords: lifo, stack, SplitEnd

# Developer Tools - SplitEnds

Python package containing modules implementing queue-like data
structures. This project is part of the [Developer Tools for Python][4]
**dtools.** namespace project.

- **Repositories**
  - [dtools.splitends][1] project on *PyPI*
  - [Source code][2] on *GitHub*
- **Detailed documentation**
  - [Detailed API documentation][3] on *GH-Pages*

## Package dtools.splitends

Singularly linked data structures allowing data to be safely shared
between multiple instances by making shared data immutable and
inaccessible to client code.

- *module* dtools.splitends.splitend
  - *class* SplitEnd: Singularly link stack with shareable data nodes
- *module* dtools.splitends.splitend_node
  - *class* SENode: shareable nodes used by SplitEnd instances

______________________________________________________________________

[1]: https://pypi.org/project/dtools.splitends/
[2]: https://github.com/grscheller/dtools-splitends/
[3]: https://grscheller.github.io/dtools-namespace-projects/splitends/
[4]: https://github.com/grscheller/dtools-namespace-projects/blob/main/README.md
dtools.queues 2.0.0
### Developer Tools - Queue based data structures
Requires Python: >=3.12
Keywords: queue, fifo, lifo, dqueue

# Developer Tools - Queues

Python package containing modules implementing queue-like data
structures. This project is part of the [Developer Tools for Python][4]
**dtools.** namespace project.

- **Repositories**
  - [dtools.queues][1] project on *PyPI*
  - [Source code][2] on *GitHub*
- **Detailed documentation**
  - [Detailed API documentation][3] on *GH-Pages*

## Overview

Classic queue data structures:

- *module* dtools.queues
  - *module* fifo: First-In-First-Out Queue - FIFOQueue
  - *module* lifo: Last-In-First-Out Queue - LIFOQueue
  - *module* de: Double-Ended Queue - DEQueue

These queues allow iterators to leisurely iterate over inaccessible
copies of their current state while the queues themselves are free to
safely mutate. They are designed to be reasonably "atomic" without
introducing inordinate complexity.

All are more restrictive then the underlying circular array data
structure used to implement them. Developers can focus on the queue's
use case instead of all the "bit fiddling" required to implement
behavior, perform memory management, and handle coding edge cases.
Sometimes the real power of a data structure comes not from what it
empowers you to do, but from what it prevents you from doing to
yourself.

[1]: https://pypi.org/project/dtools.queues/
[2]: https://github.com/grscheller/dtools-queues/
[3]: https://grscheller.github.io/dtools-namespace-projects/queues/
[4]: https://github.com/grscheller/dtools-namespace-projects/blob/main/README.md
dtools.iterables 2.0.0
Module fp.iterables - Iterator related tools
Requires Python: >=3.12
Keywords: iterables, iterators

# Developer Tools - Tools for iterables and iterators

Tools for iterables and iterators. This project is part of the
[Developer Tools for Python][4] **dtools** namespace project.

- **Repositories**
  - [dtools.iterables][1] project on *PyPI*
  - [Source code][2] on *GitHub*
- Detailed documentation for dtools.fp
  - [Detailed API documentation][3] on *GH-Pages*

## Overview

- Concatenating and merging iterables
- Dropping and taking values from iterables
- Reducing and accumulating iterables
- Assumptions
  - iterables are not necessarily iterators
  - at all times iterator protocol is assumed to be followed
    - all iterators are assumed to be iterable
    - for all iterators `foo` we assume `iter(foo) is foo`

______________________________________________________________________

[1]: https://pypi.org/project/dtools.iterables/
[2]: https://github.com/grscheller/dtools-iterables/
[3]: https://grscheller.github.io/dtools-namespace-projects/iterables/
[4]: https://github.com/grscheller/dtools-namespace-projects/blob/main/README.md
dtools.fp 2.0.0
### Developer Tools - Pythonic functional programming
Requires Python: >=3.12
Keywords: functional, functional programming, fp, monad, maybe, either, lazy, non-strict

# Developer Tools - Pythonic functional programming

Functional programming tools which endeavor to be Pythonic. This project
is part of the [Developer Tools for Python][4] **dtools** namespace
project.

- **Repositories**
  - [dtools.fp][1] project on *PyPI*
  - [Source code][2] on *GitHub*
- Detailed documentation for dtools.fp
  - [Detailed API documentation][3] on *GH-Pages*

## Overview

- Benefits of FP
  - improved composability
  - avoid hard to refactor exception driven code paths
  - data sharing becomes trivial when immutability leveraged

The dtools.fp package consists of 4 modules.

______________________________________________________________________

### Functions as first class objects

  - dtools.fp.function
    - utilities to manipulate and partially apply functions

______________________________________________________________________

### Lazy function evaluation

- dtools.fp.lazy
  - lazy (non-strict) function evaluation

______________________________________________________________________

### Singletons

- dtools.fp.singletons
  - 3 singleton classes representing
    - a missing value (actually missing, not potentially missing)
    - a sentinel value
    - a failed calculation

______________________________________________________________________

### State monad implementation

- dtools.fp.state
  - pure FP handling of state (the state monad)

______________________________________________________________________

[1]: https://pypi.org/project/dtools.fp/
[2]: https://github.com/grscheller/dtools-fp/
[3]: https://grscheller.github.io/dtools-namespace-projects/fp/
[4]: https://github.com/grscheller/dtools-namespace-projects/blob/main/README.md
dtools.containers 1.0.0
### Developer Tools - Container-like data structures
Requires Python: >=3.12
Keywords: boxes, immutable_list, functional_tuple, maybe

# Developer Tools - Container based data structures

Python package of modules implementing container-like data structures.
This project is part of the [Developer Tools for Python][4] **dtools.**
namespace project.

- **Repositories**
  - [dtools.containers][1] project on *PyPI*
  - [Source code][2] on *GitHub*
- **Detailed documentation**
  - [Detailed API documentation][3] on *GH-Pages*

## Overview

### Single item box - dtools.containers.box

Container holding at most one object of a given type. This stateful
(mutable) container can contain only 0 or 1 items. Invariant in its
contents. Both `map` and `bind` return new objects. Iterable.

### Functional tuple - dtools.containers.functional_tuple 

Subclassed tuple with a more functional interface. Gives tuple FP
methods. Designed to be further inherited from. Hashable if all
contained items are hashable.

### Immutable list - dtools.containers.immutable_list

A hashable, immutable, list-like data structure. Hashability will be
enforced when instantiated. Mutable list methods will return new
objects.

### Maybe monad - dtools.containers.maybe

An implementation of the maybe (optional) monad. Data structure
represents a possibly missing value. Useful in implementing exception
free code paths.

### Either monad - dtools.containers.xor

An implementation of a left biased either monad. Data structure
representing either a "left" or "right" value, but not both. These two
values can be the same or different types. The "left" value is usually
taken to be the "happy path" of code flow. The "right" value is often
used for an error condition or a text string describing what went wrong.


[1]: https://pypi.org/project/dtools.containers/
[2]: https://github.com/grscheller/dtools-containers/
[3]: https://grscheller.github.io/dtools-namespace-projects/containers/
[4]: https://github.com/grscheller/dtools-namespace-projects/blob/main/README.md