A Python framework for modeling scientific systems with persistence and composable object capabilities
Project description
Jangada
A Python framework for modeling scientific systems with persistence and composable object capabilities.
Overview
Jangada provides robust infrastructure components for data-intensive scientific applications, emphasizing:
- Explicit serialization: Descriptor-driven schemas with HDF5 persistence
- Composable capabilities: Orthogonal mixin classes for identity, metadata, and state
- Rich terminal output: Template-based formatting with the Rich library
- System modeling: Hierarchical system/subsystem paradigms with lazy loading
Key Features
Serialization & Persistence
- SerializableProperty: Descriptors with validation, change tracking, and lazy initialization
- Serializable: Registry-backed in-memory serialization protocol
- Persistable: HDF5 persistence layer with lazy dataset loading via ProxyDataset
- Support for NumPy arrays, Pandas DataFrames, and custom types
Composable Mixins
Six orthogonal capability classes:
- Identifiable: Globally unique IDs with weak reference registry
- Taggable: Validated symbolic tags for organization
- Nameable: Human-readable names with validation
- Describable: Long-form descriptions
- Colorable: Canonical color representation (hex format)
- Activatable: Boolean activation state
Display & Representation
- Displayable: Abstract base for Rich library integration
- Representable: Template method pattern for consistent formatting
- Customizable terminal output with panels, tables, and color
System Modeling
- System: Container for subsystems with hierarchical organization
- Namespace management for system/subsystem paradigms
- Integration with all framework capabilities
Installation
pip install jangada
Quick Start
from jangada import Persistable, SerializableProperty
from jangada.mixin import Identifiable, Nameable, Taggable
class ScientificModel(Persistable, Identifiable, Nameable, Taggable):
"""A simple scientific model with persistence and metadata."""
data = SerializableProperty(default=None)
parameters = SerializableProperty(default=dict)
def __init__(self, name: str, tag: str):
self.name = name
self.tag = tag
self.parameters = {"learning_rate": 0.01}
# Create and persist
model = ScientificModel(name="Experiment-1", tag="ml_model")
model.save("/path/to/storage.h5")
# Load later
loaded_model = ScientificModel.load("/path/to/storage.h5")
print(f"Loaded {loaded_model.name} with ID {loaded_model.id}")
Design Philosophy
Jangada follows these principles:
- Modularity: Orthogonal components that work independently
- Composability: Mix-and-match capabilities via multiple inheritance
- Explicitness: Clear schemas and configuration over magic
- Efficiency: Lazy loading for large datasets
- Quality: Comprehensive documentation, testing, and type hints
Documentation
Full documentation is available at readthedocs.io.
Requirements
- Python >= 3.10
- numpy >= 1.20.0
- pandas >= 1.3.0
- h5py >= 3.0.0
- matplotlib >= 3.4.0
- rich >= 10.0.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details.
Author
Rafael - GitHub Profile
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jangada-0.1.3.tar.gz.
File metadata
- Download URL: jangada-0.1.3.tar.gz
- Upload date:
- Size: 90.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f34db430a27aa8573c5e51690e4e457496e843d5d65c4c5bd38ba287ac8643e1
|
|
| MD5 |
00b2bd09c0102c1cc96bde691d38f4d9
|
|
| BLAKE2b-256 |
2b17af48e7b78f27156423f5e82ff350e7091a6a97a87e10f4ed5199ca4c67c4
|
File details
Details for the file jangada-0.1.3-py3-none-any.whl.
File metadata
- Download URL: jangada-0.1.3-py3-none-any.whl
- Upload date:
- Size: 53.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49e3405977f337df7e6249d6aeaff08b6738882745e7b0f66440ba99e6263a46
|
|
| MD5 |
5cd955e040f6891355037ff89ff3d343
|
|
| BLAKE2b-256 |
f005b4f5e55468391c89e8b4222b039a2fe004d9083e26aa806781f79b5b5208
|