shlesha


Nameshlesha JSON
Version 0.5.0 PyPI version JSON
download
home_pageNone
SummaryHigh-performance extensible transliteration library for Sanskrit and Indic scripts
upload_time2025-07-24 03:09:38
maintainerNone
docs_urlNone
authorudapaana
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 - 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"
}
        
Elapsed time: 0.79605s