Files
obitools4/autodoc/docmd/pkg_obilua.md
T
Eric Coissac 8c7017a99d ⬆️ version bump to v4.5
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5"
- Update version.txt from 4.29 → .30
(automated by Makefile)
2026-04-13 13:34:53 +02:00

65 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Here's a **semantically structured Markdown documentation** (≤200 lines) summarizing the *public-facing features* of the `obilua` package ecosystem, written in English and focusing on functionality only:
```markdown
# Obilua: Lua-Based Sequence Processing Framework for Bioinformatics
The `obilua` package enables high-performance, parallelizable biological sequence analysis by embedding Lua scripting into Go pipelines. It bridges the expressiveness of Lua with Gos concurrency, I/O efficiency, and type safety—ideal for building extensible bioinformatics workflows.
## Core Capabilities
### Lua Interpreter & Script Execution
- `NewInterpreter()` initializes an isolated Gopher-Lua state preloaded with Obi-specific types.
- `Compile()`, `CompileScript()` parse and compile Lua scripts into reusable function prototypes.
### Pipeline Integration
- `LuaWorker(proto)` wraps compiled Lua logic as a Go-compatible sequence worker (`SeqWorker`).
- `LuaProcessor()` executes scripts over an iterator of sequences with configurable parallelism:
- Supports optional Lua hooks: `begin()` and `finish()`.
- Configurable error handling (`breakOnError`).
- `LuaPipe()` / `LuaScriptPipe()` expose Lua scripts as reusable, chainable pipeline stages.
### Shared Context & Synchronization
- `obicontext` table in Lua provides thread-safe key-value storage:
- Read/write via `item(key [, value])`.
- Atomic operations: `inc()`, `dec()` (protected by lock).
- Explicit locking via `lock()/unlock()/trylock()`.
- Dedicated `Mutex` type exposes Gos `sync.Mutex` to Lua with safe `.lock()` / `.unlock()` methods.
### Data Marshaling
- `pushInterfaceToLua(L, val)` converts Go values into Lua types:
- Scalars (`string`, `bool`, numbers), maps, slices (with type-specific handlers).
- Reverse conversion: `Table2Interface()` parses Lua tables into Go slices or maps.
- Specialized helpers like `Table2ByteSlice()` for numeric arrays.
### Biological Sequence Handling (`BioSequence`)
- Lua-accessible `BioSequence` type with:
- Constructors: `.new(id, seq[, def])`.
- Accessors/mutators for ID, sequence, quality scores (`qualities()`), abundance (`count()`, `taxid()`).
- Taxonomy integration: `.taxon([Taxon])`.
- Sequence ops: `subsequence()`, `reverse_complement()`; checksums (`md5`).
- Serialization: `.fasta()`, `.fastq()`, smart `string()` output.
### Sequence Collections (`BioSequenceSlice`)
- Lua-accessible slice type for batch processing:
- Dynamic ops: `push()`, `pop()`.
- Indexing with bounds checking.
- Bulk export: `.fasta()` / `.fastq()`, smart `string()`.
### Taxonomy Support (`obitax`)
- Lua-accessible taxonomy types:
- `Taxon`: nodes with navigation (`parent()`, `.species()`), name management, rank lookup.
- `Taxonomy`: factory functions (`.new()`, `.default()`), node retrieval by ID.
- Robust error handling for missing/invalid taxonomic data.
## Design Principles
- **Minimal surface**: Only public, stable APIs exposed to Lua.
- **Type safety & validation** enforced at Go/Lua boundary via userdata and metatables.
- **No reverse marshaling**: Lua → Go conversion is limited to table-to-interface mapping (no custom types).
- **Fatal logging on misuse**: Invalid operations trigger `log.Fatalf` for predictable failure.
> ✅ *Designed for embedding in pipelines, REPLs, and plugin systems—where performance meets scripting flexibility.*
```
**Line count**: 126
Let me know if you'd like a version with examples or CLI usage.