# Shlesha - Schema-Driven Transliteration Library
A transliteration library for Sanskrit and Indic scripts using schema-driven architecture. Built with compile-time optimization and runtime schema loading.
## Quick Start
Setup 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/guides/DEVELOPER_SETUP.md).
**Documentation**: See [DOCUMENTATION_INDEX.md](docs/DOCUMENTATION_INDEX.md) for guides and references.
---
## Architecture Features
- Schema-generated converters with compile-time optimization
- Zero runtime overhead from code generation
- Token-based conversion system for memory efficiency
## Schema-Based Architecture
### Compile-Time Code Generation
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
### 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
### Routing
The system determines the 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
### 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
- **Sharada** (`sharada`, `shrd`) - Historical script of Kashmir, crucial for Vedic manuscripts
- **Tibetan** (`tibetan`, `tibt`, `bo`) - Important for Buddhist Vedic transmission
- **Thai** (`thai`, `th`) - Adapted from Grantha for Buddhist Vedic texts
### 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
- **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
Shlesha supports runtime schema loading across all APIs 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
### Performance Analysis
Shlesha uses a hub-and-spoke architecture with schema-generated converters, trading some performance for extensibility compared to direct conversion approaches.
### Performance Characteristics
- Competitive with other transliteration libraries
- Schema-generated converters match hand-coded performance
- Optimized for both short and long text processing
### Architecture Trade-offs
| Aspect | Shlesha | Vidyut |
|--------|---------|---------|
| **Performance** | Hub-based | Direct conversion |
| **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 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
### Test Suite
- 127 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
### 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
- [**Architecture Guide**](docs/architecture/ARCHITECTURE.md) - Deep dive into hub-and-spoke design
- [**Schema Reference**](docs/reference/SCHEMA_REFERENCE.md) - Complete schema format documentation
- [**Performance Guide**](docs/architecture/PERFORMANCE.md) - Optimization techniques and benchmarks
- [**API Reference**](docs/reference/API_REFERENCE.md) - Complete function and type reference
- [**Developer Setup**](docs/guides/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**](docs/guides/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 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
Contributions are welcome. The schema-driven architecture simplifies adding new scripts:
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)
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": "udapaana",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/ff/cc/6920209eed8bddcb4a585ce8d9be2b759fd21c552486d8d32f243d02705b/shlesha-0.5.0.tar.gz",
"platform": null,
"description": "# Shlesha - Schema-Driven Transliteration Library\n\nA transliteration library for Sanskrit and Indic scripts using schema-driven architecture. Built with compile-time optimization and runtime schema loading.\n\n## Quick Start\n\nSetup 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/guides/DEVELOPER_SETUP.md).\n\n**Documentation**: See [DOCUMENTATION_INDEX.md](docs/DOCUMENTATION_INDEX.md) for guides and references.\n\n---\n\n## Architecture Features\n\n- Schema-generated converters with compile-time optimization\n- Zero runtime overhead from code generation\n- Token-based conversion system for memory efficiency\n\n## Schema-Based Architecture\n\n### Compile-Time Code Generation\n\nConverters 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## Hub-and-Spoke Architecture\n\n### 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### Routing\n\nThe system determines the 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## Supported Scripts\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- **Sharada** (`sharada`, `shrd`) - Historical script of Kashmir, crucial for Vedic manuscripts\n- **Tibetan** (`tibetan`, `tibt`, `bo`) - Important for Buddhist Vedic transmission\n- **Thai** (`thai`, `th`) - Adapted from Grantha for Buddhist Vedic texts\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\n- **IAST** (`iast`) - International Alphabet of Sanskrit Transliteration\n- **Kolkata** (`kolkata`) - Regional romanization scheme\n- **Grantha** (`grantha`) - Classical Sanskrit script\n\n## 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## Runtime Schema Loading\n\nShlesha supports runtime schema loading across all APIs 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## Performance & Benchmarks\n\n### Performance Analysis\n\nShlesha uses a hub-and-spoke architecture with schema-generated converters, trading some performance for extensibility compared to direct conversion approaches.\n\n### Performance Characteristics\n\n- Competitive with other transliteration libraries\n- Schema-generated converters match hand-coded performance\n- Optimized for both short and long text processing\n\n### Architecture Trade-offs\n\n| Aspect | Shlesha | Vidyut |\n|--------|---------|---------|\n| **Performance** | Hub-based | Direct conversion |\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## Schema-Driven Development\n\n### Adding New Scripts\n\nAdding support for new scripts 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## Quality Assurance\n\n### Test Suite\n\n- 127 tests covering all functionality\n- Schema-generated converter tests for all 14 generated converters \n- Performance regression tests ensuring schema = hand-coded speed\n- Cross-script conversion matrix testing all 210+ pairs\n- Unknown character handling\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## 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## 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## Documentation\n\n- [**Architecture Guide**](docs/architecture/ARCHITECTURE.md) - Deep dive into hub-and-spoke design\n- [**Schema Reference**](docs/reference/SCHEMA_REFERENCE.md) - Complete schema format documentation \n- [**Performance Guide**](docs/architecture/PERFORMANCE.md) - Optimization techniques and benchmarks\n- [**API Reference**](docs/reference/API_REFERENCE.md) - Complete function and type reference\n- [**Developer Setup**](docs/guides/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**](docs/guides/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## Releases\n\nShlesha uses an automated release system for publishing to 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## Contributing\n\nContributions are welcome. The schema-driven architecture simplifies adding new scripts:\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## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 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",
"bugtrack_url": null,
"license": "MIT OR Apache-2.0",
"summary": "High-performance extensible transliteration library for Sanskrit and Indic scripts",
"version": "0.5.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": "baba3147f1979b57db91c734d648593c552301367733f6cfb9e86463477f0f36",
"md5": "257daa07b931f50cf24f55a24bbddec5",
"sha256": "feee3c93249cfa65749ea10e2c784288f337616b0626de6e19432e4f1f5ad283"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "257daa07b931f50cf24f55a24bbddec5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 877380,
"upload_time": "2025-07-24T03:09:15",
"upload_time_iso_8601": "2025-07-24T03:09:15.407318Z",
"url": "https://files.pythonhosted.org/packages/ba/ba/3147f1979b57db91c734d648593c552301367733f6cfb9e86463477f0f36/shlesha-0.5.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7975b9477101fa8a915cbdef29ea843e502a95f15e3b5d571fd355f5b12b5cd9",
"md5": "9174243e5b489bfd983b2f1096f99d9f",
"sha256": "d509c81c9ce50d665e992c18f7b43337732ee33f27a12f7a8e99f5f6f2ceaa31"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9174243e5b489bfd983b2f1096f99d9f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 1009099,
"upload_time": "2025-07-24T03:09:17",
"upload_time_iso_8601": "2025-07-24T03:09:17.422350Z",
"url": "https://files.pythonhosted.org/packages/79/75/b9477101fa8a915cbdef29ea843e502a95f15e3b5d571fd355f5b12b5cd9/shlesha-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4e7a163a2693b43296048df2f3605dd92e19a2513febf40fcebc2be5183d0ae9",
"md5": "c24018db199dc8acf587819d6bf285fe",
"sha256": "b7b54047c69360870963e742459d08e7f2f9c407b6a36709f450bfec0eec271a"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c24018db199dc8acf587819d6bf285fe",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 832353,
"upload_time": "2025-07-24T03:09:18",
"upload_time_iso_8601": "2025-07-24T03:09:18.811308Z",
"url": "https://files.pythonhosted.org/packages/4e/7a/163a2693b43296048df2f3605dd92e19a2513febf40fcebc2be5183d0ae9/shlesha-0.5.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f4b0e7786588a843e4252768b3d98d2411bc566b58ddb1e2608710d964ffd2e7",
"md5": "677b3e3c903313066e9e4ffc5268a694",
"sha256": "b4b0096bee2176b2d7bf5273ce1455775891b0f7426ddbe0cf853248eee08a64"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "677b3e3c903313066e9e4ffc5268a694",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 874373,
"upload_time": "2025-07-24T03:09:20",
"upload_time_iso_8601": "2025-07-24T03:09:20.525187Z",
"url": "https://files.pythonhosted.org/packages/f4/b0/e7786588a843e4252768b3d98d2411bc566b58ddb1e2608710d964ffd2e7/shlesha-0.5.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "70a066d4ccb5f74a11a29abc46565206eeb3b73eb2cc6a0a8c63e0e39ea65c7b",
"md5": "c82194dd8e6a5e64bd8f63f88aff6e18",
"sha256": "2dd516ab19b8389868608c2e7f07b2d138a1e2aae2bd30aa2af1818a8d00fcac"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c82194dd8e6a5e64bd8f63f88aff6e18",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1005995,
"upload_time": "2025-07-24T03:09:22",
"upload_time_iso_8601": "2025-07-24T03:09:22.237178Z",
"url": "https://files.pythonhosted.org/packages/70/a0/66d4ccb5f74a11a29abc46565206eeb3b73eb2cc6a0a8c63e0e39ea65c7b/shlesha-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fb0a34bed53240306d08ce2eafea77322de49ef9402e7de0e0bd731a3280fba6",
"md5": "15225edc2ec5ebe08597478c5941b0a5",
"sha256": "97f3cc442faa54d568f812acceee7efff291286c105fc3003f722adac5817f73"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "15225edc2ec5ebe08597478c5941b0a5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 829918,
"upload_time": "2025-07-24T03:09:23",
"upload_time_iso_8601": "2025-07-24T03:09:23.886802Z",
"url": "https://files.pythonhosted.org/packages/fb/0a/34bed53240306d08ce2eafea77322de49ef9402e7de0e0bd731a3280fba6/shlesha-0.5.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "196957a2ff2fa9a88d09a7df29efa824e5373aa0553ce2b923a9d7ff9b2c235d",
"md5": "76a435d4af6e7b4873d23f6da111d3fd",
"sha256": "225b4920e3a8c99380c39611bfca77a39a0cd13fb976e357ea2fe7b9e3d94875"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "76a435d4af6e7b4873d23f6da111d3fd",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 871688,
"upload_time": "2025-07-24T03:09:25",
"upload_time_iso_8601": "2025-07-24T03:09:25.495707Z",
"url": "https://files.pythonhosted.org/packages/19/69/57a2ff2fa9a88d09a7df29efa824e5373aa0553ce2b923a9d7ff9b2c235d/shlesha-0.5.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5da921920dad74640e9b8c9aa9ac6912b35ce822115dc686f0478e17b920524b",
"md5": "1bc797e320203345d00c90fd62ed8624",
"sha256": "802cc7103f3baeaf09a5a9f3fea8a191d807a8b3d8aa929c3c474e2154009cc0"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1bc797e320203345d00c90fd62ed8624",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1005003,
"upload_time": "2025-07-24T03:09:27",
"upload_time_iso_8601": "2025-07-24T03:09:27.228356Z",
"url": "https://files.pythonhosted.org/packages/5d/a9/21920dad74640e9b8c9aa9ac6912b35ce822115dc686f0478e17b920524b/shlesha-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "29b087c2c32141deda7ef4b424935b8ac507ed0a3bba943a3217efa27630501a",
"md5": "cc098faef8676d4643c3ae1eb8f217f0",
"sha256": "1f0fdb99215a2cc218fa67afeaf4f31684ed14d63795355eb73a523270ae7385"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "cc098faef8676d4643c3ae1eb8f217f0",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 829170,
"upload_time": "2025-07-24T03:09:28",
"upload_time_iso_8601": "2025-07-24T03:09:28.548354Z",
"url": "https://files.pythonhosted.org/packages/29/b0/87c2c32141deda7ef4b424935b8ac507ed0a3bba943a3217efa27630501a/shlesha-0.5.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "671f13bfe9723c038bd2c2e7865de3f50b757e45c179570d1254a34a67746e2f",
"md5": "3a4357ead7794d79946ed55406957539",
"sha256": "3ce96126b48c47161b764169732376c5aa6769fcf8ad91b3a8684407467fc13a"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3a4357ead7794d79946ed55406957539",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 872161,
"upload_time": "2025-07-24T03:09:30",
"upload_time_iso_8601": "2025-07-24T03:09:30.255246Z",
"url": "https://files.pythonhosted.org/packages/67/1f/13bfe9723c038bd2c2e7865de3f50b757e45c179570d1254a34a67746e2f/shlesha-0.5.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b4895726da2247bc7c82349269c45fdf3146a2b5226e9f4fc30ba6df18c41308",
"md5": "a363fb5c477087d5c47aa91f3f1d9010",
"sha256": "caa0ed09dff8d77ce2c6074e1ef7639118711f1d64d69cb6675af1101a27dcda"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a363fb5c477087d5c47aa91f3f1d9010",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 1005230,
"upload_time": "2025-07-24T03:09:32",
"upload_time_iso_8601": "2025-07-24T03:09:32.052138Z",
"url": "https://files.pythonhosted.org/packages/b4/89/5726da2247bc7c82349269c45fdf3146a2b5226e9f4fc30ba6df18c41308/shlesha-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c482e2408dd9ef719c55060a2356026ca87b77f8e019da78046306b4b87f57a3",
"md5": "e82364438b39ca8d50699fcb4a2e5ffc",
"sha256": "147438c771aa77cd537d7d580f910cb53f6aaf2f47e7688ad03e15bf37f462cc"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "e82364438b39ca8d50699fcb4a2e5ffc",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 828489,
"upload_time": "2025-07-24T03:09:33",
"upload_time_iso_8601": "2025-07-24T03:09:33.689956Z",
"url": "https://files.pythonhosted.org/packages/c4/82/e2408dd9ef719c55060a2356026ca87b77f8e019da78046306b4b87f57a3/shlesha-0.5.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8646a91f24c353a45fb7e0845ee54d0d04e224d75c3cc5f04d8bf6df89b61138",
"md5": "b501a150bf5f138c084e29fbb57992c0",
"sha256": "e6dcb899ea85147527094666daf422c244a94648d6d99dc8875e480a6c6a04e3"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b501a150bf5f138c084e29fbb57992c0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 880738,
"upload_time": "2025-07-24T03:09:34",
"upload_time_iso_8601": "2025-07-24T03:09:34.986692Z",
"url": "https://files.pythonhosted.org/packages/86/46/a91f24c353a45fb7e0845ee54d0d04e224d75c3cc5f04d8bf6df89b61138/shlesha-0.5.0-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2709100e4f1ba5b33d073608057eec0faed2e41e518ce6638f26e791d6245308",
"md5": "1029ab359b549350683918063d4445da",
"sha256": "7d0a081eca2f255a719a8cbbc32d8a576ed74e9123d08c072909c6461586e208"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1029ab359b549350683918063d4445da",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 1011372,
"upload_time": "2025-07-24T03:09:36",
"upload_time_iso_8601": "2025-07-24T03:09:36.327782Z",
"url": "https://files.pythonhosted.org/packages/27/09/100e4f1ba5b33d073608057eec0faed2e41e518ce6638f26e791d6245308/shlesha-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "23c73b8ed37e1310010d6b8c255763c7689184cd68bb4887fb9d7d61eb0017aa",
"md5": "b14dbe9a5b83e40dc27f5e77608f8b73",
"sha256": "85a5a17a79f3bed8c7c355bc02e8bc4b59926e63541248b3ad16de2d959196b9"
},
"downloads": -1,
"filename": "shlesha-0.5.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "b14dbe9a5b83e40dc27f5e77608f8b73",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 835650,
"upload_time": "2025-07-24T03:09:37",
"upload_time_iso_8601": "2025-07-24T03:09:37.589658Z",
"url": "https://files.pythonhosted.org/packages/23/c7/3b8ed37e1310010d6b8c255763c7689184cd68bb4887fb9d7d61eb0017aa/shlesha-0.5.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ffcc6920209eed8bddcb4a585ce8d9be2b759fd21c552486d8d32f243d02705b",
"md5": "455ecc16f6381c0ffa46d67fe848c7a5",
"sha256": "c5cbd27a98d3d9c6da25b6e6d38f3c049f2afdb9c5fbefeff548ca70bdfb8a19"
},
"downloads": -1,
"filename": "shlesha-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "455ecc16f6381c0ffa46d67fe848c7a5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 302848,
"upload_time": "2025-07-24T03:09:38",
"upload_time_iso_8601": "2025-07-24T03:09:38.823373Z",
"url": "https://files.pythonhosted.org/packages/ff/cc/6920209eed8bddcb4a585ce8d9be2b759fd21c552486d8d32f243d02705b/shlesha-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-24 03:09:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "udapaana",
"github_project": "shlesha",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "shlesha"
}