# Shlesha - High-Performance Schema-Driven Transliteration Library
A next-generation transliteration library built with **schema-driven architecture** for Sanskrit and Indic scripts. Shlesha delivers exceptional performance through compile-time optimization while maintaining extensibility through runtime-loadable schemas.
## 🚀 Quick Start for Developers
**New to Shlesha?** Get up and running in one command:
```bash
./scripts/quick-start.sh
```
This sets up everything: Rust environment, Python bindings, WASM support, and runs all tests.
**For detailed setup instructions**, see [DEVELOPER_SETUP.md](docs/DEVELOPER_SETUP.md).
**📚 Complete Documentation**: See [DOCUMENTATION_INDEX.md](docs/DOCUMENTATION_INDEX.md) for all guides and references.
---
## ⚡ Performance Highlights
Shlesha delivers **exceptional performance** competitive with the fastest transliteration libraries:
- **Only 1.07x - 2.96x slower than Vidyut** (industry-leading performance)
- **10.52 MB/s** for Indic script conversions
- **6-10x better performance** than our original targets
- **Dramatically faster** than Aksharamukha and Dharmamitra
- **Schema-generated converters** perform identically to hand-coded ones
## 🏗️ Revolutionary Schema-Based Architecture
### Compile-Time Code Generation
Shlesha uses a **revolutionary schema-driven approach** where converters are generated at compile-time from declarative schemas:
```yaml
# schemas/slp1.yaml - Generates optimized SLP1 converter
metadata:
name: "slp1"
script_type: "roman"
description: "Sanskrit Library Phonetic Basic"
target: "iso15919"
mappings:
vowels:
"A": "ā"
"I": "ī"
"U": "ū"
# ... more mappings
```
```yaml
# schemas/bengali.yaml - Generates optimized Bengali converter
metadata:
name: "bengali"
script_type: "brahmic"
description: "Bengali/Bangla script"
mappings:
vowels:
"অ": "अ" # Bengali A → Devanagari A
"আ": "आ" # Bengali AA → Devanagari AA
# ... more mappings
```
### Build-Time Optimization
The build system automatically generates highly optimized converters:
```bash
# Build output showing schema processing
warning: Processing YAML schemas...
warning: Generating optimized converters with Handlebars templates...
warning: Created 18 schema-generated converters with O(1) lookups
```
## 🎯 Hub-and-Spoke Architecture
### Smart Multi-Hub Design
- **Devanagari Hub**: Central format for Indic scripts (तमिल → देवनागरी → गुजराती)
- **ISO-15919 Hub**: Central format for romanization schemes (ITRANS → ISO → IAST)
- **Cross-Hub Conversion**: Seamless Indic ↔ Roman via both hubs
- **Direct Conversion**: Bypass hubs when possible for maximum performance
### Intelligent Routing
The system automatically determines the optimal conversion path:
```rust
// Direct passthrough - zero conversion cost
transliterator.transliterate("धर्म", "devanagari", "devanagari")?; // instant
// Single hub - one conversion
transliterator.transliterate("धर्म", "devanagari", "iso")?; // deva→iso
// Cross-hub - optimized path
transliterator.transliterate("dharma", "itrans", "bengali")?; // itrans→iso→deva→bengali
```
## 📚 Supported Scripts (15+ Scripts, 210+ Conversion Pairs)
### Indic Scripts (Schema-Generated)
- **Devanagari** (`devanagari`, `deva`) - Sanskrit, Hindi, Marathi
- **Bengali** (`bengali`, `bn`) - Bengali/Bangla script
- **Tamil** (`tamil`, `ta`) - Tamil script
- **Telugu** (`telugu`, `te`) - Telugu script
- **Gujarati** (`gujarati`, `gu`) - Gujarati script
- **Kannada** (`kannada`, `kn`) - Kannada script
- **Malayalam** (`malayalam`, `ml`) - Malayalam script
- **Odia** (`odia`, `od`) - Odia/Oriya script
- **Gurmukhi** (`gurmukhi`, `pa`) - Punjabi script
- **Sinhala** (`sinhala`, `si`) - Sinhala script
### Romanization Schemes (Schema-Generated)
- **ISO-15919** (`iso15919`, `iso`) - International standard
- **ITRANS** (`itrans`) - Indian languages TRANSliteration
- **SLP1** (`slp1`) - Sanskrit Library Phonetic Basic
- **Harvard-Kyoto** (`harvard_kyoto`, `hk`) - ASCII-based scheme
- **Velthuis** (`velthuis`) - TeX-compatible scheme
- **WX** (`wx`) - ASCII-based notation
### Hand-Coded Scripts (Premium Quality)
- **IAST** (`iast`) - International Alphabet of Sanskrit Transliteration
- **Kolkata** (`kolkata`) - Regional romanization scheme
- **Grantha** (`grantha`) - Classical Sanskrit script
## 🛠️ Usage Examples
### Rust Library
```rust
use shlesha::Shlesha;
let transliterator = Shlesha::new();
// High-performance cross-script conversion
let result = transliterator.transliterate("धर्म", "devanagari", "gujarati")?;
println!("{}", result); // "ધર્મ"
// Roman to Indic conversion
let result = transliterator.transliterate("dharmakṣetra", "slp1", "tamil")?;
println!("{}", result); // "தர்மக்ஷேத்ர"
// Schema-generated converters in action
let result = transliterator.transliterate("dharmakSetra", "slp1", "iast")?;
println!("{}", result); // "dharmakśetra"
```
### Python Bindings (PyO3)
```python
import shlesha
# Create transliterator with all schema-generated converters
transliterator = shlesha.Shlesha()
# Fast schema-based conversion
result = transliterator.transliterate("ধর্ম", "bengali", "telugu")
print(result) # "ధర్మ"
# Performance with metadata tracking
result = transliterator.transliterate_with_metadata("धर्मkr", "devanagari", "iast")
print(f"Output: {result.output}") # "dharmakr"
print(f"Unknown tokens: {len(result.metadata.unknown_tokens)}")
# Runtime extensibility
scripts = shlesha.get_supported_scripts()
print(f"Supports {len(scripts)} scripts: {scripts}")
```
### Command Line Interface
```bash
# Schema-generated high-performance conversion
shlesha transliterate --from slp1 --to devanagari "dharmakSetra"
# Output: धर्मक्षेत्र
# Cross-script conversion via dual hubs
shlesha transliterate --from itrans --to tamil "dharma"
# Output: தர்ம
# List all schema-generated + hand-coded scripts
shlesha scripts
# Output: bengali, devanagari, gujarati, harvard_kyoto, iast, iso15919, itrans, ...
```
### WebAssembly (Browser/Node.js)
```javascript
import init, { WasmShlesha } from './pkg/shlesha.js';
async function demo() {
await init();
const transliterator = new WasmShlesha();
// Schema-generated converter performance in browser
const result = transliterator.transliterate("કર્મ", "gujarati", "devanagari");
console.log(result); // "कर्म"
// Runtime script discovery
const scripts = transliterator.listSupportedScripts();
console.log(`${scripts.length} scripts available`);
}
```
## 🔧 Runtime Schema Loading
**NEW**: Shlesha now supports **runtime schema loading** across all APIs, enabling you to add custom scripts without recompilation.
### Rust API
```rust
use shlesha::Shlesha;
let mut transliterator = Shlesha::new();
// Load custom schema from YAML content
let custom_schema = r#"
metadata:
name: "my_custom_script"
script_type: "roman"
has_implicit_a: false
description: "My custom transliteration scheme"
target: "iso15919"
mappings:
vowels:
"a": "a"
"e": "ē"
consonants:
"k": "k"
"t": "ṭ"
"#;
// Load the schema at runtime
transliterator.load_schema_from_string(custom_schema, "my_custom_script")?;
// Use immediately without recompilation
let result = transliterator.transliterate("kate", "my_custom_script", "devanagari")?;
println!("{}", result); // "काटे"
// Schema management
let info = transliterator.get_schema_info("my_custom_script").unwrap();
println!("Loaded {} with {} mappings", info.name, info.mapping_count);
```
### Python API
```python
import shlesha
transliterator = shlesha.Shlesha()
# Load schema from YAML string
yaml_content = """
metadata:
name: "custom_script"
script_type: "roman"
has_implicit_a: false
description: "Custom transliteration"
target: "iso15919"
mappings:
vowels:
"a": "a"
consonants:
"k": "k"
"""
# Runtime loading
transliterator.load_schema_from_string(yaml_content, "custom_script")
# Immediate usage
result = transliterator.transliterate("ka", "custom_script", "devanagari")
print(result) # "क"
# Schema info
info = transliterator.get_schema_info("custom_script")
print(f"Script: {info['name']}, Mappings: {info['mapping_count']}")
# Schema management
transliterator.remove_schema("custom_script")
transliterator.clear_runtime_schemas()
```
### JavaScript/WASM API
```javascript
import init, { WasmShlesha } from './pkg/shlesha.js';
async function loadCustomScript() {
await init();
const transliterator = new WasmShlesha();
// Define custom schema
const yamlContent = `
metadata:
name: "custom_script"
script_type: "roman"
has_implicit_a: false
description: "Custom script"
target: "iso15919"
mappings:
vowels:
"a": "a"
consonants:
"k": "k"
`;
// Load at runtime
transliterator.loadSchemaFromString(yamlContent, "custom_script");
// Use immediately
const result = transliterator.transliterate("ka", "custom_script", "devanagari");
console.log(result); // "क"
// Get schema information
const info = transliterator.getSchemaInfo("custom_script");
console.log(`Name: ${info.name}, Mappings: ${info.mapping_count}`);
}
```
### Key Runtime Features
- ✅ **Load from YAML strings** - No file system required
- ✅ **Load from file paths** - For development workflows
- ✅ **Schema validation** - Automatic error checking
- ✅ **Hot reloading** - Add/remove schemas dynamically
- ✅ **Schema introspection** - Get metadata about loaded schemas
- ✅ **Memory management** - Clear schemas when done
- ✅ **Cross-platform** - Identical API across Rust, Python, WASM
### Use Cases
**Development & Testing**
```rust
// Test schema variations quickly
transliterator.load_schema_from_string(variant_a, "test_a")?;
transliterator.load_schema_from_string(variant_b, "test_b")?;
// Compare results immediately
```
**Dynamic Applications**
```python
# User uploads custom transliteration scheme
user_schema = request.files['schema'].read().decode('utf-8')
transliterator.load_schema_from_string(user_schema, user_id)
# Use immediately in application
```
**Configuration-Driven Systems**
```javascript
// Load schemas from configuration
config.schemas.forEach(schema => {
transliterator.loadSchemaFromString(schema.content, schema.name);
});
```
## ⚡ Performance & Benchmarks
### Competitive Performance Analysis
Recent benchmarks show Shlesha delivers **industry-competitive performance**:
| Library | SLP1→ISO (71 chars) | ITRANS→ISO (71 chars) | Architecture |
|---------|--------------------|-----------------------|--------------|
| **Vidyut** | 1.75 MB/s | 1.92 MB/s | Direct conversion |
| **Shlesha** | 0.93 MB/s | 1.04 MB/s | Schema-generated hub |
| **Performance Ratio** | **1.89x slower** | **1.85x slower** | **Extensible** |
### Performance Achievements
✅ **6-10x better** than original performance targets
✅ **Only 1.07x - 2.96x slower** than Vidyut (industry leader)
✅ **10.52 MB/s** for Indic script conversions
✅ **Dramatically faster** than Aksharamukha/Dharmamitra
✅ **Schema-generated = hand-coded performance**
### Architecture Trade-offs
| Aspect | Shlesha | Vidyut |
|--------|---------|---------|
| **Performance** | Excellent (2-3x slower) | Best-in-class |
| **Extensibility** | Runtime schemas | Compile-time only |
| **Script Support** | 15+ (easily expandable) | Limited |
| **Architecture** | Hub-and-spoke | Direct conversion |
| **Bindings** | Rust/Python/WASM/CLI | Rust only |
## 🏗️ Schema-Driven Development
### Adding New Scripts
Adding support for new scripts is now trivial with schemas:
```yaml
# schemas/new_script.yaml
metadata:
name: "NewScript"
description: "Description of the script"
unicode_block: "NewScript"
has_implicit_vowels: true
mappings:
vowels:
- source: "𑀅" # New script character
target: "अ" # Devanagari equivalent
# ... add more mappings
```
```bash
# Rebuild to include new script
cargo build
# New script automatically available!
```
### Template-Based Generation
Converters are generated using **Handlebars templates** for consistency:
```handlebars
{{!-- templates/indic_converter.hbs --}}
/// {{metadata.description}} converter generated from schema
pub struct {{pascal_case metadata.name}}Converter {
{{snake_case metadata.name}}_to_deva_map: HashMap<char, char>,
deva_to_{{snake_case metadata.name}}_map: HashMap<char, char>,
}
impl {{pascal_case metadata.name}}Converter {
pub fn new() -> Self {
// Generated O(1) lookup tables
let mut {{snake_case metadata.name}}_to_deva = HashMap::new();
{{#each character_mappings}}
{{snake_case ../metadata.name}}_to_deva.insert('{{this.source}}', '{{this.target}}');
{{/each}}
// ... template continues
}
}
```
## 🧪 Quality Assurance
### Comprehensive Test Suite
- ✅ **127 passing tests** covering all functionality
- ✅ **Schema-generated converter tests** for all 14 generated converters
- ✅ **Performance regression tests** ensuring schema = hand-coded speed
- ✅ **Cross-script conversion matrix** testing all 210+ pairs
- ✅ **Unknown character handling** with graceful degradation
### Build System Validation
```bash
# Test schema-generated converters maintain performance
cargo test --lib
# Verify all conversions work
cargo test comprehensive_bidirectional_tests
# Performance benchmarks
cargo run --example shlesha_vs_vidyut_benchmark
```
## 🔧 Build Configuration & Features
### Schema Processing Features
```bash
# Default: Schema-generated + hand-coded converters
cargo build
# Development mode with schema recompilation
cargo build --features "schema-dev"
# Minimal build (hand-coded only)
cargo build --no-default-features --features "hand-coded-only"
# All features (Python + WASM + CLI)
cargo build --features "python,wasm,cli"
```
### Runtime Extensibility
```rust
let mut transliterator = Shlesha::new();
// Load additional schemas at runtime (future feature)
transliterator.load_schema("path/to/new_script.yaml")?;
// Schema registry access
let scripts = transliterator.list_supported_scripts();
println!("Dynamically loaded: {:?}", scripts);
```
## 🚀 Advanced Features
### Metadata Collection
```rust
// Track unknown characters and conversion details
let result = transliterator.transliterate_with_metadata("धर्मkr", "devanagari", "iast")?;
if let Some(metadata) = result.metadata {
println!("Conversion: {} → {}", metadata.source_script, metadata.target_script);
for unknown in metadata.unknown_tokens {
println!("Unknown '{}' at position {}", unknown.token, unknown.position);
}
}
```
### Script Characteristics
```rust
// Schema-aware script properties
let registry = ScriptConverterRegistry::default();
// Indic scripts have implicit vowels
assert!(registry.script_has_implicit_vowels("bengali").unwrap());
assert!(registry.script_has_implicit_vowels("devanagari").unwrap());
// Roman schemes don't
assert!(!registry.script_has_implicit_vowels("itrans").unwrap());
assert!(!registry.script_has_implicit_vowels("slp1").unwrap());
```
### Hub Processing Control
```rust
// Fine-grained control over conversion paths
let hub = Hub::new();
// Direct hub operations
let iso_text = hub.deva_to_iso("धर्म")?; // Devanagari → ISO
let deva_text = hub.iso_to_deva("dharma")?; // ISO → Devanagari
// Cross-hub conversion with metadata
let result = hub.deva_to_iso_with_metadata("धर्म")?;
```
## 📖 Documentation
### Complete Documentation Suite
- [**Architecture Guide**](docs/ARCHITECTURE.md) - Deep dive into hub-and-spoke design
- [**Schema Reference**](docs/SCHEMA_REFERENCE.md) - Complete schema format documentation
- [**Performance Guide**](docs/PERFORMANCE.md) - Optimization techniques and benchmarks
- [**API Reference**](docs/API_REFERENCE.md) - Complete function and type reference
- [**Developer Setup**](docs/DEVELOPER_SETUP.md) - Development environment setup
- [**Release System**](docs/RELEASE_SYSTEM.md) - Automated release workflow overview
- [**Deployment Guide**](DEPLOYMENT.md) - Complete deployment and environment setup
- [**crates.io RC Support**](docs/CRATES_IO_RC_SUPPORT.md) - Release candidate publishing guide
- [**Security Setup**](docs/SECURITY_SETUP.md) - Token management and environment security
- [**Contributing Guide**](CONTRIBUTING.md) - Guidelines for contributors
### Quick Reference
```bash
# Generate documentation
cargo doc --open
# Run all examples
cargo run --example shlesha_vs_vidyut_benchmark
cargo run --example roman_allocation_analysis
# Performance testing
cargo bench
```
## 🚀 Releases
Shlesha uses an automated release system for publishing to multiple package registries:
### Quick Release
```bash
# Guided release process
./scripts/release.sh
```
### Package Installation
```bash
# Python (PyPI)
pip install shlesha
# WASM (npm)
npm install shlesha-wasm
# Rust (crates.io)
cargo add shlesha
```
See [DEPLOYMENT.md](DEPLOYMENT.md) for complete release documentation.
## 🤝 Contributing
We welcome contributions! Shlesha's schema-driven architecture makes adding new scripts easier than ever:
1. **Add Schema**: Create TOML/YAML mapping file
2. **Test**: Run test suite to verify
3. **Benchmark**: Ensure performance maintained
4. **Submit**: Open PR with schema and tests
See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## 🙏 Acknowledgments
- **Unicode Consortium** for Indic script standards
- **ISO-15919** for romanization standardization
- **Sanskrit Library** for SLP1 encoding schemes
- **Vidyut Project** for performance benchmarking standards
- **Rust Community** for excellent tools (PyO3, wasm-pack, handlebars)
---
**Shlesha** - *Where performance meets extensibility through intelligent schema-driven design.*
Raw data
{
"_id": null,
"home_page": null,
"name": "shlesha",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "transliteration, sanskrit, indic, devanagari, unicode",
"author": "Shlesha Contributors",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/bc/9d/003004ea9d2206886387b283fa5d3818763916d7ae8f828345f961998556/shlesha-0.2.0.tar.gz",
"platform": null,
"description": "# Shlesha - High-Performance Schema-Driven Transliteration Library\n\nA next-generation transliteration library built with **schema-driven architecture** for Sanskrit and Indic scripts. Shlesha delivers exceptional performance through compile-time optimization while maintaining extensibility through runtime-loadable schemas.\n\n## \ud83d\ude80 Quick Start for Developers\n\n**New to Shlesha?** Get up and running in one command:\n\n```bash\n./scripts/quick-start.sh\n```\n\nThis sets up everything: Rust environment, Python bindings, WASM support, and runs all tests.\n\n**For detailed setup instructions**, see [DEVELOPER_SETUP.md](docs/DEVELOPER_SETUP.md).\n\n**\ud83d\udcda Complete Documentation**: See [DOCUMENTATION_INDEX.md](docs/DOCUMENTATION_INDEX.md) for all guides and references.\n\n---\n\n## \u26a1 Performance Highlights\n\nShlesha delivers **exceptional performance** competitive with the fastest transliteration libraries:\n\n- **Only 1.07x - 2.96x slower than Vidyut** (industry-leading performance)\n- **10.52 MB/s** for Indic script conversions \n- **6-10x better performance** than our original targets\n- **Dramatically faster** than Aksharamukha and Dharmamitra\n- **Schema-generated converters** perform identically to hand-coded ones\n\n## \ud83c\udfd7\ufe0f Revolutionary Schema-Based Architecture\n\n### Compile-Time Code Generation\n\nShlesha uses a **revolutionary schema-driven approach** where converters are generated at compile-time from declarative schemas:\n\n```yaml\n# schemas/slp1.yaml - Generates optimized SLP1 converter\nmetadata:\n name: \"slp1\"\n script_type: \"roman\"\n description: \"Sanskrit Library Phonetic Basic\"\n\ntarget: \"iso15919\"\n\nmappings:\n vowels:\n \"A\": \"\u0101\"\n \"I\": \"\u012b\" \n \"U\": \"\u016b\"\n # ... more mappings\n```\n\n```yaml\n# schemas/bengali.yaml - Generates optimized Bengali converter \nmetadata:\n name: \"bengali\"\n script_type: \"brahmic\"\n description: \"Bengali/Bangla script\"\n\nmappings:\n vowels:\n \"\u0985\": \"\u0905\" # Bengali A \u2192 Devanagari A\n \"\u0986\": \"\u0906\" # Bengali AA \u2192 Devanagari AA\n # ... more mappings\n```\n\n### Build-Time Optimization\n\nThe build system automatically generates highly optimized converters:\n\n```bash\n# Build output showing schema processing\nwarning: Processing YAML schemas...\nwarning: Generating optimized converters with Handlebars templates...\nwarning: Created 18 schema-generated converters with O(1) lookups\n```\n\n## \ud83c\udfaf Hub-and-Spoke Architecture\n\n### Smart Multi-Hub Design\n\n- **Devanagari Hub**: Central format for Indic scripts (\u0924\u092e\u093f\u0932 \u2192 \u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940 \u2192 \u0917\u0941\u091c\u0930\u093e\u0924\u0940)\n- **ISO-15919 Hub**: Central format for romanization schemes (ITRANS \u2192 ISO \u2192 IAST)\n- **Cross-Hub Conversion**: Seamless Indic \u2194 Roman via both hubs\n- **Direct Conversion**: Bypass hubs when possible for maximum performance\n\n### Intelligent Routing\n\nThe system automatically determines the optimal conversion path:\n\n```rust\n// Direct passthrough - zero conversion cost\ntransliterator.transliterate(\"\u0927\u0930\u094d\u092e\", \"devanagari\", \"devanagari\")?; // instant\n\n// Single hub - one conversion \ntransliterator.transliterate(\"\u0927\u0930\u094d\u092e\", \"devanagari\", \"iso\")?; // deva\u2192iso\n\n// Cross-hub - optimized path\ntransliterator.transliterate(\"dharma\", \"itrans\", \"bengali\")?; // itrans\u2192iso\u2192deva\u2192bengali\n```\n\n## \ud83d\udcda Supported Scripts (15+ Scripts, 210+ Conversion Pairs)\n\n### Indic Scripts (Schema-Generated)\n- **Devanagari** (`devanagari`, `deva`) - Sanskrit, Hindi, Marathi \n- **Bengali** (`bengali`, `bn`) - Bengali/Bangla script\n- **Tamil** (`tamil`, `ta`) - Tamil script\n- **Telugu** (`telugu`, `te`) - Telugu script \n- **Gujarati** (`gujarati`, `gu`) - Gujarati script\n- **Kannada** (`kannada`, `kn`) - Kannada script\n- **Malayalam** (`malayalam`, `ml`) - Malayalam script\n- **Odia** (`odia`, `od`) - Odia/Oriya script\n- **Gurmukhi** (`gurmukhi`, `pa`) - Punjabi script\n- **Sinhala** (`sinhala`, `si`) - Sinhala script\n\n### Romanization Schemes (Schema-Generated)\n- **ISO-15919** (`iso15919`, `iso`) - International standard\n- **ITRANS** (`itrans`) - Indian languages TRANSliteration\n- **SLP1** (`slp1`) - Sanskrit Library Phonetic Basic \n- **Harvard-Kyoto** (`harvard_kyoto`, `hk`) - ASCII-based scheme\n- **Velthuis** (`velthuis`) - TeX-compatible scheme\n- **WX** (`wx`) - ASCII-based notation\n\n### Hand-Coded Scripts (Premium Quality)\n- **IAST** (`iast`) - International Alphabet of Sanskrit Transliteration\n- **Kolkata** (`kolkata`) - Regional romanization scheme\n- **Grantha** (`grantha`) - Classical Sanskrit script\n\n## \ud83d\udee0\ufe0f Usage Examples\n\n### Rust Library\n\n```rust\nuse shlesha::Shlesha;\n\nlet transliterator = Shlesha::new();\n\n// High-performance cross-script conversion\nlet result = transliterator.transliterate(\"\u0927\u0930\u094d\u092e\", \"devanagari\", \"gujarati\")?;\nprintln!(\"{}\", result); // \"\u0aa7\u0ab0\u0acd\u0aae\"\n\n// Roman to Indic conversion \nlet result = transliterator.transliterate(\"dharmak\u1e63etra\", \"slp1\", \"tamil\")?;\nprintln!(\"{}\", result); // \"\u0ba4\u0bb0\u0bcd\u0bae\u0b95\u0bcd\u0bb7\u0bc7\u0ba4\u0bcd\u0bb0\"\n\n// Schema-generated converters in action\nlet result = transliterator.transliterate(\"dharmakSetra\", \"slp1\", \"iast\")?;\nprintln!(\"{}\", result); // \"dharmak\u015betra\"\n```\n\n### Python Bindings (PyO3)\n\n```python\nimport shlesha\n\n# Create transliterator with all schema-generated converters\ntransliterator = shlesha.Shlesha()\n\n# Fast schema-based conversion\nresult = transliterator.transliterate(\"\u09a7\u09b0\u09cd\u09ae\", \"bengali\", \"telugu\")\nprint(result) # \"\u0c27\u0c30\u0c4d\u0c2e\"\n\n# Performance with metadata tracking\nresult = transliterator.transliterate_with_metadata(\"\u0927\u0930\u094d\u092ekr\", \"devanagari\", \"iast\")\nprint(f\"Output: {result.output}\") # \"dharmakr\"\nprint(f\"Unknown tokens: {len(result.metadata.unknown_tokens)}\")\n\n# Runtime extensibility\nscripts = shlesha.get_supported_scripts()\nprint(f\"Supports {len(scripts)} scripts: {scripts}\")\n```\n\n### Command Line Interface\n\n```bash\n# Schema-generated high-performance conversion\nshlesha transliterate --from slp1 --to devanagari \"dharmakSetra\"\n# Output: \u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\n\n# Cross-script conversion via dual hubs \nshlesha transliterate --from itrans --to tamil \"dharma\"\n# Output: \u0ba4\u0bb0\u0bcd\u0bae\n\n# List all schema-generated + hand-coded scripts\nshlesha scripts\n# Output: bengali, devanagari, gujarati, harvard_kyoto, iast, iso15919, itrans, ...\n```\n\n### WebAssembly (Browser/Node.js)\n\n```javascript\nimport init, { WasmShlesha } from './pkg/shlesha.js';\n\nasync function demo() {\n await init();\n const transliterator = new WasmShlesha();\n \n // Schema-generated converter performance in browser\n const result = transliterator.transliterate(\"\u0a95\u0ab0\u0acd\u0aae\", \"gujarati\", \"devanagari\");\n console.log(result); // \"\u0915\u0930\u094d\u092e\"\n \n // Runtime script discovery\n const scripts = transliterator.listSupportedScripts();\n console.log(`${scripts.length} scripts available`);\n}\n```\n\n## \ud83d\udd27 Runtime Schema Loading\n\n**NEW**: Shlesha now supports **runtime schema loading** across all APIs, enabling you to add custom scripts without recompilation.\n\n### Rust API\n\n```rust\nuse shlesha::Shlesha;\n\nlet mut transliterator = Shlesha::new();\n\n// Load custom schema from YAML content\nlet custom_schema = r#\"\nmetadata:\n name: \"my_custom_script\"\n script_type: \"roman\"\n has_implicit_a: false\n description: \"My custom transliteration scheme\"\n\ntarget: \"iso15919\"\n\nmappings:\n vowels:\n \"a\": \"a\"\n \"e\": \"\u0113\"\n consonants:\n \"k\": \"k\"\n \"t\": \"\u1e6d\"\n\"#;\n\n// Load the schema at runtime\ntransliterator.load_schema_from_string(custom_schema, \"my_custom_script\")?;\n\n// Use immediately without recompilation\nlet result = transliterator.transliterate(\"kate\", \"my_custom_script\", \"devanagari\")?;\nprintln!(\"{}\", result); // \"\u0915\u093e\u091f\u0947\"\n\n// Schema management\nlet info = transliterator.get_schema_info(\"my_custom_script\").unwrap();\nprintln!(\"Loaded {} with {} mappings\", info.name, info.mapping_count);\n```\n\n### Python API\n\n```python\nimport shlesha\n\ntransliterator = shlesha.Shlesha()\n\n# Load schema from YAML string\nyaml_content = \"\"\"\nmetadata:\n name: \"custom_script\"\n script_type: \"roman\"\n has_implicit_a: false\n description: \"Custom transliteration\"\n\ntarget: \"iso15919\"\n\nmappings:\n vowels:\n \"a\": \"a\"\n consonants:\n \"k\": \"k\"\n\"\"\"\n\n# Runtime loading\ntransliterator.load_schema_from_string(yaml_content, \"custom_script\")\n\n# Immediate usage\nresult = transliterator.transliterate(\"ka\", \"custom_script\", \"devanagari\")\nprint(result) # \"\u0915\"\n\n# Schema info\ninfo = transliterator.get_schema_info(\"custom_script\")\nprint(f\"Script: {info['name']}, Mappings: {info['mapping_count']}\")\n\n# Schema management\ntransliterator.remove_schema(\"custom_script\")\ntransliterator.clear_runtime_schemas()\n```\n\n### JavaScript/WASM API\n\n```javascript\nimport init, { WasmShlesha } from './pkg/shlesha.js';\n\nasync function loadCustomScript() {\n await init();\n const transliterator = new WasmShlesha();\n \n // Define custom schema\n const yamlContent = `\nmetadata:\n name: \"custom_script\"\n script_type: \"roman\"\n has_implicit_a: false\n description: \"Custom script\"\n\ntarget: \"iso15919\"\n\nmappings:\n vowels:\n \"a\": \"a\"\n consonants:\n \"k\": \"k\"\n`;\n \n // Load at runtime\n transliterator.loadSchemaFromString(yamlContent, \"custom_script\");\n \n // Use immediately\n const result = transliterator.transliterate(\"ka\", \"custom_script\", \"devanagari\");\n console.log(result); // \"\u0915\"\n \n // Get schema information\n const info = transliterator.getSchemaInfo(\"custom_script\");\n console.log(`Name: ${info.name}, Mappings: ${info.mapping_count}`);\n}\n```\n\n### Key Runtime Features\n\n- \u2705 **Load from YAML strings** - No file system required\n- \u2705 **Load from file paths** - For development workflows \n- \u2705 **Schema validation** - Automatic error checking\n- \u2705 **Hot reloading** - Add/remove schemas dynamically\n- \u2705 **Schema introspection** - Get metadata about loaded schemas\n- \u2705 **Memory management** - Clear schemas when done\n- \u2705 **Cross-platform** - Identical API across Rust, Python, WASM\n\n### Use Cases\n\n**Development & Testing**\n```rust\n// Test schema variations quickly\ntransliterator.load_schema_from_string(variant_a, \"test_a\")?;\ntransliterator.load_schema_from_string(variant_b, \"test_b\")?;\n// Compare results immediately\n```\n\n**Dynamic Applications**\n```python\n# User uploads custom transliteration scheme\nuser_schema = request.files['schema'].read().decode('utf-8')\ntransliterator.load_schema_from_string(user_schema, user_id)\n# Use immediately in application\n```\n\n**Configuration-Driven Systems**\n```javascript\n// Load schemas from configuration\nconfig.schemas.forEach(schema => {\n transliterator.loadSchemaFromString(schema.content, schema.name);\n});\n```\n\n## \u26a1 Performance & Benchmarks\n\n### Competitive Performance Analysis\n\nRecent benchmarks show Shlesha delivers **industry-competitive performance**:\n\n| Library | SLP1\u2192ISO (71 chars) | ITRANS\u2192ISO (71 chars) | Architecture |\n|---------|--------------------|-----------------------|--------------|\n| **Vidyut** | 1.75 MB/s | 1.92 MB/s | Direct conversion |\n| **Shlesha** | 0.93 MB/s | 1.04 MB/s | Schema-generated hub |\n| **Performance Ratio** | **1.89x slower** | **1.85x slower** | **Extensible** |\n\n### Performance Achievements\n\n\u2705 **6-10x better** than original performance targets \n\u2705 **Only 1.07x - 2.96x slower** than Vidyut (industry leader) \n\u2705 **10.52 MB/s** for Indic script conversions \n\u2705 **Dramatically faster** than Aksharamukha/Dharmamitra \n\u2705 **Schema-generated = hand-coded performance**\n\n### Architecture Trade-offs\n\n| Aspect | Shlesha | Vidyut |\n|--------|---------|---------|\n| **Performance** | Excellent (2-3x slower) | Best-in-class |\n| **Extensibility** | Runtime schemas | Compile-time only |\n| **Script Support** | 15+ (easily expandable) | Limited |\n| **Architecture** | Hub-and-spoke | Direct conversion |\n| **Bindings** | Rust/Python/WASM/CLI | Rust only |\n\n## \ud83c\udfd7\ufe0f Schema-Driven Development\n\n### Adding New Scripts\n\nAdding support for new scripts is now trivial with schemas:\n\n```yaml\n# schemas/new_script.yaml\nmetadata:\n name: \"NewScript\"\n description: \"Description of the script\"\n unicode_block: \"NewScript\"\n has_implicit_vowels: true\n\nmappings:\n vowels:\n - source: \"\ud804\udc05\" # New script character\n target: \"\u0905\" # Devanagari equivalent\n # ... add more mappings\n```\n\n```bash\n# Rebuild to include new script\ncargo build\n# New script automatically available!\n```\n\n### Template-Based Generation\n\nConverters are generated using **Handlebars templates** for consistency:\n\n```handlebars\n{{!-- templates/indic_converter.hbs --}}\n/// {{metadata.description}} converter generated from schema\npub struct {{pascal_case metadata.name}}Converter {\n {{snake_case metadata.name}}_to_deva_map: HashMap<char, char>,\n deva_to_{{snake_case metadata.name}}_map: HashMap<char, char>,\n}\n\nimpl {{pascal_case metadata.name}}Converter {\n pub fn new() -> Self {\n // Generated O(1) lookup tables\n let mut {{snake_case metadata.name}}_to_deva = HashMap::new();\n {{#each character_mappings}}\n {{snake_case ../metadata.name}}_to_deva.insert('{{this.source}}', '{{this.target}}');\n {{/each}}\n // ... template continues\n }\n}\n```\n\n## \ud83e\uddea Quality Assurance\n\n### Comprehensive Test Suite\n\n- \u2705 **127 passing tests** covering all functionality\n- \u2705 **Schema-generated converter tests** for all 14 generated converters \n- \u2705 **Performance regression tests** ensuring schema = hand-coded speed\n- \u2705 **Cross-script conversion matrix** testing all 210+ pairs\n- \u2705 **Unknown character handling** with graceful degradation\n\n### Build System Validation\n\n```bash\n# Test schema-generated converters maintain performance\ncargo test --lib\n\n# Verify all conversions work\ncargo test comprehensive_bidirectional_tests\n\n# Performance benchmarks\ncargo run --example shlesha_vs_vidyut_benchmark\n```\n\n## \ud83d\udd27 Build Configuration & Features\n\n### Schema Processing Features\n\n```bash\n# Default: Schema-generated + hand-coded converters\ncargo build\n\n# Development mode with schema recompilation\ncargo build --features \"schema-dev\"\n\n# Minimal build (hand-coded only)\ncargo build --no-default-features --features \"hand-coded-only\"\n\n# All features (Python + WASM + CLI)\ncargo build --features \"python,wasm,cli\"\n```\n\n### Runtime Extensibility\n\n```rust\nlet mut transliterator = Shlesha::new();\n\n// Load additional schemas at runtime (future feature)\ntransliterator.load_schema(\"path/to/new_script.yaml\")?;\n\n// Schema registry access\nlet scripts = transliterator.list_supported_scripts();\nprintln!(\"Dynamically loaded: {:?}\", scripts);\n```\n\n## \ud83d\ude80 Advanced Features\n\n### Metadata Collection\n\n```rust\n// Track unknown characters and conversion details\nlet result = transliterator.transliterate_with_metadata(\"\u0927\u0930\u094d\u092ekr\", \"devanagari\", \"iast\")?;\n\nif let Some(metadata) = result.metadata {\n println!(\"Conversion: {} \u2192 {}\", metadata.source_script, metadata.target_script);\n for unknown in metadata.unknown_tokens {\n println!(\"Unknown '{}' at position {}\", unknown.token, unknown.position);\n }\n}\n```\n\n### Script Characteristics\n\n```rust\n// Schema-aware script properties\nlet registry = ScriptConverterRegistry::default();\n\n// Indic scripts have implicit vowels\nassert!(registry.script_has_implicit_vowels(\"bengali\").unwrap());\nassert!(registry.script_has_implicit_vowels(\"devanagari\").unwrap());\n\n// Roman schemes don't\nassert!(!registry.script_has_implicit_vowels(\"itrans\").unwrap());\nassert!(!registry.script_has_implicit_vowels(\"slp1\").unwrap());\n```\n\n### Hub Processing Control\n\n```rust\n// Fine-grained control over conversion paths\nlet hub = Hub::new();\n\n// Direct hub operations\nlet iso_text = hub.deva_to_iso(\"\u0927\u0930\u094d\u092e\")?; // Devanagari \u2192 ISO\nlet deva_text = hub.iso_to_deva(\"dharma\")?; // ISO \u2192 Devanagari\n\n// Cross-hub conversion with metadata\nlet result = hub.deva_to_iso_with_metadata(\"\u0927\u0930\u094d\u092e\")?;\n```\n\n## \ud83d\udcd6 Documentation\n\n### Complete Documentation Suite\n\n- [**Architecture Guide**](docs/ARCHITECTURE.md) - Deep dive into hub-and-spoke design\n- [**Schema Reference**](docs/SCHEMA_REFERENCE.md) - Complete schema format documentation \n- [**Performance Guide**](docs/PERFORMANCE.md) - Optimization techniques and benchmarks\n- [**API Reference**](docs/API_REFERENCE.md) - Complete function and type reference\n- [**Developer Setup**](docs/DEVELOPER_SETUP.md) - Development environment setup\n- [**Release System**](docs/RELEASE_SYSTEM.md) - Automated release workflow overview\n- [**Deployment Guide**](DEPLOYMENT.md) - Complete deployment and environment setup\n- [**crates.io RC Support**](docs/CRATES_IO_RC_SUPPORT.md) - Release candidate publishing guide\n- [**Security Setup**](docs/SECURITY_SETUP.md) - Token management and environment security\n- [**Contributing Guide**](CONTRIBUTING.md) - Guidelines for contributors\n\n### Quick Reference\n\n```bash\n# Generate documentation\ncargo doc --open\n\n# Run all examples\ncargo run --example shlesha_vs_vidyut_benchmark\ncargo run --example roman_allocation_analysis \n\n# Performance testing\ncargo bench\n```\n\n## \ud83d\ude80 Releases\n\nShlesha uses an automated release system for publishing to multiple package registries:\n\n### Quick Release\n```bash\n# Guided release process\n./scripts/release.sh\n```\n\n### Package Installation\n```bash\n# Python (PyPI)\npip install shlesha\n\n# WASM (npm) \nnpm install shlesha-wasm\n\n# Rust (crates.io)\ncargo add shlesha\n```\n\nSee [DEPLOYMENT.md](DEPLOYMENT.md) for complete release documentation.\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Shlesha's schema-driven architecture makes adding new scripts easier than ever:\n\n1. **Add Schema**: Create TOML/YAML mapping file\n2. **Test**: Run test suite to verify\n3. **Benchmark**: Ensure performance maintained\n4. **Submit**: Open PR with schema and tests\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- **Unicode Consortium** for Indic script standards\n- **ISO-15919** for romanization standardization \n- **Sanskrit Library** for SLP1 encoding schemes\n- **Vidyut Project** for performance benchmarking standards\n- **Rust Community** for excellent tools (PyO3, wasm-pack, handlebars)\n\n---\n\n**Shlesha** - *Where performance meets extensibility through intelligent schema-driven design.*\n",
"bugtrack_url": null,
"license": "MIT OR Apache-2.0",
"summary": "High-performance extensible transliteration library for Sanskrit and Indic scripts",
"version": "0.2.0",
"project_urls": {
"documentation": "https://github.com/udapaana/shlesha/blob/main/README.md",
"homepage": "https://github.com/udapaana/shlesha",
"repository": "https://github.com/udapaana/shlesha"
},
"split_keywords": [
"transliteration",
" sanskrit",
" indic",
" devanagari",
" unicode"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "15399a5993139613a50f421a94e57a0e40458669cae28484a5871e4ef8041d9b",
"md5": "2ce785e87e621167401d6eab2e6a5839",
"sha256": "17fc7476f75dd336b885aef2131167fcbd8270d71143c48ee1020db504f53c2c"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2ce785e87e621167401d6eab2e6a5839",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 841421,
"upload_time": "2025-07-12T20:08:47",
"upload_time_iso_8601": "2025-07-12T20:08:47.756097Z",
"url": "https://files.pythonhosted.org/packages/15/39/9a5993139613a50f421a94e57a0e40458669cae28484a5871e4ef8041d9b/shlesha-0.2.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9e8b373894a29ee3a6601b61dd3f30a8d1d73d8e83752d5c85065fe6ff0b2053",
"md5": "610748c0b1eacb5c7383e384a0a9f86f",
"sha256": "195b618f4e1a7e23cffbd73eadeaae9ff100e2e508864b51414e946898a36962"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "610748c0b1eacb5c7383e384a0a9f86f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 968102,
"upload_time": "2025-07-12T20:08:49",
"upload_time_iso_8601": "2025-07-12T20:08:49.374275Z",
"url": "https://files.pythonhosted.org/packages/9e/8b/373894a29ee3a6601b61dd3f30a8d1d73d8e83752d5c85065fe6ff0b2053/shlesha-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f256e69eb77c6caf5f94d6854e0eb68b52e9eeef34f97babf78572b107686cc8",
"md5": "64a46e7a6261b2bd4cec1a8adea84ed6",
"sha256": "80006e3ddf2cd8f60178d2af6b8127d046d9c5b483f8d0db3460ce0429503c85"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "64a46e7a6261b2bd4cec1a8adea84ed6",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 790714,
"upload_time": "2025-07-12T20:08:50",
"upload_time_iso_8601": "2025-07-12T20:08:50.981067Z",
"url": "https://files.pythonhosted.org/packages/f2/56/e69eb77c6caf5f94d6854e0eb68b52e9eeef34f97babf78572b107686cc8/shlesha-0.2.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "90ad25ee87ddf2ba5155047840fdb944ba9185e9bea82734795b08df07f45ef2",
"md5": "01e43514349753e9043bdb8de5fb06b3",
"sha256": "c3d53d1c332fbe8993f371016afc4066499675aecb1229187875196f390eff0b"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "01e43514349753e9043bdb8de5fb06b3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 838375,
"upload_time": "2025-07-12T20:08:52",
"upload_time_iso_8601": "2025-07-12T20:08:52.658075Z",
"url": "https://files.pythonhosted.org/packages/90/ad/25ee87ddf2ba5155047840fdb944ba9185e9bea82734795b08df07f45ef2/shlesha-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa2f0ff9397cf6fe9fe5ff2270a54857106d9d4a0d91d65c033b83684f6b3e11",
"md5": "5e748aa346aa3c24d55d36c8cb346359",
"sha256": "865ac6e150ef83dfeb795a644dbcc5c8cb460b40d092ee1af441f2cfeafb01c1"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5e748aa346aa3c24d55d36c8cb346359",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 965348,
"upload_time": "2025-07-12T20:08:54",
"upload_time_iso_8601": "2025-07-12T20:08:54.368103Z",
"url": "https://files.pythonhosted.org/packages/fa/2f/0ff9397cf6fe9fe5ff2270a54857106d9d4a0d91d65c033b83684f6b3e11/shlesha-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9b8987c6d51e711ce7c5fe80b570847f160b66b947ce1e26c3894ed8e5e498b7",
"md5": "c69c3e8c455f427bc3a1096878ca2bef",
"sha256": "46cad5b9410b05816845546b8a201d249582cb8d48b66a9ae84a29a1d7ad3d0e"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "c69c3e8c455f427bc3a1096878ca2bef",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 787897,
"upload_time": "2025-07-12T20:08:56",
"upload_time_iso_8601": "2025-07-12T20:08:56.090428Z",
"url": "https://files.pythonhosted.org/packages/9b/89/87c6d51e711ce7c5fe80b570847f160b66b947ce1e26c3894ed8e5e498b7/shlesha-0.2.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e7ac877f6913ded8f6a8dd019347bd3b865a3c4407473e9cfa3effaf42706dcf",
"md5": "39897f0fce0dcab9c7af4621baef2945",
"sha256": "4c8781e56b5401823e9f9b8d251367e0c5655b73b0002f8ebc7172ffe8e2f6c0"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "39897f0fce0dcab9c7af4621baef2945",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 834358,
"upload_time": "2025-07-12T20:08:57",
"upload_time_iso_8601": "2025-07-12T20:08:57.495744Z",
"url": "https://files.pythonhosted.org/packages/e7/ac/877f6913ded8f6a8dd019347bd3b865a3c4407473e9cfa3effaf42706dcf/shlesha-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d2e26fea6af386cbecad97e3afb4b11ace009ca6888da04fc6df2d6ba81db917",
"md5": "20476db7b484d154a18963daabb4c473",
"sha256": "6c9119b417b0120bf55d13b375c9614c27333e44ddb1a2b753bba775dbaa9c3a"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "20476db7b484d154a18963daabb4c473",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 965294,
"upload_time": "2025-07-12T20:08:59",
"upload_time_iso_8601": "2025-07-12T20:08:59.150576Z",
"url": "https://files.pythonhosted.org/packages/d2/e2/6fea6af386cbecad97e3afb4b11ace009ca6888da04fc6df2d6ba81db917/shlesha-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3e528421761778e984beb4231f5041c8909f7604891da28d800bf3863b3ba349",
"md5": "0c05c7e72bdfa23ca3409144e2741633",
"sha256": "e21997db2dff9da90fd1ddcc25c5f4575e7a69fc9167358551b29c6c02f3e78a"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "0c05c7e72bdfa23ca3409144e2741633",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 787160,
"upload_time": "2025-07-12T20:09:00",
"upload_time_iso_8601": "2025-07-12T20:09:00.903261Z",
"url": "https://files.pythonhosted.org/packages/3e/52/8421761778e984beb4231f5041c8909f7604891da28d800bf3863b3ba349/shlesha-0.2.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d540b8a44d08853316b5ac475b95f55f4e732044703e9848307bc969ecf3d210",
"md5": "34f47cc88741512e1a59b477efab0169",
"sha256": "d997584cd0bf076beae48747a1bc7726d53c4d63a3f52889ec7f81190f733631"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "34f47cc88741512e1a59b477efab0169",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 835010,
"upload_time": "2025-07-12T20:09:02",
"upload_time_iso_8601": "2025-07-12T20:09:02.292887Z",
"url": "https://files.pythonhosted.org/packages/d5/40/b8a44d08853316b5ac475b95f55f4e732044703e9848307bc969ecf3d210/shlesha-0.2.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "059bce577c13dfbe7c35fac2c635e5f7e5b6c2ec2c6e089c1efed1b993ba0bd9",
"md5": "9d6dd6ca50537275ca2a7ef3e950c587",
"sha256": "90720bed8ef23227eca03ce626300bd11c3d8cf5de4d1dc7de9def6ffdfb6575"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9d6dd6ca50537275ca2a7ef3e950c587",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 965269,
"upload_time": "2025-07-12T20:09:03",
"upload_time_iso_8601": "2025-07-12T20:09:03.979295Z",
"url": "https://files.pythonhosted.org/packages/05/9b/ce577c13dfbe7c35fac2c635e5f7e5b6c2ec2c6e089c1efed1b993ba0bd9/shlesha-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "936c1b336c18c7eebe8fd521f227c5051a7fe112791be02a630aaea22b316d46",
"md5": "0e256df2d0e5350f58c4372b315de86c",
"sha256": "ad0907a855635a23f1e3a3b3fab8bd5c112ad6042428cb3620e2dbf725db9c9f"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "0e256df2d0e5350f58c4372b315de86c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 786538,
"upload_time": "2025-07-12T20:09:05",
"upload_time_iso_8601": "2025-07-12T20:09:05.621151Z",
"url": "https://files.pythonhosted.org/packages/93/6c/1b336c18c7eebe8fd521f227c5051a7fe112791be02a630aaea22b316d46/shlesha-0.2.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb75459730c03c9e710ca47bd7595b88dbef15314b05b46f87e4d7ffacc3de7e",
"md5": "ded2af43a4c49d5ee56bd1d23719ad29",
"sha256": "13db2df55986d85d0ffa7f8c4534cc7d610ad4cf218c19146e7cc8c3390e40a0"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "ded2af43a4c49d5ee56bd1d23719ad29",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 842652,
"upload_time": "2025-07-12T20:09:06",
"upload_time_iso_8601": "2025-07-12T20:09:06.922443Z",
"url": "https://files.pythonhosted.org/packages/eb/75/459730c03c9e710ca47bd7595b88dbef15314b05b46f87e4d7ffacc3de7e/shlesha-0.2.0-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d4877cfb2862d2d85fef2c4bd97830b418d9e6cf38d4fc0160677f6de1eea373",
"md5": "079b4e84e448cf40b44e5550bd417a06",
"sha256": "4b00557a1d84c58ed4c3c7d30ed3f5301486af798ab06dddd49ec107cbdbd262"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "079b4e84e448cf40b44e5550bd417a06",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 972013,
"upload_time": "2025-07-12T20:09:08",
"upload_time_iso_8601": "2025-07-12T20:09:08.565442Z",
"url": "https://files.pythonhosted.org/packages/d4/87/7cfb2862d2d85fef2c4bd97830b418d9e6cf38d4fc0160677f6de1eea373/shlesha-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5ae1adcf00ea33e4fcab9ba23fbf88891091a7dbf3bad6ffb677922c31c341f2",
"md5": "2f747b2b5f84e3ec56e24abf5fdb63e3",
"sha256": "56dee9b064f0ec426dfdf21b7bbe2eccce347127252055aa02d50d16bc756df1"
},
"downloads": -1,
"filename": "shlesha-0.2.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "2f747b2b5f84e3ec56e24abf5fdb63e3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 793905,
"upload_time": "2025-07-12T20:09:09",
"upload_time_iso_8601": "2025-07-12T20:09:09.842680Z",
"url": "https://files.pythonhosted.org/packages/5a/e1/adcf00ea33e4fcab9ba23fbf88891091a7dbf3bad6ffb677922c31c341f2/shlesha-0.2.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bc9d003004ea9d2206886387b283fa5d3818763916d7ae8f828345f961998556",
"md5": "068d7fd832e7ab7eb482f0d5dabfea6e",
"sha256": "5d010ab09dadae09072963aeb8d77e077922956a152e17cf4e207919c5049dcc"
},
"downloads": -1,
"filename": "shlesha-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "068d7fd832e7ab7eb482f0d5dabfea6e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 623767,
"upload_time": "2025-07-12T20:09:11",
"upload_time_iso_8601": "2025-07-12T20:09:11.507955Z",
"url": "https://files.pythonhosted.org/packages/bc/9d/003004ea9d2206886387b283fa5d3818763916d7ae8f828345f961998556/shlesha-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-12 20:09:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "udapaana",
"github_project": "shlesha",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "shlesha"
}