Metadata-Version: 2.4
Name: dhaturupa
Version: 0.1.1
Summary: A Python package for Sanskrit verb conjugation (dhāturūpa) - generates conjugation tables for Sanskrit verb roots across all tenses and moods
Author: dhaturupa contributors
License-Expression: MIT
Project-URL: Homepage, https://github.com/user/dhaturupa
Project-URL: Issues, https://github.com/user/dhaturupa/issues
Keywords: sanskrit,verb-conjugation,dhaturupa,linguistics,nlp,panini
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Education
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# dhaturupa

Sanskrit verb conjugation. Give it a root, get back the full paradigm.

```bash
pip install dhaturupa
```

## Quick start

```python
from dhaturupa import conjugate

result = conjugate('bhū')
print(result['forms']['prathama']['ekavacana'])  # bhavati
print(result['forms']['uttama']['ekavacana'])     # bhavāmi

result = conjugate('bhū', lakara='loṭ')           # imperative
result = conjugate('bhū', pada='ātmanepada')       # override voice
```

`conjugate()` returns the 3×3 grid (puruṣa × vacana). `get_all_lakaras()` does it for all 10 tenses at once.

## Search and lookup

```python
from dhaturupa import get_dhatu_info, search_dhatus, list_dhatus

get_dhatu_info('gam')
# {'dhatu': 'gam', 'gana': 1, 'gana_name': 'bhvādi',
#  'pada': 'parasmaipada', 'meaning': 'to go'}

search_dhatus('to know')
# [{'dhatu': 'budh', ...}, {'dhatu': 'vid', ...}, {'dhatu': 'jñā', ...}]

list_dhatus(gana=4)  # all divādi roots
```

## Transliteration

```python
from dhaturupa.transliteration import iast_to_devanagari, devanagari_to_iast

iast_to_devanagari('bhavati')  # भवति
devanagari_to_iast('भवति')     # bhavati
```

## CLI

```bash
dhaturupa conjugate bhū
# ============================================================
#   धातु (Dhātu): bhū
#   Stem: bhava
# ============================================================
#   Prathama (3rd)    bhavati    bhavataḥ    bhavanti
#   Madhyama (2nd)    bhavasi    bhavathaḥ   bhavatha
#   Uttama (1st)      bhavāmi    bhavāvaḥ    bhavāmaḥ

dhaturupa conjugate bhū --lakara loṭ
dhaturupa conjugate bhū --all-lakaras
dhaturupa conjugate bhū --json

dhaturupa info gam
dhaturupa search "to know"
dhaturupa list --gana 1
```

## What's inside

85+ roots across all 10 gaṇas. Stems are generated with guṇa/vṛddhi gradation and vikaraṇa suffixes, with pre-computed overrides for irregulars like √gam → gaccha, √kṛ → karo, √jñā → jānā.

10 lakāras:

- laṭ (present), loṭ (imperative), laṅ (imperfect), vidhiliṅ (optative)
- lṛṭ (future), lṛṅ (conditional)
- liṭ (perfect), luṭ (periphrastic future), luṅ (aorist), āśīrliṅ (benedictive)

Both parasmaipada and ātmanepada endings. Zero dependencies.

## Formatter

```python
from dhaturupa import conjugate
from dhaturupa.formatter import format_table

table = format_table(conjugate('bhū'))
print(table)

table_deva = format_table(conjugate('bhū'), script='devanagari')
print(table_deva)  # भवति, भवतः, भवन्ति...
```
## JSON API

```python
from dhaturupa import conjugate_json, get_dhatu_info_json, search_dhatus_json

conjugate_json('bhū')
# '{"dhatu":"bhū","gana":1,"forms":{"prathama":{"ekavacana":"bhavati",...},...}}'

conjugate_json('bhū', pretty=True)
# pretty-printed with indentation

get_dhatu_info_json('gam')
# '{"dhatu":"gam","gana":1,"gana_name":"bhvādi","pada":"parasmaipada","meaning":"to go"}'

search_dhatus_json('to know')
# '[{"dhatu":"budh",...},{"dhatu":"vid",...},{"dhatu":"jñā",...}]'
```

Every public method has a `_json` twin: `conjugate_json()`, `get_all_lakaras_json()`, `get_dhatu_info_json()`, `list_dhatus_json()`, `search_dhatus_json()`. All take `pretty=True` for indented output. Unicode is preserved, not escaped.

## License

MIT
