shlesha


Nameshlesha JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryHigh-performance extensible transliteration library for Sanskrit and Indic scripts
upload_time2025-07-12 20:09:11
maintainerNone
docs_urlNone
authorShlesha Contributors
requires_python>=3.9
licenseMIT OR Apache-2.0
keywords transliteration sanskrit indic devanagari unicode
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.42644s