diff --git a/.editorconfig b/.editorconfig index d4a2c44..eb8bd95 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,21 +1,21 @@ -# http://editorconfig.org - -root = true - -[*] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true -insert_final_newline = true -charset = utf-8 -end_of_line = lf - -[*.bat] -indent_style = tab -end_of_line = crlf - -[LICENSE] -insert_final_newline = false - -[Makefile] -indent_style = tab +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 +end_of_line = lf + +[*.bat] +indent_style = tab +end_of_line = crlf + +[LICENSE] +insert_final_newline = false + +[Makefile] +indent_style = tab diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 9564ba8..1953fb2 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,15 +1,15 @@ -* prakriya version: -* Python version: -* Operating System: - -### Description - -Describe what you were trying to get done. -Tell us what happened, what went wrong, and what you expected to happen. - -### What I Did - -``` -Paste the command(s) you ran and the output. -If there was a crash, please include the traceback here. -``` +* prakriya version: +* Python version: +* Operating System: + +### Description + +Describe what you were trying to get done. +Tell us what happened, what went wrong, and what you expected to happen. + +### What I Did + +``` +Paste the command(s) you ran and the output. +If there was a crash, please include the traceback here. +``` diff --git a/.gitignore b/.gitignore index 11ce3d1..7fa8e6b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,78 +1,78 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# pyenv python configuration file -.python-version - -# Data files -prakriya/data/json/* -prakriya/data/jsonsorted/* -prakriya/data/composite_v003.tar.gz - -# Inhouse usage scripts -scrap/* - -# Intermediary scripts -prakriya/jsonind.py -tests/speedtest.py -prakriya/data/generated* -prakriya/tests/useless.py -tests/useless.py -prakriya/data/dcs.json +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv python configuration file +.python-version + +# Data files +prakriya/data/json/* +prakriya/data/jsonsorted/* +prakriya/data/composite_v003.tar.gz + +# Inhouse usage scripts +scrap/* + +# Intermediary scripts +prakriya/jsonind.py +tests/speedtest.py +prakriya/data/generated* +prakriya/tests/useless.py +tests/useless.py +prakriya/data/dcs.json diff --git a/.pyup.yml b/.pyup.yml deleted file mode 100644 index 30182e6..0000000 --- a/.pyup.yml +++ /dev/null @@ -1,4 +0,0 @@ -# autogenerated pyup.io config file -# see https://pyup.io/docs/configuration/ for all available options - -schedule: every month diff --git a/.travis.yml b/.travis.yml index 3950da9..c32d07d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,38 +1,38 @@ -# Config file for automatic testing at travis-ci.org -# This file will be regenerated if you run travis_pypi_setup.py - -language: python -python: - - 3.6 - - 3.5 - - 3.4 - - 2.7 - - "pypy" - -# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors -install: - - pip install -U tox-travis - - pip install -r requirements_docs.txt - -# command to run tests, e.g. python setup.py test -script: - - coverage run --source . --omit=setup.py,travis_pypi_setup.py,docs/conf.py -m py.test - - tox - -after_success: - - coverage report --omit '*site-package*' - - cat .coverage - - coveralls - -# After you create the Github repo and add it to Travis, run the -# travis_pypi_setup.py script to finish PyPI deployment setup -deploy: - provider: pypi - distributions: sdist bdist_wheel - user: drdhaval2785 - password: - secure: PLEASE_REPLACE_ME - on: - tags: true - repo: drdhaval2785/python-prakriya - python: 2.7 +# Config file for automatic testing at travis-ci.org +# This file will be regenerated if you run travis_pypi_setup.py + +language: python +python: + - 3.6 + - 3.5 + - 3.4 + - 2.7 + - "pypy" + +# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors +install: + - pip install -U tox-travis + - pip install -r requirements_docs.txt + +# command to run tests, e.g. python setup.py test +script: + - coverage run --source . --omit=setup.py,travis_pypi_setup.py,docs/conf.py -m py.test + - tox + +after_success: + - coverage report --omit '*site-package*' + - cat .coverage + - coveralls + +# After you create the Github repo and add it to Travis, run the +# travis_pypi_setup.py script to finish PyPI deployment setup +deploy: + provider: pypi + distributions: sdist bdist_wheel + user: drdhaval2785 + password: + secure: PLEASE_REPLACE_ME + on: + tags: true + repo: drdhaval2785/python-prakriya + python: 2.7 diff --git a/AUTHORS.rst b/AUTHORS.rst index 38c204f..75e4e75 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -1,13 +1,13 @@ -======= -Credits -======= - -Development Lead ----------------- - -* Dr. Dhaval Patel - -Contributors ------------- - -None yet. Why not be the first? +======= +Credits +======= + +Development Lead +---------------- + +* Dr. Dhaval Patel + +Contributors +------------ + +None yet. Why not be the first? diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index b6eef73..30b60ad 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -1,113 +1,113 @@ -.. highlight:: shell - -============ -Contributing -============ - -Contributions are welcome, and they are greatly appreciated! Every -little bit helps, and credit will always be given. - -You can contribute in many ways: - -Types of Contributions ----------------------- - -Report Bugs -~~~~~~~~~~~ - -Report bugs at https://github.com/drdhaval2785/python-prakriya/issues. - -If you are reporting a bug, please include: - -* Your operating system name and version. -* Any details about your local setup that might be helpful in troubleshooting. -* Detailed steps to reproduce the bug. - -Fix Bugs -~~~~~~~~ - -Look through the GitHub issues for bugs. Anything tagged with "bug" -and "help wanted" is open to whoever wants to implement it. - -Implement Features -~~~~~~~~~~~~~~~~~~ - -Look through the GitHub issues for features. Anything tagged with "enhancement" -and "help wanted" is open to whoever wants to implement it. - -Write Documentation -~~~~~~~~~~~~~~~~~~~ - -prakriya could always use more documentation, whether as part of the -official prakriya docs, in docstrings, or even on the web in blog posts, -articles, and such. - -Submit Feedback -~~~~~~~~~~~~~~~ - -The best way to send feedback is to file an issue at https://github.com/drdhaval2785/python-prakriya/issues. - -If you are proposing a feature: - -* Explain in detail how it would work. -* Keep the scope as narrow as possible, to make it easier to implement. -* Remember that this is a volunteer-driven project, and that contributions - are welcome :) - -Get Started! ------------- - -Ready to contribute? Here's how to set up `prakriya` for local development. - -1. Fork the `python-prakriya` repo on GitHub. -2. Clone your fork locally:: - - $ git clone git@github.com:drdhaval2785/python-prakriya.git - -3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: - - $ mkvirtualenv prakriya - $ cd prakriya/ - $ python setup.py develop - -4. Create a branch for local development:: - - $ git checkout -b name-of-your-bugfix-or-feature - - Now you can make your changes locally. - -5. When you're done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:: - - $ flake8 prakriya tests - $ tox - - To get flake8 and tox, just pip install them into your virtualenv. - -6. Commit your changes and push your branch to GitHub:: - - $ git add . - $ git commit -m "Your detailed description of your changes." - $ git push origin name-of-your-bugfix-or-feature - -7. Submit a pull request through the GitHub website. - -Pull Request Guidelines ------------------------ - -Before you submit a pull request, check that it meets these guidelines: - -1. The pull request should include tests. -2. If the pull request adds functionality, the docs should be updated. Put - your new functionality into a function with a docstring, and add the - feature to the list in README.rst. -3. The pull request should work for Python 2.7, 3.3, 3.4, 3.5, 3.6 and for PyPy. Check - https://travis-ci.org/drdhaval2785/python-prakriya/pull_requests - and make sure that the tests pass for all supported Python versions. - -Tips ----- - -To run a subset of tests:: - - - $ python -m unittest tests.test_prakriya +.. highlight:: shell + +============ +Contributing +============ + +Contributions are welcome, and they are greatly appreciated! Every +little bit helps, and credit will always be given. + +You can contribute in many ways: + +Types of Contributions +---------------------- + +Report Bugs +~~~~~~~~~~~ + +Report bugs at https://github.com/drdhaval2785/python-prakriya/issues. + +If you are reporting a bug, please include: + +* Your operating system name and version. +* Any details about your local setup that might be helpful in troubleshooting. +* Detailed steps to reproduce the bug. + +Fix Bugs +~~~~~~~~ + +Look through the GitHub issues for bugs. Anything tagged with "bug" +and "help wanted" is open to whoever wants to implement it. + +Implement Features +~~~~~~~~~~~~~~~~~~ + +Look through the GitHub issues for features. Anything tagged with "enhancement" +and "help wanted" is open to whoever wants to implement it. + +Write Documentation +~~~~~~~~~~~~~~~~~~~ + +prakriya could always use more documentation, whether as part of the +official prakriya docs, in docstrings, or even on the web in blog posts, +articles, and such. + +Submit Feedback +~~~~~~~~~~~~~~~ + +The best way to send feedback is to file an issue at https://github.com/drdhaval2785/python-prakriya/issues. + +If you are proposing a feature: + +* Explain in detail how it would work. +* Keep the scope as narrow as possible, to make it easier to implement. +* Remember that this is a volunteer-driven project, and that contributions + are welcome :) + +Get Started! +------------ + +Ready to contribute? Here's how to set up `prakriya` for local development. + +1. Fork the `python-prakriya` repo on GitHub. +2. Clone your fork locally:: + + $ git clone git@github.com:drdhaval2785/python-prakriya.git + +3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: + + $ mkvirtualenv prakriya + $ cd prakriya/ + $ python setup.py develop + +4. Create a branch for local development:: + + $ git checkout -b name-of-your-bugfix-or-feature + + Now you can make your changes locally. + +5. When you're done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:: + + $ flake8 prakriya tests + $ tox + + To get flake8 and tox, just pip install them into your virtualenv. + +6. Commit your changes and push your branch to GitHub:: + + $ git add . + $ git commit -m "Your detailed description of your changes." + $ git push origin name-of-your-bugfix-or-feature + +7. Submit a pull request through the GitHub website. + +Pull Request Guidelines +----------------------- + +Before you submit a pull request, check that it meets these guidelines: + +1. The pull request should include tests. +2. If the pull request adds functionality, the docs should be updated. Put + your new functionality into a function with a docstring, and add the + feature to the list in README.rst. +3. The pull request should work for Python 2.7, 3.3, 3.4, 3.5, 3.6 and for PyPy. Check + https://travis-ci.org/drdhaval2785/python-prakriya/pull_requests + and make sure that the tests pass for all supported Python versions. + +Tips +---- + +To run a subset of tests:: + + + $ python -m unittest tests.test_prakriya diff --git a/HISTORY.rst b/HISTORY.rst index 64a3ff6..088bfa1 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,62 +1,62 @@ -======= -History -======= - -0.0.1 (2017-12-30) ------------------- - -* First release on PyPI. - -0.0.2 (2018-01-01) ------------------- - -Broken release. Kindly update to v0.0.3 immediately. - -0.0.3 (2018-01-02) ------------------- - -A fix for broken v0.0.2 release. -jsonindex.json file which was crucial and missed in v0.0.2, added back. - -0.0.4 (2018-01-03) ------------------- - -1. Added transliteration support. See #5 . -2. Adding data file in system specific locations like APPDATA. See #6 . -3. Made code python 2.7, 3.3, 3.4, 3.5, 3.6 compliant. -4. Corrected all errors / smells identified by landscape.io. - -0.0.5 (2018-01-13) ------------------- - -1. Added verb form generation facility. See https://github.com/drdhaval2785/prakriya/issues/39. - -0.0.6 (2018-01-16) ------------------- - -1. Added CLI functionality 'generate'. See https://github.com/drdhaval2785/python-prakriya/issues/12. -2. Guess the correct verb e.g. eD -> eDa~. See https://github.com/drdhaval2785/python-prakriya/issues/13. -3. All data files moved to appdata folder. See https://github.com/drdhaval2785/python-prakriya/issues/14. -4. Memoize data read from JSONs for speedup. See https://github.com/drdhaval2785/python-prakriya/issues/15. -5. Removed unnecessary duplicate loading of JSONs. See https://github.com/drdhaval2785/python-prakriya/issues/11. - -0.0.7 (2018-01-21) ------------------- - -1. Changed the output format of Generate class. See https://github.com/drdhaval2785/prakriya/issues/37#issuecomment-359224797. - -0.1.0 (2018-12-17) ------------------- - -1. VerbFormGenerator now uses methods instead of getitem. See https://github.com/drdhaval2785/python-prakriya/issues/36. - -0.2.0 (2019-01-13) ------------------- - -1. Prakriya now uses method instead of getitem. See https://github.com/drdhaval2785/python-prakriya/issues/75. - -0.2.1 (2019-01-14) ------------------- - -1. Documentation of commandline (CLI) tools added in documentation. - +======= +History +======= + +0.0.1 (2017-12-30) +------------------ + +* First release on PyPI. + +0.0.2 (2018-01-01) +------------------ + +Broken release. Kindly update to v0.0.3 immediately. + +0.0.3 (2018-01-02) +------------------ + +A fix for broken v0.0.2 release. +jsonindex.json file which was crucial and missed in v0.0.2, added back. + +0.0.4 (2018-01-03) +------------------ + +1. Added transliteration support. See #5 . +2. Adding data file in system specific locations like APPDATA. See #6 . +3. Made code python 2.7, 3.3, 3.4, 3.5, 3.6 compliant. +4. Corrected all errors / smells identified by landscape.io. + +0.0.5 (2018-01-13) +------------------ + +1. Added verb form generation facility. See https://github.com/drdhaval2785/prakriya/issues/39. + +0.0.6 (2018-01-16) +------------------ + +1. Added CLI functionality 'generate'. See https://github.com/drdhaval2785/python-prakriya/issues/12. +2. Guess the correct verb e.g. eD -> eDa~. See https://github.com/drdhaval2785/python-prakriya/issues/13. +3. All data files moved to appdata folder. See https://github.com/drdhaval2785/python-prakriya/issues/14. +4. Memoize data read from JSONs for speedup. See https://github.com/drdhaval2785/python-prakriya/issues/15. +5. Removed unnecessary duplicate loading of JSONs. See https://github.com/drdhaval2785/python-prakriya/issues/11. + +0.0.7 (2018-01-21) +------------------ + +1. Changed the output format of Generate class. See https://github.com/drdhaval2785/prakriya/issues/37#issuecomment-359224797. + +0.1.0 (2018-12-17) +------------------ + +1. VerbFormGenerator now uses methods instead of getitem. See https://github.com/drdhaval2785/python-prakriya/issues/36. + +0.2.0 (2019-01-13) +------------------ + +1. Prakriya now uses method instead of getitem. See https://github.com/drdhaval2785/python-prakriya/issues/75. + +0.2.1 (2019-01-14) +------------------ + +1. Documentation of commandline (CLI) tools added in documentation. + diff --git a/LICENSE b/LICENSE index 0ec30c5..d6697ac 100644 --- a/LICENSE +++ b/LICENSE @@ -1,35 +1,35 @@ - -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - prakriya is a package to derive information about given Sanskrit verb form. - Copyright (C) 2017 Dr. Dhaval Patel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - + +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + prakriya is a package to derive information about given Sanskrit verb form. + Copyright (C) 2017 Dr. Dhaval Patel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + + diff --git a/MANIFEST.in b/MANIFEST.in index 965b2dd..83a34cc 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,11 +1,11 @@ -include AUTHORS.rst -include CONTRIBUTING.rst -include HISTORY.rst -include LICENSE -include README.rst - -recursive-include tests * -recursive-exclude * __pycache__ -recursive-exclude * *.py[co] - -recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif +include AUTHORS.rst +include CONTRIBUTING.rst +include HISTORY.rst +include LICENSE +include README.rst + +recursive-include tests * +recursive-exclude * __pycache__ +recursive-exclude * *.py[co] + +recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif diff --git a/Makefile b/Makefile index ed30887..9971092 100644 --- a/Makefile +++ b/Makefile @@ -1,87 +1,87 @@ -.PHONY: clean clean-test clean-pyc clean-build docs help -.DEFAULT_GOAL := help -define BROWSER_PYSCRIPT -import os, webbrowser, sys -try: - from urllib import pathname2url -except: - from urllib.request import pathname2url - -webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) -endef -export BROWSER_PYSCRIPT - -define PRINT_HELP_PYSCRIPT -import re, sys - -for line in sys.stdin: - match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) - if match: - target, help = match.groups() - print("%-20s %s" % (target, help)) -endef -export PRINT_HELP_PYSCRIPT -BROWSER := python -c "$$BROWSER_PYSCRIPT" - -help: - @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) - -clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts - - -clean-build: ## remove build artifacts - rm -fr build/ - rm -fr dist/ - rm -fr .eggs/ - find . -name '*.egg-info' -exec rm -fr {} + - find . -name '*.egg' -exec rm -f {} + - -clean-pyc: ## remove Python file artifacts - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -fr {} + - -clean-test: ## remove test and coverage artifacts - rm -fr .tox/ - rm -f .coverage - rm -fr htmlcov/ - -lint: ## check style with flake8 - flake8 prakriya tests - -test: ## run tests quickly with the default Python - - python setup.py test - -test-all: ## run tests on every Python version with tox - tox - -coverage: ## check code coverage quickly with the default Python - coverage run --source prakriya setup.py test - coverage report -m - coverage html - $(BROWSER) htmlcov/index.html - -docs: ## generate Sphinx HTML documentation, including API docs - rm -f docs/prakriya.rst - rm -f docs/modules.rst - sphinx-apidoc -o docs/ prakriya - $(MAKE) -C docs clean - $(MAKE) -C docs html - $(BROWSER) docs/_build/html/index.html - -servedocs: docs ## compile the docs watching for changes - watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D . - -release: clean ## package and upload a release - python setup.py sdist upload - python setup.py bdist_wheel upload - -dist: clean ## builds source and wheel package - python setup.py sdist - python setup.py bdist_wheel - ls -l dist - -install: clean ## install the package to the active Python's site-packages - python setup.py install +.PHONY: clean clean-test clean-pyc clean-build docs help +.DEFAULT_GOAL := help +define BROWSER_PYSCRIPT +import os, webbrowser, sys +try: + from urllib import pathname2url +except: + from urllib.request import pathname2url + +webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) +endef +export BROWSER_PYSCRIPT + +define PRINT_HELP_PYSCRIPT +import re, sys + +for line in sys.stdin: + match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) + if match: + target, help = match.groups() + print("%-20s %s" % (target, help)) +endef +export PRINT_HELP_PYSCRIPT +BROWSER := python -c "$$BROWSER_PYSCRIPT" + +help: + @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) + +clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts + + +clean-build: ## remove build artifacts + rm -fr build/ + rm -fr dist/ + rm -fr .eggs/ + find . -name '*.egg-info' -exec rm -fr {} + + find . -name '*.egg' -exec rm -f {} + + +clean-pyc: ## remove Python file artifacts + find . -name '*.pyc' -exec rm -f {} + + find . -name '*.pyo' -exec rm -f {} + + find . -name '*~' -exec rm -f {} + + find . -name '__pycache__' -exec rm -fr {} + + +clean-test: ## remove test and coverage artifacts + rm -fr .tox/ + rm -f .coverage + rm -fr htmlcov/ + +lint: ## check style with flake8 + flake8 prakriya tests + +test: ## run tests quickly with the default Python + + python setup.py test + +test-all: ## run tests on every Python version with tox + tox + +coverage: ## check code coverage quickly with the default Python + coverage run --source prakriya setup.py test + coverage report -m + coverage html + $(BROWSER) htmlcov/index.html + +docs: ## generate Sphinx HTML documentation, including API docs + rm -f docs/prakriya.rst + rm -f docs/modules.rst + sphinx-apidoc -o docs/ prakriya + $(MAKE) -C docs clean + $(MAKE) -C docs html + $(BROWSER) docs/_build/html/index.html + +servedocs: docs ## compile the docs watching for changes + watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D . + +release: clean ## package and upload a release + python setup.py sdist upload + python setup.py bdist_wheel upload + +dist: clean ## builds source and wheel package + python setup.py sdist + python setup.py bdist_wheel + ls -l dist + +install: clean ## install the package to the active Python's site-packages + python setup.py install diff --git a/README.rst b/README.rst index 70975d9..cb2f539 100644 --- a/README.rst +++ b/README.rst @@ -1,67 +1,67 @@ -======== -prakriya -======== - - -.. image:: https://img.shields.io/pypi/v/prakriya.svg - :target: https://pypi.python.org/pypi/prakriya - -.. image:: https://img.shields.io/travis/drdhaval2785/python-prakriya.svg - :target: https://travis-ci.org/drdhaval2785/python-prakriya - -.. image:: https://readthedocs.org/projects/prakriya/badge/?version=latest - :target: https://prakriya.readthedocs.io/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://pyup.io/repos/github/drdhaval2785/python-prakriya/shield.svg - :target: https://pyup.io/repos/github/drdhaval2785/python-prakriya/ - :alt: Updates - -.. image:: https://landscape.io/github/drdhaval2785/python-prakriya/master/landscape.svg?style=flat - :target: https://landscape.io/github/drdhaval2785/python-prakriya/master - :alt: Code health - -.. image:: https://coveralls.io/repos/github/drdhaval2785/python-prakriya/badge.svg?branch=master - :target: https://coveralls.io/github/drdhaval2785/python-prakriya?branch=master - :alt: Code coverage - -.. image:: https://img.shields.io/badge/Donate-PayPal-green.svg - :target: https://www.paypal.me/drdhaval2785/500inr - :alt: Paypal - -prakriya is a package to derive information about given Sanskrit verb form. - - -* Free software: GNU General Public License v3 -* Documentation: https://prakriya.readthedocs.io. - - -Features --------- - -1. Provides step by step derivation based on Panini's grammar of Sanskrit. -2. Supports various transliteration as input and output. -3. Also provides a commandline tool. - - -Support -------- -1. You can help development of code by testing and bug report. -2. You can contribute monetarily at the following link. - -.. image:: https://img.shields.io/badge/Donate-PayPal-green.svg - :target: https://www.paypal.me/drdhaval2785/500inr - :alt: Paypal - - -Credits ---------- - -1. This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template. - -.. _Cookiecutter: https://github.com/audreyr/cookiecutter -.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage - -2. This package uses indic-transliteration_ package. - -.. _indic-transliteration: https://pypi.python.org/pypi/indic-transliteration +======== +prakriya +======== + + +.. image:: https://img.shields.io/pypi/v/prakriya.svg + :target: https://pypi.python.org/pypi/prakriya + +.. image:: https://img.shields.io/travis/drdhaval2785/python-prakriya.svg + :target: https://travis-ci.org/drdhaval2785/python-prakriya + +.. image:: https://readthedocs.org/projects/prakriya/badge/?version=latest + :target: https://prakriya.readthedocs.io/en/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://pyup.io/repos/github/drdhaval2785/python-prakriya/shield.svg + :target: https://pyup.io/repos/github/drdhaval2785/python-prakriya/ + :alt: Updates + +.. image:: https://landscape.io/github/drdhaval2785/python-prakriya/master/landscape.svg?style=flat + :target: https://landscape.io/github/drdhaval2785/python-prakriya/master + :alt: Code health + +.. image:: https://coveralls.io/repos/github/drdhaval2785/python-prakriya/badge.svg?branch=master + :target: https://coveralls.io/github/drdhaval2785/python-prakriya?branch=master + :alt: Code coverage + +.. image:: https://img.shields.io/badge/Donate-PayPal-green.svg + :target: https://www.paypal.me/drdhaval2785/500inr + :alt: Paypal + +prakriya is a package to derive information about given Sanskrit verb form. + + +* Free software: GNU General Public License v3 +* Documentation: https://prakriya.readthedocs.io. + + +Features +-------- + +1. Provides step by step derivation based on Panini's grammar of Sanskrit. +2. Supports various transliteration as input and output. +3. Also provides a commandline tool. + + +Support +------- +1. You can help development of code by testing and bug report. +2. You can contribute monetarily at the following link. + +.. image:: https://img.shields.io/badge/Donate-PayPal-green.svg + :target: https://www.paypal.me/drdhaval2785/500inr + :alt: Paypal + + +Credits +--------- + +1. This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template. + +.. _Cookiecutter: https://github.com/audreyr/cookiecutter +.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage + +2. This package uses indic-transliteration_ package. + +.. _indic-transliteration: https://pypi.python.org/pypi/indic-transliteration diff --git a/docs/.gitignore b/docs/.gitignore index 1a51ec6..c26829f 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,3 +1,3 @@ -/prakriya.rst -/prakriya.*.rst -/modules.rst +/prakriya.rst +/prakriya.*.rst +/modules.rst diff --git a/docs/Makefile b/docs/Makefile index 0914281..b590bf5 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,177 +1,177 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/prakriya.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/prakriya.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/prakriya" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/prakriya" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/prakriya.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/prakriya.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/prakriya" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/prakriya" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/authors.rst b/docs/authors.rst index e122f91..426bac5 100644 --- a/docs/authors.rst +++ b/docs/authors.rst @@ -1 +1 @@ -.. include:: ../AUTHORS.rst +.. include:: ../AUTHORS.rst diff --git a/docs/conf.py b/docs/conf.py index 563792a..b252b78 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,276 +1,276 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# prakriya documentation build configuration file, created by -# sphinx-quickstart on Tue Jul 9 22:26:36 2013. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another -# directory, add these directories to sys.path here. If the directory is -# relative to the documentation root, use os.path.abspath to make it -# absolute, like shown here. -sys.path.insert(0, os.path.abspath('.')) - -# Get the project root dir, which is the parent dir of this -cwd = os.getcwd() -project_root = os.path.dirname(cwd) - -# Insert the project root dir as the first element in the PYTHONPATH. -# This lets us ensure that the source package is imported, and that its -# version is used. -sys.path.insert(0, project_root) - -import prakriya - -# -- General configuration --------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon', 'sphinx_click.ext'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'prakriya' -copyright = u"2017, Dr. Dhaval Patel" - -# The version info for the project you're documenting, acts as replacement -# for |version| and |release|, also used in various other places throughout -# the built documents. -# -# The short X.Y version. -version = prakriya.__version__ -# The full version, including alpha/beta/rc tags. -release = prakriya.__version__ - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to -# some non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built -# documents. -#keep_warnings = False - - -# -- Options for HTML output ------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a -# theme further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as -# html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the -# top of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon -# of the docs. This file should be a Windows icon file (.ico) being -# 16x16 or 32x32 pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) -# here, relative to this directory. They are copied after the builtin -# static files, so a file named "default.css" will overwrite the builtin -# "default.css". -# html_static_path = ['_static'] -html_static_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names -# to template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. -# Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. -# Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages -# will contain a tag referring to it. The value of this option -# must be the base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'prakriyadoc' - - -# -- Options for LaTeX output ------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - #'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - #'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - #'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass -# [howto/manual]). -latex_documents = [ - ('index', 'prakriya.tex', - u'prakriya Documentation', - u'Dr. Dhaval Patel', 'manual'), -] - -# The name of an image file (relative to this directory) to place at -# the top of the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings -# are parts, not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output ------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'prakriya', - u'prakriya Documentation', - [u'Dr. Dhaval Patel'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ---------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'prakriya', - u'prakriya Documentation', - u'Dr. Dhaval Patel', - 'prakriya', - 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# prakriya documentation build configuration file, created by +# sphinx-quickstart on Tue Jul 9 22:26:36 2013. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another +# directory, add these directories to sys.path here. If the directory is +# relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +sys.path.insert(0, os.path.abspath('.')) + +# Get the project root dir, which is the parent dir of this +cwd = os.getcwd() +project_root = os.path.dirname(cwd) + +# Insert the project root dir as the first element in the PYTHONPATH. +# This lets us ensure that the source package is imported, and that its +# version is used. +sys.path.insert(0, project_root) + +import prakriya + +# -- General configuration --------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon', 'sphinx_click.ext'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'prakriya' +copyright = u"2017, Dr. Dhaval Patel" + +# The version info for the project you're documenting, acts as replacement +# for |version| and |release|, also used in various other places throughout +# the built documents. +# +# The short X.Y version. +version = prakriya.__version__ +# The full version, including alpha/beta/rc tags. +release = prakriya.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to +# some non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built +# documents. +#keep_warnings = False + + +# -- Options for HTML output ------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a +# theme further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as +# html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the +# top of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon +# of the docs. This file should be a Windows icon file (.ico) being +# 16x16 or 32x32 pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) +# here, relative to this directory. They are copied after the builtin +# static files, so a file named "default.css" will overwrite the builtin +# "default.css". +# html_static_path = ['_static'] +html_static_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names +# to template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. +# Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. +# Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages +# will contain a tag referring to it. The value of this option +# must be the base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'prakriyadoc' + + +# -- Options for LaTeX output ------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto/manual]). +latex_documents = [ + ('index', 'prakriya.tex', + u'prakriya Documentation', + u'Dr. Dhaval Patel', 'manual'), +] + +# The name of an image file (relative to this directory) to place at +# the top of the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings +# are parts, not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output ------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'prakriya', + u'prakriya Documentation', + [u'Dr. Dhaval Patel'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ---------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'prakriya', + u'prakriya Documentation', + u'Dr. Dhaval Patel', + 'prakriya', + 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/docs/contributing.rst b/docs/contributing.rst index e582053..819f45e 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -1 +1 @@ -.. include:: ../CONTRIBUTING.rst +.. include:: ../CONTRIBUTING.rst diff --git a/docs/history.rst b/docs/history.rst index 2506499..e4e52cc 100644 --- a/docs/history.rst +++ b/docs/history.rst @@ -1 +1 @@ -.. include:: ../HISTORY.rst +.. include:: ../HISTORY.rst diff --git a/docs/index.rst b/docs/index.rst index b690006..4dbcdf6 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,21 +1,21 @@ -Welcome to prakriya's documentation! -====================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - - readme - installation - usage - contributing - authors - history - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +Welcome to prakriya's documentation! +====================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + readme + installation + usage + contributing + authors + history + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/installation.rst b/docs/installation.rst index 78903a0..f67397d 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -1,51 +1,51 @@ -.. highlight:: shell - -============ -Installation -============ - - -Stable release --------------- - -To install prakriya, run this command in your terminal: - -.. code-block:: console - - $ pip install prakriya - -This is the preferred method to install prakriya, as it will always install the most recent stable release. - -If you don't have `pip`_ installed, this `Python installation guide`_ can guide -you through the process. - -.. _pip: https://pip.pypa.io -.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/ - - -From sources ------------- - -The sources for prakriya can be downloaded from the `Github repo`_. - -You can either clone the public repository: - -.. code-block:: console - - $ git clone git://github.com/drdhaval2785/python-prakriya - -Or download the `tarball`_: - -.. code-block:: console - - $ curl -OL https://github.com/drdhaval2785/python-prakriya/tarball/master - -Once you have a copy of the source, you can install it with: - -.. code-block:: console - - $ python setup.py install - - -.. _Github repo: https://github.com/drdhaval2785/python-prakriya -.. _tarball: https://github.com/drdhaval2785/python-prakriya/tarball/master +.. highlight:: shell + +============ +Installation +============ + + +Stable release +-------------- + +To install prakriya, run this command in your terminal: + +.. code-block:: console + + $ pip install prakriya + +This is the preferred method to install prakriya, as it will always install the most recent stable release. + +If you don't have `pip`_ installed, this `Python installation guide`_ can guide +you through the process. + +.. _pip: https://pip.pypa.io +.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/ + + +From sources +------------ + +The sources for prakriya can be downloaded from the `Github repo`_. + +You can either clone the public repository: + +.. code-block:: console + + $ git clone git://github.com/drdhaval2785/python-prakriya + +Or download the `tarball`_: + +.. code-block:: console + + $ curl -OL https://github.com/drdhaval2785/python-prakriya/tarball/master + +Once you have a copy of the source, you can install it with: + +.. code-block:: console + + $ python setup.py install + + +.. _Github repo: https://github.com/drdhaval2785/python-prakriya +.. _tarball: https://github.com/drdhaval2785/python-prakriya/tarball/master diff --git a/docs/make.bat b/docs/make.bat index db49e73..99199de 100644 --- a/docs/make.bat +++ b/docs/make.bat @@ -1,242 +1,242 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\prakriya.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\prakriya.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\prakriya.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\prakriya.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end diff --git a/docs/readme.rst b/docs/readme.rst index 72a3355..de17838 100644 --- a/docs/readme.rst +++ b/docs/readme.rst @@ -1 +1 @@ -.. include:: ../README.rst +.. include:: ../README.rst diff --git a/docs/usage.rst b/docs/usage.rst index 053fba1..f4792db 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -1,12 +1,12 @@ -===== -Usage -===== - -.. automodule:: prakriya - :members: -.. click:: prakriya.cli:main - :prog: prakriya - :show-nested: -.. click:: prakriya.cli:generate - :prog: generate - :show-nested: +===== +Usage +===== + +.. automodule:: prakriya + :members: +.. click:: prakriya.cli:main + :prog: prakriya + :show-nested: +.. click:: prakriya.cli:generate + :prog: generate + :show-nested: diff --git a/prakriya/__init__.py b/prakriya/__init__.py index ebe4939..6800685 100644 --- a/prakriya/__init__.py +++ b/prakriya/__init__.py @@ -1,14 +1,14 @@ -# -*- coding: utf-8 -*- - -"""Top-level package for prakriya.""" - -__author__ = """Dr. Dhaval Patel""" -__email__ = 'drdhaval2785@gmail.com' -__version__ = '0.2.1' -__all__ = ['Prakriya', 'VerbFormGenerator', 'main', 'generate'] - - -from .verbforms import Prakriya -from .generate import VerbFormGenerator -from .cli import main -from .cli import generate +# -*- coding: utf-8 -*- + +"""Top-level package for prakriya.""" + +__author__ = """Dr. Dhaval Patel""" +__email__ = 'drdhaval2785@gmail.com' +__version__ = '0.2.1' +__all__ = ['Prakriya', 'VerbFormGenerator', 'main', 'generate'] + + +from .verbforms import Prakriya +from .generate import VerbFormGenerator +from .cli import main +from .cli import generate diff --git a/prakriya/cli.py b/prakriya/cli.py index 30cf524..29444bb 100644 --- a/prakriya/cli.py +++ b/prakriya/cli.py @@ -1,117 +1,117 @@ -# -*- coding: utf-8 -*- - -"""Console script for prakriya.""" - -import click - - -# Start a click command for testing Prakriya class. -@click.command() -@click.option('--intran', default='slp1', - type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', - 'wx', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu'])) -@click.option('--outtran', default='slp1', - type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', - 'wx', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu'])) -@click.argument('verbform') -@click.argument('field', - required=False, - default='') -def main(verbform, field, intran, outtran): - """Console script to get derivation and other information for given verb form. - - $ prakriya [OPTIONS] VERBFORM [FIELD] - - Valid values of FIELD and expected output are as follows. - ``prakriya`` - Return step by step derivation. - - ``verb`` - Return verb in Devanagari without accent marks. - - ``verbaccent`` - Return the verb in Devanagari with accent marks. - - "lakara" - Return the lakAra (tense / mood) in which this form is generated. - - ``purusha`` - Returns purusha of the given verb form. - - ``vachana`` - Returns vachana of the given verb form. - - ``gana`` - Return the gaNa (class) of the verb. - - ``meaning`` - Return meaning of the verb in SLP1 transliteration. - - ``number`` - Return number of the verb in dhAtupATha. - - ``madhaviya`` - Return link to mAdhaviyadhAtuvRtti. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``kshiratarangini`` - Return link to kSIrataraGgiNI. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``dhatupradipa`` - Return link to dhAtupradIpa. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``jnu`` - Return link to JNU site for this verb form. - http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp is the home page. - - ``uohyd`` - Return link to UoHyd site for this verb form. - http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi is the home page. - - ``upasarga`` - Return upasarga, if any. - Currently we do not support verb forms with upasargas. - - ``padadecider_id`` - Return the rule number which decides - whether the verb is parasmaipadI, AtmanepadI or ubhayapadI. - - ``padadecider_sutra`` - Return the rule text which decides - whether the verb is parasmaipadI, AtmanepadI or ubhayapadI. - - ``it_id`` - Returns whether the verb is - seT, aniT or veT, provided the form has iDAgama. - - ``it_status`` - Returns whether the verb form has iDAgama or not. - seT, veT, aniT are the output. - - ``it_sutra`` - Returns rule number if iDAgama is caused by some special rule. - - """ - from prakriya import Prakriya - prak = Prakriya() - prak.input_translit(intran) - prak.output_translit(outtran) - result = prak[verbform, field] - click.echo(result) - - -@click.command() -@click.option('--intran', default='slp1', - type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', - 'wx', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu'])) -@click.option('--outtran', default='slp1', - type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', - 'wx', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu'])) -@click.argument('verb', required=True) -@click.argument('lakara', required=True) -@click.argument('purusha', required=True) -@click.argument('vachana', required=True) -def generate(verb, lakara, purusha, vachana, intran, outtran): - """Console script to get verb form for given verb, lakara, purusha and vachana. - - $ generate [OPTIONS] VERB LAKARA PURUSHA VACHANA - - ``LAKARA`` can take law, liw, luw, lfw, low, laN, viDiliN, ASIrliN, luN, lfN values. - - ``PURUSHA`` can take praTama, maDyama, uttama values. - - ``VACHANA`` can take eka, dvi, bahu values. - - """ - from prakriya import VerbFormGenerator - gen = VerbFormGenerator() - gen.input_translit(intran) - gen.output_translit(outtran) - result = gen[verb, lakara, purusha, vachana] - click.echo(result) +# -*- coding: utf-8 -*- + +"""Console script for prakriya.""" + +import click + + +# Start a click command for testing Prakriya class. +@click.command() +@click.option('--intran', default='slp1', + type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', + 'wx', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu'])) +@click.option('--outtran', default='slp1', + type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', + 'wx', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu'])) +@click.argument('verbform') +@click.argument('field', + required=False, + default='') +def main(verbform, field, intran, outtran): + """Console script to get derivation and other information for given verb form. + + $ prakriya [OPTIONS] VERBFORM [FIELD] + + Valid values of FIELD and expected output are as follows. + ``prakriya`` - Return step by step derivation. + + ``verb`` - Return verb in Devanagari without accent marks. + + ``verbaccent`` - Return the verb in Devanagari with accent marks. + + "lakara" - Return the lakAra (tense / mood) in which this form is generated. + + ``purusha`` - Returns purusha of the given verb form. + + ``vachana`` - Returns vachana of the given verb form. + + ``gana`` - Return the gaNa (class) of the verb. + + ``meaning`` - Return meaning of the verb in SLP1 transliteration. + + ``number`` - Return number of the verb in dhAtupATha. + + ``madhaviya`` - Return link to mAdhaviyadhAtuvRtti. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``kshiratarangini`` - Return link to kSIrataraGgiNI. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``dhatupradipa`` - Return link to dhAtupradIpa. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``jnu`` - Return link to JNU site for this verb form. + http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp is the home page. + + ``uohyd`` - Return link to UoHyd site for this verb form. + http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi is the home page. + + ``upasarga`` - Return upasarga, if any. + Currently we do not support verb forms with upasargas. + + ``padadecider_id`` - Return the rule number which decides + whether the verb is parasmaipadI, AtmanepadI or ubhayapadI. + + ``padadecider_sutra`` - Return the rule text which decides + whether the verb is parasmaipadI, AtmanepadI or ubhayapadI. + + ``it_id`` - Returns whether the verb is + seT, aniT or veT, provided the form has iDAgama. + + ``it_status`` - Returns whether the verb form has iDAgama or not. + seT, veT, aniT are the output. + + ``it_sutra`` - Returns rule number if iDAgama is caused by some special rule. + + """ + from prakriya import Prakriya + prak = Prakriya() + prak.input_translit(intran) + prak.output_translit(outtran) + result = prak[verbform, field] + click.echo(result) + + +@click.command() +@click.option('--intran', default='slp1', + type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', + 'wx', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu'])) +@click.option('--outtran', default='slp1', + type=click.Choice(['slp1', 'itrans', 'hk', 'iast', 'devanagari', + 'wx', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu'])) +@click.argument('verb', required=True) +@click.argument('lakara', required=True) +@click.argument('purusha', required=True) +@click.argument('vachana', required=True) +def generate(verb, lakara, purusha, vachana, intran, outtran): + """Console script to get verb form for given verb, lakara, purusha and vachana. + + $ generate [OPTIONS] VERB LAKARA PURUSHA VACHANA + + ``LAKARA`` can take law, liw, luw, lfw, low, laN, viDiliN, ASIrliN, luN, lfN values. + + ``PURUSHA`` can take praTama, maDyama, uttama values. + + ``VACHANA`` can take eka, dvi, bahu values. + + """ + from prakriya import VerbFormGenerator + gen = VerbFormGenerator() + gen.input_translit(intran) + gen.output_translit(outtran) + result = gen[verb, lakara, purusha, vachana] + click.echo(result) diff --git a/prakriya/generate.py b/prakriya/generate.py index 3a6526c..a71eec8 100644 --- a/prakriya/generate.py +++ b/prakriya/generate.py @@ -1,243 +1,244 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Create a python library which gives derivation for given verb and tense.""" -import os.path -import sys -import json -from .utils import app_dir, read_json, convert -# import datetime - - -class VerbFormGenerator(): - """Return the verb form for given verb, tense, purusha-vachana or suffix. - - - Example - ------- - - To get verb form for given verb, tense, suffix / (purusha and vachana) in a project:: - - >>> from prakriya import VerbFormGenerator - >>> g = VerbFormGenerator() - - There are four ways to get verb forms for given verb. - - >>> g.getforms(inputverb, lakara='', purusha='', vachana='') - >>> g.getforms(inputverb, lakara='', suffix='') - >>> g[verb, tense, purusha, vachana] - >>> g[verb, tense, suffix] - # Examples of four formats are as follows. Default input transliteration is SLP1. - >>> g.getforms('BU', 'law', 'praTama', 'bahu') - >>> g.getforms('BU', 'law', 'Ji') - >>> g['BU', 'law', 'praTama', 'eka'] - >>> g['BU', 'law', 'tip'] - - __getitem__ method is discouraged. Will be deprecated in later versions. - - - transliteration - --------------- - - For using transliterations in VerbFormGenerator class, use as below. - - >>> from prakriya import VerbFormGenerator - >>> g = VerbFormGenerator() - >>> g.input_translit('hk') # Customize 'hk' - >>> g.output_translit('devanagari') # Customize 'devanagari' - >>> g.getforms('bhU', 'laT', 'prathama', 'bahu') # Input in HK and output in Devanagari. - - Valid transliterations are slp1, itrans, hk, iast, devanagari, wx, bengali, - gujarati, gurmukhi, kannada, malayalam, oriya and telugu. - They can be used both as input transliteration and output transliteration. - """ - - def __init__(self): - self.validtenses = ['law', 'liw', 'luw', 'lfw', 'low', 'laN', - 'viDiliN', 'ASIrliN', 'luN', 'lfN'] - self.validpurushas = ['praTama', 'maDyama', 'uttama'] - self.validvachanas = ['eka', 'dvi', 'bahu'] - self.validsuffices = ['tip', 'tas', 'Ji', 'sip', 'Tas', 'Ta', 'mip', - 'vas', 'mas', 'ta', 'AtAm', 'Ja', 'TAs', 'ATAm', - 'Dvam', 'iw', 'vahi', 'mahiN'] - self.validtrans = ['slp1', 'itrans', 'hk', 'iast', 'devanagari', - 'wx', 'bengali', 'gujarati', - 'gurmukhi', 'kannada', 'malayalam', 'oriya', - 'telugu', 'tamil'] - self.appdir = app_dir('prakriya') - self.intran = 'slp1' - self.outtran = 'slp1' - self.mapform = 'mapforms2.json' - self.mapjson = os.path.join(self.appdir, self.mapform) - # If the file does not exist, download from Github. - if not os.path.exists(self.appdir): - os.makedirs(self.appdir) - if not os.path.isfile(self.mapjson): - url1 = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/mapforms2.json' - import requests - # print('Downloading mapform file. Roughly 8 MB.') - with open(self.mapjson, "wb") as fin1: - ret1 = requests.get(url1) - fin1.write(ret1.content) - self.data = read_json(os.path.join(self.appdir, 'mapforms2.json')) - if not os.path.isfile(os.path.join(self.appdir, 'verbmap.json')): - url2 = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/verbmap.json' - import requests - # print('Downloading verbmap file. Roughly 32 KB.') - with open(os.path.join(self.appdir, 'verbmap.json'), "wb") as fin2: - ret2 = requests.get(url2) - fin2.write(ret2.content) - self.verbmap = read_json(os.path.join(self.appdir, 'verbmap.json')) - - def input_translit(self, tran): - """Set input transliteration.""" - # If valid transliteration, set transliteration. - if tran in self.validtrans: - self.intran = tran - # If not valid, throw error. - else: - print('Error. Not a valid transliteration scheme.') - exit(0) - - def output_translit(self, tran): - """Set output transliteration.""" - # If valid transliteration, set transliteration. - if tran in self.validtrans: - self.outtran = tran - # If not valid, throw error. - else: - print('Error. Not a valid transliteration scheme.') - exit(0) - - def getforms(self, inputverb, lakara='', purusha='', vachana='', suffix=''): - """Get verb form data for given input.""" - # Change the transliteration to SLP1. - inputverb = convert(inputverb, self.intran, 'slp1') - lakara = convert(lakara, self.intran, 'slp1') - suffix = convert(suffix, self.intran, 'slp1') - purusha = convert(purusha, self.intran, 'slp1') - vachana = convert(vachana, self.intran, 'slp1') - suffices = [''] - # Get suffices - if suffix in self.validsuffices: - suffices = [suffix] - elif purusha in self.validpurushas and vachana in self.validvachanas: - suffices = getsuffix(purusha, vachana) - # Start calculations - output = [] - if inputverb in self.data: - verbs = [inputverb] - elif inputverb in self.verbmap: - verbs = self.verbmap[inputverb] - else: - print('Verb is not in our database. Sorry!') - exit(0) - for verb in verbs: - wholeresult = self.data[verb] - output = self._remove_unnecessary(wholeresult, lakara, suffices) - # Transliterate the output - outputstr = json.dumps(output) - outputstr = convert(outputstr, 'slp1', self.outtran) - output = json.loads(outputstr) - return output - - def _remove_unnecessary(self, wholeresult, lakara='', suffices=['']): - """Remove redundant data.""" - output = {} - for member in wholeresult: - if lakara == '' and suffices == ['']: - output[member] = wholeresult[member] - elif lakara != '' and suffices == ['']: - output[member] = wholeresult[member][lakara] - elif lakara != '' and suffices != ['']: - for suffix in suffices: - if suffix in wholeresult[member][lakara]: - output[member] = wholeresult[member][lakara][suffix] - return output - - def __getitem__(self, items): - """Return the requested data by user.""" - # Initiate without arguments - arguments = '' - # print(datetime.datetime.now()) - # If there is only one entry in items, it is treated as verb. - if isinstance(items, ("".__class__, u"".__class__)): - inputverb = items - else: - # Otherwise, first is verbform and the next is argument1. - inputverb = items[0] - # py2 - if len(items) > 1 and sys.version_info[0] < 3: - arguments = [convert(member.decode( - 'utf-8'), self.intran, 'slp1') for member in items[1:]] - # py3 - elif len(items) > 1: - arguments = [convert(member, self.intran, 'slp1') - for member in items[1:]] - # Convert verbform from desired input transliteration to SLP1. - if sys.version_info[0] < 3: - inputverb = inputverb.decode('utf-8') - inputverb = convert(inputverb, self.intran, 'slp1') - # Enter user defined values - for member in arguments: - if member in self.validtenses: - tense = member - if member in self.validpurushas: - purusha = member - if member in self.validvachanas: - vachana = member - if member in self.validsuffices: - suffix = member - - # Start calculations - result = {} - if inputverb in self.data: - verbs = [inputverb] - elif inputverb in self.verbmap: - verbs = self.verbmap[inputverb] - else: - print('Verb is not in our database. Sorry!') - exit(0) - for verb in verbs: - wholeresult = self.data[verb] - for verb_num in wholeresult: - # Tense not specified. Return whole data - if 'tense' not in vars(): - result[verb_num] = wholeresult - # Tense specified. - else: - # Tense defined, but suffices not clarified. - if 'suffix' not in vars() and ('purusha' not in vars() or 'vachana' not in vars()): - result[verb_num] = wholeresult[verb_num][tense] - # suffices clarified - elif 'suffix' in vars() and suffix in wholeresult[verb_num][tense]: - result[verb_num] = wholeresult[verb_num][tense][suffix] - elif 'purusha' in vars() and 'vachana' in vars(): - suffices = getsuffix(purusha, vachana) - for suff in suffices: - if suff in wholeresult[verb_num][tense]: - result[verb_num] = wholeresult[verb_num][tense][suff] - # Return the result. - return json.loads(convert(json.dumps(result), 'slp1', self.outtran)) - - -def getsuffix(purusha, vachana): - """Get suffices for given purusha and vachana.""" - if purusha == 'praTama' and vachana == 'eka': - result = ['tip', 'ta'] - elif purusha == 'praTama' and vachana == 'dvi': - result = ['tas', 'AtAm'] - elif purusha == 'praTama' and vachana == 'bahu': - result = ['Ji', 'Ja'] - elif purusha == 'maDyama' and vachana == 'eka': - result = ['sip', 'TAs'] - elif purusha == 'maDyama' and vachana == 'dvi': - result = ['Tas', 'ATAm'] - elif purusha == 'maDyama' and vachana == 'bahu': - result = ['Ta', 'Dvam'] - elif purusha == 'uttama' and vachana == 'eka': - result = ['mip', 'iw'] - elif purusha == 'uttama' and vachana == 'dvi': - result = ['vas', 'vahi'] - elif purusha == 'uttama' and vachana == 'bahu': - result = ['mas', 'mahiN'] - return result +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Create a python library which gives derivation for given verb and tense.""" +import os.path +import sys +import json +from .utils import app_dir, read_json, convert +# import datetime + + +class VerbFormGenerator(): + """Return the verb form for given verb, tense, purusha-vachana or suffix. + + + Example + ------- + + To get verb form for given verb, tense, suffix / (purusha and vachana) in a project:: + + >>> from prakriya import VerbFormGenerator + >>> g = VerbFormGenerator() + + There are four ways to get verb forms for given verb. + + >>> g.getforms(inputverb, lakara='', purusha='', vachana='') + >>> g.getforms(inputverb, lakara='', suffix='') + >>> g[verb, tense, purusha, vachana] + >>> g[verb, tense, suffix] + # Examples of four formats are as follows. Default input transliteration is SLP1. + >>> g.getforms('BU', 'law', 'praTama', 'bahu') + >>> g.getforms('BU', 'law', 'Ji') + >>> g['BU', 'law', 'praTama', 'eka'] + >>> g['BU', 'law', 'tip'] + + __getitem__ method is discouraged. Will be deprecated in later versions. + + + transliteration + --------------- + + For using transliterations in VerbFormGenerator class, use as below. + + >>> from prakriya import VerbFormGenerator + >>> g = VerbFormGenerator() + >>> g.input_translit('hk') # Customize 'hk' + >>> g.output_translit('devanagari') # Customize 'devanagari' + >>> g.getforms('bhU', 'laT', 'prathama', 'bahu') # Input in HK and output in Devanagari. + + Valid transliterations are slp1, itrans, hk, iast, devanagari, wx, bengali, + gujarati, gurmukhi, kannada, malayalam, oriya and telugu. + They can be used both as input transliteration and output transliteration. + """ + + def __init__(self): + self.validtenses = ['law', 'liw', 'luw', 'lfw', 'low', 'laN', + 'viDiliN', 'ASIrliN', 'luN', 'lfN'] + self.validpurushas = ['praTama', 'maDyama', 'uttama'] + self.validvachanas = ['eka', 'dvi', 'bahu'] + self.validsuffices = ['tip', 'tas', 'Ji', 'sip', 'Tas', 'Ta', 'mip', + 'vas', 'mas', 'ta', 'AtAm', 'Ja', 'TAs', 'ATAm', + 'Dvam', 'iw', 'vahi', 'mahiN'] + self.validtrans = ['slp1', 'itrans', 'hk', 'iast', 'devanagari', + 'wx', 'bengali', 'gujarati', + 'gurmukhi', 'kannada', 'malayalam', 'oriya', + 'telugu', 'tamil'] + self.appdir = app_dir('prakriya') + self.intran = 'slp1' + self.outtran = 'slp1' + self.mapform = 'mapforms2.json' + self.mapjson = os.path.join(self.appdir, self.mapform) + # If the file does not exist, download from Github. + if not os.path.exists(self.appdir): + os.makedirs(self.appdir) + if not os.path.isfile(self.mapjson): + url1 = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/mapforms2.json' + import requests + # print('Downloading mapform file. Roughly 8 MB.') + with open(self.mapjson, "wb") as fin1: + ret1 = requests.get(url1) + fin1.write(ret1.content) + self.data = read_json(os.path.join(self.appdir, 'mapforms2.json')) + if not os.path.isfile(os.path.join(self.appdir, 'verbmap.json')): + url2 = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/verbmap.json' + import requests + # print('Downloading verbmap file. Roughly 32 KB.') + with open(os.path.join(self.appdir, 'verbmap.json'), "wb") as fin2: + ret2 = requests.get(url2) + fin2.write(ret2.content) + self.verbmap = read_json(os.path.join(self.appdir, 'verbmap.json')) + + def input_translit(self, tran): + """Set input transliteration.""" + # If valid transliteration, set transliteration. + if tran in self.validtrans: + self.intran = tran + # If not valid, throw error. + else: + print('Error. Not a valid transliteration scheme.') + exit(0) + + def output_translit(self, tran): + """Set output transliteration.""" + # If valid transliteration, set transliteration. + if tran in self.validtrans: + self.outtran = tran + # If not valid, throw error. + else: + print('Error. Not a valid transliteration scheme.') + exit(0) + + def getforms(self, inputverb, lakara='', purusha='', vachana='', suffix=''): + """Get verb form data for given input.""" + # Change the transliteration to SLP1. + inputverb = convert(inputverb, self.intran, 'slp1') + lakara = convert(lakara, self.intran, 'slp1') + suffix = convert(suffix, self.intran, 'slp1') + purusha = convert(purusha, self.intran, 'slp1') + vachana = convert(vachana, self.intran, 'slp1') + suffices = [''] + # Get suffices + if suffix in self.validsuffices: + suffices = [suffix] + elif purusha in self.validpurushas and vachana in self.validvachanas: + suffices = getsuffix(purusha, vachana) + # Start calculations + output = [] + if inputverb in self.data: + verbs = [inputverb] + elif inputverb in self.verbmap: + verbs = self.verbmap[inputverb] + else: + print('Verb is not in our database. Sorry!') + exit(0) + for verb in verbs: + wholeresult = self.data[verb] + output = remove_unnecessary(wholeresult, lakara, suffices) + # Transliterate the output + outputstr = json.dumps(output) + outputstr = convert(outputstr, 'slp1', self.outtran) + output = json.loads(outputstr) + return output + + def __getitem__(self, items): + """Return the requested data by user.""" + # Initiate without arguments + arguments = '' + # print(datetime.datetime.now()) + # If there is only one entry in items, it is treated as verb. + if isinstance(items, ("".__class__, u"".__class__)): + inputverb = items + else: + # Otherwise, first is verbform and the next is argument1. + inputverb = items[0] + # py2 + if len(items) > 1 and sys.version_info[0] < 3: + arguments = [convert(member.decode( + 'utf-8'), self.intran, 'slp1') for member in items[1:]] + # py3 + elif len(items) > 1: + arguments = [convert(member, self.intran, 'slp1') + for member in items[1:]] + # Convert verbform from desired input transliteration to SLP1. + if sys.version_info[0] < 3: + inputverb = inputverb.decode('utf-8') + inputverb = convert(inputverb, self.intran, 'slp1') + # Enter user defined values + for member in arguments: + if member in self.validtenses: + tense = member + if member in self.validpurushas: + purusha = member + if member in self.validvachanas: + vachana = member + if member in self.validsuffices: + suffix = member + + # Start calculations + result = {} + if inputverb in self.data: + verbs = [inputverb] + elif inputverb in self.verbmap: + verbs = self.verbmap[inputverb] + else: + print('Verb is not in our database. Sorry!') + exit(0) + for verb in verbs: + wholeresult = self.data[verb] + for verb_num in wholeresult: + # Tense not specified. Return whole data + if 'tense' not in vars(): + result[verb_num] = wholeresult + # Tense specified. + else: + # Tense defined, but suffices not clarified. + if 'suffix' not in vars() and ('purusha' not in vars() or 'vachana' not in vars()): + result[verb_num] = wholeresult[verb_num][tense] + # suffices clarified + elif 'suffix' in vars() and suffix in wholeresult[verb_num][tense]: + result[verb_num] = wholeresult[verb_num][tense][suffix] + elif 'purusha' in vars() and 'vachana' in vars(): + suffices = getsuffix(purusha, vachana) + for suff in suffices: + if suff in wholeresult[verb_num][tense]: + result[verb_num] = wholeresult[verb_num][tense][suff] + # Return the result. + return json.loads(convert(json.dumps(result), 'slp1', self.outtran)) + + +def remove_unnecessary(wholeresult, lakara='', suffices=None): + """Remove redundant data.""" + output = {} + for member in wholeresult: + if lakara == '' and suffices is None: + output[member] = wholeresult[member] + elif lakara != '' and suffices is None: + output[member] = wholeresult[member][lakara] + elif lakara != '' and suffices is not None: + for suffix in suffices: + if suffix in wholeresult[member][lakara]: + output[member] = wholeresult[member][lakara][suffix] + return output + + +def getsuffix(purusha, vachana): + """Get suffices for given purusha and vachana.""" + if purusha == 'praTama' and vachana == 'eka': + result = ['tip', 'ta'] + elif purusha == 'praTama' and vachana == 'dvi': + result = ['tas', 'AtAm'] + elif purusha == 'praTama' and vachana == 'bahu': + result = ['Ji', 'Ja'] + elif purusha == 'maDyama' and vachana == 'eka': + result = ['sip', 'TAs'] + elif purusha == 'maDyama' and vachana == 'dvi': + result = ['Tas', 'ATAm'] + elif purusha == 'maDyama' and vachana == 'bahu': + result = ['Ta', 'Dvam'] + elif purusha == 'uttama' and vachana == 'eka': + result = ['mip', 'iw'] + elif purusha == 'uttama' and vachana == 'dvi': + result = ['vas', 'vahi'] + elif purusha == 'uttama' and vachana == 'bahu': + result = ['mas', 'mahiN'] + return result diff --git a/prakriya/utils.py b/prakriya/utils.py index d8bf13c..9f1e898 100644 --- a/prakriya/utils.py +++ b/prakriya/utils.py @@ -1,60 +1,60 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"""Helper functions for prakriya package.""" - -import json -import sys -from functools import wraps -from indic_transliteration import sanscript - - -# https://stackoverflow.com/questions/15585493/store-the-cache-to-a-file-functools-lru-cache-in-python-3-2 -def cached(func): - """Create a decorator for cacheing.""" - func.cache = {} - - @wraps(func) - def wrapper(*args): - try: - return func.cache[args] - except KeyError: - func.cache[args] = result = func(*args) - return result - return wrapper - - -# https://stackoverflow.com/questions/1084697/how-do-i-store-desktop-application-data-in-a-cross-platform-way-for-python -def app_dir(appname): - """Return the repository where the system stores APPDATA.""" - from os import path, environ - if sys.platform == 'darwin': - from AppKit import NSSearchPathForDirectoriesInDomains as searchin - from AppKit import NSApplicationSupportDirectory as dirin - from AppKit import NSUserDomainMask as maskin - appdata = path.join(searchin(dirin, maskin, True)[0], appname) - elif sys.platform == 'win32': - appdata = path.join(environ['APPDATA'], appname) - else: - appdata = path.expanduser(path.join("~", "." + appname)) - return appdata - - -@cached -def read_json(path): - """Read the given JSON file into python object.""" - with open(path, 'r') as fin: - return json.loads(fin.read()) - - -@cached -def convert(text, intran, outtran): - """Convert a text from intran to outtran transliteration.""" - result = '' - if intran == outtran: - result = text - elif sys.version_info[0] < 3: - result = sanscript.transliterate(text, intran, outtran).replace(u'|', u'.') - else: - result = sanscript.transliterate(text, intran, outtran).replace('|', '.') - return result +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Helper functions for prakriya package.""" + +import json +import sys +from functools import wraps +from indic_transliteration import sanscript + + +# https://stackoverflow.com/questions/15585493/store-the-cache-to-a-file-functools-lru-cache-in-python-3-2 +def cached(func): + """Create a decorator for cacheing.""" + func.cache = {} + + @wraps(func) + def wrapper(*args): + try: + return func.cache[args] + except KeyError: + func.cache[args] = result = func(*args) + return result + return wrapper + + +# https://stackoverflow.com/questions/1084697/how-do-i-store-desktop-application-data-in-a-cross-platform-way-for-python +def app_dir(appname): + """Return the repository where the system stores APPDATA.""" + from os import path, environ + if sys.platform == 'darwin': + from AppKit import NSSearchPathForDirectoriesInDomains as searchin + from AppKit import NSApplicationSupportDirectory as dirin + from AppKit import NSUserDomainMask as maskin + appdata = path.join(searchin(dirin, maskin, True)[0], appname) + elif sys.platform == 'win32': + appdata = path.join(environ['APPDATA'], appname) + else: + appdata = path.expanduser(path.join("~", "." + appname)) + return appdata + + +@cached +def read_json(path): + """Read the given JSON file into python object.""" + with open(path, 'r') as fin: + return json.loads(fin.read()) + + +@cached +def convert(text, intran, outtran): + """Convert a text from intran to outtran transliteration.""" + result = '' + if intran == outtran: + result = text + elif sys.version_info[0] < 3: + result = sanscript.transliterate(text, intran, outtran).replace(u'|', u'.') + else: + result = sanscript.transliterate(text, intran, outtran).replace('|', '.') + return result diff --git a/prakriya/verbforms.py b/prakriya/verbforms.py index da0a071..cc3b665 100644 --- a/prakriya/verbforms.py +++ b/prakriya/verbforms.py @@ -1,307 +1,307 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Create a python library which returns details about a verb form.""" -import os.path -import sys -import tarfile -import requests -from .utils import app_dir, read_json, convert -# import datetime - - -class Prakriya(): - """Generate a prakriya class. - - - Example - ------- - - To use prakriya in a project:: - - >>> from prakriya import Prakriya - >>> p = Prakriya() - - If you are using the library the first time, be patient. - This will take a long time, because the data file (30 MB) is being downloaded. - - If you can spare around 600 MB space, - it is highly recommended to decompress the tar.gz first time. - Subsequent actions will be very fast. This is one time requirement. - If the data is not decompressed, the code will read from tar.gz file every time. - It introduces slowness to a great extent. So highly recommended to decompress. - - >>> p.decompress() - - Now you are ready to roll! - - The generic format for usage is as follows: - - >>> p.get_info(verbform, field) - - ``verbform`` is mandatory. It is the verb form to be investigated. - The input should be in SLP1 encoding. - - ``field`` is optional. - - Actual usage examples will be like the following. - - >>> p.get_info('Bavati') - >>> p.get_info('Bavati', 'prakriya') - >>> p.get_info('Bavati', 'verb') - - - Valid values of ``field`` and expected output are as follows. - - ``prakriya`` - Return step by step derivation. - - ``verb`` - Return verb in Devanagari without accent marks. - - ``verbaccent`` - Return the verb in Devanagari with accent marks. - - ``lakara`` - Return the lakAra (tense / mood) in which this form is generated. - - ``gana`` - Return the gaNa (class) of the verb. - - ``meaning`` - Return meaning of the verb in SLP1 transliteration. - - ``number`` - Return number of the verb in dhAtupATha. - - ``madhaviya`` - Return link to mAdhaviyadhAtuvRtti. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``kshiratarangini`` - Return link to kSIrataraGgiNI. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``dhatupradipa`` - Return link to dhAtupradIpa. - http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. - - ``jnu`` - Return link to JNU site for this verb form. - http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp is the home page. - - ``uohyd`` - Return link to UoHyd site for this verb form. - http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi is the home page. - - ``upasarga`` - Return upasarga, if any. - Currently we do not support verb forms with upasargas. - - ``padadecider_id`` - Return the rule number which decides whether the verb is - parasmaipadI, AtmanepadI or ubhayapadI. - - ``padadecider_sutra`` - Return the rule text which decides whether the verb is - parasmaipadI, AtmanepadI or ubhayapadI. - - ``it_id`` - Returns whether the verb is seT, aniT or veT, provided the form has iDAgama. - - ``it_status`` - Returns whether the verb form has iDAgama or not. - seT, veT, aniT are the output. - - ``it_sutra`` - Returns rule number if iDAgama is caused by some special rule. - - ``purusha`` - Returns the purusha of the given verb form. - - ``vachana`` - Returns the vacana of the given verb form. - - - transliteration - --------------- - - If you want to set the input or output transliteration, follow these steps. - - >>> from prakriya import Prakriya - >>> p = Prakriya() - >>> p.input_translit('hk') # Customize 'hk' - >>> p.output_translit('devanagari') # Customize 'devanagari' - >>> p.get_info('bhavati') # Input in HK and output in Devanagari. - >>> p.input_translit('devanagari') - >>> p.output_translit('iast') - >>> p.get_info('गच्छति') # Input in Devanagari and output in IAST. - - Valid transliterations are slp1, itrans, hk, iast, devanagari, wx, bengali, - gujarati, gurmukhi, kannada, malayalam, oriya and telugu. - They can be used both as input transliteration and output transliteration. - """ - - def __init__(self): - """Start the class. Decompress tar file if asked for.""" - # Find the directory of the module. - self.appdir = app_dir('prakriya') - # Path where to store the file - self.filename = 'composite_v003.tar.gz' - self.tarfile = os.path.join(self.appdir, 'composite_v003.tar.gz') - self.intran = 'slp1' - self.outtran = 'slp1' - # If the file does not exist, download from Github. - if not os.path.exists(self.appdir): - os.makedirs(self.appdir) - os.makedirs(os.path.join(self.appdir, 'json')) - # Download tar.gz data file - download_from_github(self.appdir, 'composite_v003.tar.gz') - self.tar = tarfile.open(self.tarfile, 'r:gz') - # keep only first thee letters from verbform - download_from_github(self.appdir, 'jsonindex.json') - self.jsonindex = read_json(os.path.join(self.appdir, 'jsonindex.json')) - # Read sutrainfo file. This is needed to convert sutra_num to sutra_text. - download_from_github(self.appdir, 'sutrainfo.json') - self.sutrainfo = read_json(os.path.join(self.appdir, 'sutrainfo.json')) - self.json_cache = {} - - def decompress(self): - """Decompress the tar file if user asks for it.""" - self.tar.extractall(self.appdir) - print("data files extracted.") - print("You shall not need to use decompress() function again.") - print("Just do regular `p = Prakriya()`.") - - def input_translit(self, tran): - """Set input transliteration.""" - # If valid transliteration, set transliteration. - if tran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'velthuis', - 'wx', 'kolkata', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu', 'tamil']: - self.intran = tran - # If not valid, throw error. - else: - print('Error. Not a valid transliteration scheme.') - exit(0) - - def output_translit(self, tran): - """Set output transliteration.""" - # If valid transliteration, set transliteration. - if tran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'velthuis', - 'wx', 'kolkata', 'bengali', 'gujarati', 'gurmukhi', - 'kannada', 'malayalam', 'oriya', 'telugu', 'tamil']: - self.outtran = tran - # If not valid, throw error. - else: - print('Error. Not a valid transliteration scheme.') - exit(0) - - def get_data(self, verbform, tar, intran='slp1', outtran='slp1'): - """Get whole data from the json file for given verb form.""" - # Find the parent directory - slugname = self.jsonindex[verbform[:3]] - # path of json file. - json_in = os.path.join(self.appdir, 'json', slugname + '.json') - extract_from_tar(tar, json_in, slugname, self.appdir) - compositedata = read_json(json_in) - # Keep only the data related to inquired verbform. - data = compositedata[verbform] - # Return results - return storeresult(data, intran, outtran, self.sutrainfo) - - def __getitem__(self, items): - """Return the requested data by user.""" - # Initiate without arguments - argument = '' - # print(datetime.datetime.now()) - # If there is only one entry in items, it is treated as verbform. - if isinstance(items, ("".__class__, u"".__class__)): - verbform = items - # Otherwise, first is verbform and the next is argument1. - else: - verbform = items[0] - if len(items) > 1: - argument = items[1] - # Convert verbform from desired input transliteration to SLP1. - if sys.version_info[0] < 3: - verbform = verbform.decode('utf-8') - verbform = convert(verbform, self.intran, 'slp1') - # Read from tar.gz file. - data = self.get_data(verbform, self.tar, 'slp1', self.outtran) - # If there is no argument, return whole data. - if argument == '': - result = data - # Else, keep only the data related to the provided argument. - else: - result = keep_specific(data, argument) - # print(datetime.datetime.now()) - # Return the result. - return result - - def get_info(self, verbform, field='prakriya'): - """Return the data requested by user.""" - items = [verbform, field] - return self.__getitem__(items) - - -def convertible(argument): - """Returns whether the item is convertible to Devanagari or not.""" - result = False - if argument in set(['verb', 'lakara', 'gana', 'meaning', 'upasarga', - 'padadecider_id', 'padadecider_sutra', 'suffix', - 'it_status', 'it_sutra', 'it_id', 'vachana', - 'purusha']): - result = True - return result - - -def extract_from_tar(tar, filename, slugname, appdir): - """Extracts a file from given tar object and places in the outdir.""" - if not os.path.isfile(filename): - member = tar.getmember('json/' + slugname + '.json') - tar.extract(member, appdir) - - -def storeresult(data, intran, outtran, sutrainfo): - """Store the result with necessary transliteration conversions.""" - # Initialize empty result stack. - result = [] - # For each possible derivation leading to the given verb form - # e.g. baBUva can be from BU, asa~ - for datum in data: - # Initialize a subresult stack as dict. - # key will be argument and value will be data. - subresult = {} - # Start a list for derivation. It needs special treatment. - derivationlist = [] - # For each key, - for item in datum: - # if not in these two - if item not in ['derivation']: - tmp = datum[item] - # correct the wrong anusvAra in SLP1 to correct one. - tmp = tmp.replace('!', '~') - # Store in subresult dict. - if convertible(item): - subresult[item] = convert(tmp, intran, outtran) - else: - subresult[item] = tmp - # derivation is a list (as compared to others which are strings.) - elif item == 'derivation': - # For member of the list - for member in datum['derivation']: - # Fetch sutratext - sutratext = sutrainfo[member['sutra_num']] - sutratext = convert(sutratext, intran, outtran) - # Replace tilde with hyphen. - # Otherwise wrong transliteration will happen. - sutranum = member['sutra_num'].replace('~', '-') - # sutranum = convert(sutranum, intran, outtran) - # A decent representation for rutva. - form = member['form'].replace('@', 'u~') - form = convert(form, intran, outtran) - # Add to derivationlist. - derivationlist.append({'sutra': sutratext, - 'sutra_num': sutranum, 'form': form}) - # Add the derivationlist to the prakriya key. - subresult['prakriya'] = derivationlist - # Append subresult to result and start again. - result.append(subresult) - # Give result. - return result - - -def keep_specific(data, argument): - """Create a list of only the relavent argument.""" - return [member[argument] for member in data] - - -def download_from_github(appdir, filename): - """Download specific data file from Github release page.""" - if not os.path.isfile(os.path.join(appdir, filename)): - print('downloading ' + filename) - url = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/' + filename - with open(os.path.join(appdir, filename), "wb") as fin: - ret = requests.get(url) - fin.write(ret.content) - print('downloaded ' + filename) +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Create a python library which returns details about a verb form.""" +import os.path +import sys +import tarfile +import requests +from .utils import app_dir, read_json, convert +# import datetime + + +class Prakriya(): + """Generate a prakriya class. + + + Example + ------- + + To use prakriya in a project:: + + >>> from prakriya import Prakriya + >>> p = Prakriya() + + If you are using the library the first time, be patient. + This will take a long time, because the data file (30 MB) is being downloaded. + + If you can spare around 600 MB space, + it is highly recommended to decompress the tar.gz first time. + Subsequent actions will be very fast. This is one time requirement. + If the data is not decompressed, the code will read from tar.gz file every time. + It introduces slowness to a great extent. So highly recommended to decompress. + + >>> p.decompress() + + Now you are ready to roll! + + The generic format for usage is as follows: + + >>> p.get_info(verbform, field) + + ``verbform`` is mandatory. It is the verb form to be investigated. + The input should be in SLP1 encoding. + + ``field`` is optional. + + Actual usage examples will be like the following. + + >>> p.get_info('Bavati') + >>> p.get_info('Bavati', 'prakriya') + >>> p.get_info('Bavati', 'verb') + + + Valid values of ``field`` and expected output are as follows. + + ``prakriya`` - Return step by step derivation. + + ``verb`` - Return verb in Devanagari without accent marks. + + ``verbaccent`` - Return the verb in Devanagari with accent marks. + + ``lakara`` - Return the lakAra (tense / mood) in which this form is generated. + + ``gana`` - Return the gaNa (class) of the verb. + + ``meaning`` - Return meaning of the verb in SLP1 transliteration. + + ``number`` - Return number of the verb in dhAtupATha. + + ``madhaviya`` - Return link to mAdhaviyadhAtuvRtti. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``kshiratarangini`` - Return link to kSIrataraGgiNI. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``dhatupradipa`` - Return link to dhAtupradIpa. + http://sanskrit.uohyd.ac.in/scl/dhaatupaatha is the home page. + + ``jnu`` - Return link to JNU site for this verb form. + http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp is the home page. + + ``uohyd`` - Return link to UoHyd site for this verb form. + http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi is the home page. + + ``upasarga`` - Return upasarga, if any. + Currently we do not support verb forms with upasargas. + + ``padadecider_id`` - Return the rule number which decides whether the verb is + parasmaipadI, AtmanepadI or ubhayapadI. + + ``padadecider_sutra`` - Return the rule text which decides whether the verb is + parasmaipadI, AtmanepadI or ubhayapadI. + + ``it_id`` - Returns whether the verb is seT, aniT or veT, provided the form has iDAgama. + + ``it_status`` - Returns whether the verb form has iDAgama or not. + seT, veT, aniT are the output. + + ``it_sutra`` - Returns rule number if iDAgama is caused by some special rule. + + ``purusha`` - Returns the purusha of the given verb form. + + ``vachana`` - Returns the vacana of the given verb form. + + + transliteration + --------------- + + If you want to set the input or output transliteration, follow these steps. + + >>> from prakriya import Prakriya + >>> p = Prakriya() + >>> p.input_translit('hk') # Customize 'hk' + >>> p.output_translit('devanagari') # Customize 'devanagari' + >>> p.get_info('bhavati') # Input in HK and output in Devanagari. + >>> p.input_translit('devanagari') + >>> p.output_translit('iast') + >>> p.get_info('गच्छति') # Input in Devanagari and output in IAST. + + Valid transliterations are slp1, itrans, hk, iast, devanagari, wx, bengali, + gujarati, gurmukhi, kannada, malayalam, oriya and telugu. + They can be used both as input transliteration and output transliteration. + """ + + def __init__(self): + """Start the class. Decompress tar file if asked for.""" + # Find the directory of the module. + self.appdir = app_dir('prakriya') + # Path where to store the file + self.filename = 'composite_v003.tar.gz' + self.tarfile = os.path.join(self.appdir, 'composite_v003.tar.gz') + self.intran = 'slp1' + self.outtran = 'slp1' + # If the file does not exist, download from Github. + if not os.path.exists(self.appdir): + os.makedirs(self.appdir) + os.makedirs(os.path.join(self.appdir, 'json')) + # Download tar.gz data file + download_from_github(self.appdir, 'composite_v003.tar.gz') + self.tar = tarfile.open(self.tarfile, 'r:gz') + # keep only first thee letters from verbform + download_from_github(self.appdir, 'jsonindex.json') + self.jsonindex = read_json(os.path.join(self.appdir, 'jsonindex.json')) + # Read sutrainfo file. This is needed to convert sutra_num to sutra_text. + download_from_github(self.appdir, 'sutrainfo.json') + self.sutrainfo = read_json(os.path.join(self.appdir, 'sutrainfo.json')) + self.json_cache = {} + + def decompress(self): + """Decompress the tar file if user asks for it.""" + self.tar.extractall(self.appdir) + print("data files extracted.") + print("You shall not need to use decompress() function again.") + print("Just do regular `p = Prakriya()`.") + + def input_translit(self, tran): + """Set input transliteration.""" + # If valid transliteration, set transliteration. + if tran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'velthuis', + 'wx', 'kolkata', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu', 'tamil']: + self.intran = tran + # If not valid, throw error. + else: + print('Error. Not a valid transliteration scheme.') + exit(0) + + def output_translit(self, tran): + """Set output transliteration.""" + # If valid transliteration, set transliteration. + if tran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'velthuis', + 'wx', 'kolkata', 'bengali', 'gujarati', 'gurmukhi', + 'kannada', 'malayalam', 'oriya', 'telugu', 'tamil']: + self.outtran = tran + # If not valid, throw error. + else: + print('Error. Not a valid transliteration scheme.') + exit(0) + + def get_data(self, verbform, tar, intran='slp1', outtran='slp1'): + """Get whole data from the json file for given verb form.""" + # Find the parent directory + slugname = self.jsonindex[verbform[:3]] + # path of json file. + json_in = os.path.join(self.appdir, 'json', slugname + '.json') + extract_from_tar(tar, json_in, slugname, self.appdir) + compositedata = read_json(json_in) + # Keep only the data related to inquired verbform. + data = compositedata[verbform] + # Return results + return storeresult(data, intran, outtran, self.sutrainfo) + + def __getitem__(self, items): + """Return the requested data by user.""" + # Initiate without arguments + argument = '' + # print(datetime.datetime.now()) + # If there is only one entry in items, it is treated as verbform. + if isinstance(items, ("".__class__, u"".__class__)): + verbform = items + # Otherwise, first is verbform and the next is argument1. + else: + verbform = items[0] + if len(items) > 1: + argument = items[1] + # Convert verbform from desired input transliteration to SLP1. + if sys.version_info[0] < 3: + verbform = verbform.decode('utf-8') + verbform = convert(verbform, self.intran, 'slp1') + # Read from tar.gz file. + data = self.get_data(verbform, self.tar, 'slp1', self.outtran) + # If there is no argument, return whole data. + if argument == '': + result = data + # Else, keep only the data related to the provided argument. + else: + result = keep_specific(data, argument) + # print(datetime.datetime.now()) + # Return the result. + return result + + def get_info(self, verbform, field='prakriya'): + """Return the data requested by user.""" + items = [verbform, field] + return self.__getitem__(items) + + +def convertible(argument): + """Returns whether the item is convertible to Devanagari or not.""" + result = False + if argument in set(['verb', 'lakara', 'gana', 'meaning', 'upasarga', + 'padadecider_id', 'padadecider_sutra', 'suffix', + 'it_status', 'it_sutra', 'it_id', 'vachana', + 'purusha']): + result = True + return result + + +def extract_from_tar(tar, filename, slugname, appdir): + """Extracts a file from given tar object and places in the outdir.""" + if not os.path.isfile(filename): + member = tar.getmember('json/' + slugname + '.json') + tar.extract(member, appdir) + + +def storeresult(data, intran, outtran, sutrainfo): + """Store the result with necessary transliteration conversions.""" + # Initialize empty result stack. + result = [] + # For each possible derivation leading to the given verb form + # e.g. baBUva can be from BU, asa~ + for datum in data: + # Initialize a subresult stack as dict. + # key will be argument and value will be data. + subresult = {} + # Start a list for derivation. It needs special treatment. + derivationlist = [] + # For each key, + for item in datum: + # if not in these two + if item not in ['derivation']: + tmp = datum[item] + # correct the wrong anusvAra in SLP1 to correct one. + tmp = tmp.replace('!', '~') + # Store in subresult dict. + if convertible(item): + subresult[item] = convert(tmp, intran, outtran) + else: + subresult[item] = tmp + # derivation is a list (as compared to others which are strings.) + elif item == 'derivation': + # For member of the list + for member in datum['derivation']: + # Fetch sutratext + sutratext = sutrainfo[member['sutra_num']] + sutratext = convert(sutratext, intran, outtran) + # Replace tilde with hyphen. + # Otherwise wrong transliteration will happen. + sutranum = member['sutra_num'].replace('~', '-') + # sutranum = convert(sutranum, intran, outtran) + # A decent representation for rutva. + form = member['form'].replace('@', 'u~') + form = convert(form, intran, outtran) + # Add to derivationlist. + derivationlist.append({'sutra': sutratext, + 'sutra_num': sutranum, 'form': form}) + # Add the derivationlist to the prakriya key. + subresult['prakriya'] = derivationlist + # Append subresult to result and start again. + result.append(subresult) + # Give result. + return result + + +def keep_specific(data, argument): + """Create a list of only the relavent argument.""" + return [member[argument] for member in data] + + +def download_from_github(appdir, filename): + """Download specific data file from Github release page.""" + if not os.path.isfile(os.path.join(appdir, filename)): + print('downloading ' + filename) + url = 'https://github.com/drdhaval2785/python-prakriya/releases/download/v0.0.2/' + filename + with open(os.path.join(appdir, filename), "wb") as fin: + ret = requests.get(url) + fin.write(ret.content) + print('downloaded ' + filename) diff --git a/requirements_dev.txt b/requirements_dev.txt index 30b43d3..557c3a3 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,13 +1,13 @@ -pip>=18.1 -bumpversion>=0.5.3 -wheel>=0.32.3 -watchdog>=0.9.0 -flake8>=3.6.0 -tox>=3.5.3 -coverage>=4.5.2 -Sphinx>=1.8.2 -cryptography>=2.4.2 -PyYAML>=3.13 -click>=7.0 -indic_transliteration==1.7.4 -coveralls>=1.2.0 +pip>=18.1 +bumpversion>=0.5.3 +wheel>=0.32.3 +watchdog>=0.9.0 +flake8>=3.6.0 +tox>=3.5.3 +coverage>=4.5.2 +Sphinx>=1.8.2 +cryptography>=2.4.2 +PyYAML>=3.13 +click>=7.0 +indic_transliteration==1.9.4 +coveralls>=1.2.0 diff --git a/requirements_docs.txt b/requirements_docs.txt index 8933663..8b56925 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -1,4 +1,4 @@ -click>=6.7 -indic_transliteration==1.7.4 -coveralls>=1.2.0 -sphinx-click>=1.4.1 +click>=6.7 +indic_transliteration==1.9.4 +coveralls>=1.2.0 +sphinx-click>=1.4.1 diff --git a/setup.cfg b/setup.cfg index 9c909c8..9a7cb89 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,21 +1,21 @@ -[bumpversion] -current_version = 0.2.0 -commit = True -tag = True - -[bumpversion:file:setup.py] -search = version='{current_version}' -replace = version='{new_version}' - -[bumpversion:file:prakriya/__init__.py] -search = __version__ = '{current_version}' -replace = __version__ = '{new_version}' - -[bdist_wheel] -universal = 1 - -[flake8] -exclude = docs - -[aliases] -# Define setup.py command aliases here +[bumpversion] +current_version = 0.2.0 +commit = True +tag = True + +[bumpversion:file:setup.py] +search = version='{current_version}' +replace = version='{new_version}' + +[bumpversion:file:prakriya/__init__.py] +search = __version__ = '{current_version}' +replace = __version__ = '{new_version}' + +[bdist_wheel] +universal = 1 + +[flake8] +exclude = docs + +[aliases] +# Define setup.py command aliases here diff --git a/setup.py b/setup.py index 385e9ae..22eb41b 100644 --- a/setup.py +++ b/setup.py @@ -1,63 +1,63 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"""The setup script.""" - -from setuptools import setup, find_packages - -with open('README.rst') as readme_file: - readme = readme_file.read() - -with open('HISTORY.rst') as history_file: - history = history_file.read() - -requirements = [ - 'Click>=6.0', - 'requests', - 'indic-transliteration' -] - -setup_requirements = [] - -test_requirements = [] - -setup( - name='prakriya', - version='0.2.1', - description="prakriya is a package to derive information about given Sanskrit verb form.", - long_description=readme + '\n\n' + history, - author="Dr. Dhaval Patel", - author_email='drdhaval2785@gmail.com', - url='https://github.com/drdhaval2785/python-prakriya', - packages=find_packages(include=['prakriya'], - exclude=['docs', 'tests', 'scrap']), - entry_points={ - 'console_scripts': [ - 'prakriya=prakriya.cli:main', - 'generate=prakriya.cli:generate' - ] - }, - include_package_data=True, - package_data={ - 'prakriya': ['data/sutrainfo.json'] - }, - install_requires=requirements, - license="GNU General Public License v3", - zip_safe=False, - keywords='prakriya,panini,Sanskrit,grammar,tinanta', - classifiers=[ - 'Development Status :: 2 - Pre-Alpha', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', - "Programming Language :: Python :: 2", - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.4', - ], - test_suite='tests', - tests_require=test_requirements, - setup_requires=setup_requirements, -) +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""The setup script.""" + +from setuptools import setup, find_packages + +with open('README.rst') as readme_file: + readme = readme_file.read() + +with open('HISTORY.rst') as history_file: + history = history_file.read() + +requirements = [ + 'Click>=6.0', + 'requests', + 'indic-transliteration' +] + +setup_requirements = [] + +test_requirements = [] + +setup( + name='prakriya', + version='0.2.1', + description="prakriya is a package to derive information about given Sanskrit verb form.", + long_description=readme + '\n\n' + history, + author="Dr. Dhaval Patel", + author_email='drdhaval2785@gmail.com', + url='https://github.com/drdhaval2785/python-prakriya', + packages=find_packages(include=['prakriya'], + exclude=['docs', 'tests', 'scrap']), + entry_points={ + 'console_scripts': [ + 'prakriya=prakriya.cli:main', + 'generate=prakriya.cli:generate' + ] + }, + include_package_data=True, + package_data={ + 'prakriya': ['data/sutrainfo.json'] + }, + install_requires=requirements, + license="GNU General Public License v3", + zip_safe=False, + keywords='prakriya,panini,Sanskrit,grammar,tinanta', + classifiers=[ + 'Development Status :: 2 - Pre-Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + "Programming Language :: Python :: 2", + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.4', + ], + test_suite='tests', + tests_require=test_requirements, + setup_requires=setup_requirements, +) diff --git a/tests/__init__.py b/tests/__init__.py index 5b8ae2b..a1fc024 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,3 +1,3 @@ -# -*- coding: utf-8 -*- - -"""Unit test package for prakriya.""" +# -*- coding: utf-8 -*- + +"""Unit test package for prakriya.""" diff --git a/tests/test_prakriya.py b/tests/test_prakriya.py index ba92f43..658f7e1 100644 --- a/tests/test_prakriya.py +++ b/tests/test_prakriya.py @@ -1,225 +1,225 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"""Tests for `prakriya` package.""" - - -import unittest -import json -import os.path -from click.testing import CliRunner -from prakriya import Prakriya, VerbFormGenerator -from prakriya import cli - - -def read_json(path): - """Read the given JSON file into python object.""" - with open(path, 'r') as fin: - return json.load(fin) - - -def comparetranslit(verbform, intran, outtran, arguments=''): - """Compare the transliteration conversion from prestored data.""" - prak = Prakriya() - prak.input_translit(intran) - prak.output_translit(outtran) - calculated = prak.get_info(verbform, arguments) - superdata = read_json(os.path.join('tests', 'testdata', 'Bavati.json')) - wholedata = superdata[outtran] - if arguments == '': - assert calculated == wholedata - else: - result = [member[arguments] for member in wholedata] - assert calculated == result - - -class TestPrakriya(unittest.TestCase): - """Tests for `prakriya` package.""" - - def test_setup(self): - """Set up test fixtures, if any.""" - prak = Prakriya() - prak.decompress() - print(prak['Bavati']) - - def test_false_input(self): - """Test for false input transliteration.""" - prak = Prakriya() - with self.assertRaises(SystemExit): - prak.input_translit('asdfasdf') - - def test_false_output(self): - """Test for false output transliteration.""" - prak = Prakriya() - with self.assertRaises(SystemExit): - prak.output_translit('fdasfdas') - - def test_bhavati(self): - """Test somethingen.""" - for (verbform, intran) in [('Bavati', 'slp1'), ('ഭവതി', 'malayalam'), - ('భవతి', 'telugu'), ('bhavati', 'iast'), - ('भवति', 'devanagari'), ('Bavawi', 'wx'), - ('ભવતિ', 'gujarati'), ('bhavati', 'itrans'), - ('ଭଵତି', 'oriya'), ('ಭವತಿ', 'kannada'), - ('bhavati', 'hk'), ('ভবতি', 'bengali'), - ('ਭਵਤਿ', 'gurmukhi')]: - for outtran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'wx', - 'bengali', 'gujarati', 'gurmukhi', 'kannada', - 'malayalam', 'oriya', 'telugu']: - print('Testing ' + intran + ' ' + outtran) - comparetranslit(verbform, intran, outtran) - comparetranslit(verbform, intran, outtran, 'prakriya') - comparetranslit(verbform, intran, outtran, 'verb') - comparetranslit(verbform, intran, outtran, 'verbaccent') - comparetranslit(verbform, intran, outtran, 'lakara') - comparetranslit(verbform, intran, outtran, 'gana') - comparetranslit(verbform, intran, outtran, 'meaning') - comparetranslit(verbform, intran, outtran, 'number') - comparetranslit(verbform, intran, outtran, 'madhaviya') - comparetranslit(verbform, intran, outtran, 'kshiratarangini') - comparetranslit(verbform, intran, outtran, 'dhatupradipa') - comparetranslit(verbform, intran, outtran, 'jnu') - comparetranslit(verbform, intran, outtran, 'uohyd') - comparetranslit(verbform, intran, outtran, 'upasarga') - comparetranslit(verbform, intran, outtran, 'padadecider_id') - comparetranslit(verbform, intran, outtran, 'padadecider_sutra') - comparetranslit(verbform, intran, outtran, 'it_id') - comparetranslit(verbform, intran, outtran, 'it_status') - comparetranslit(verbform, intran, outtran, 'it_sutra') - comparetranslit(verbform, intran, outtran, 'purusha') - comparetranslit(verbform, intran, outtran, 'vachana') - - def test_command_line_interface(self): - """Test the CLI.""" - runner = CliRunner() - result = runner.invoke(cli.main, ['Bavati', 'prakriya']) - assert result.exit_code == 0 - assert 'BUvAdayo DAtavaH' in result.output - help_result = runner.invoke(cli.main, ['--help']) - assert help_result.exit_code == 0 - assert 'Show this message and exit.' in help_result.output - result1 = runner.invoke(cli.generate, ['BU', 'law', 'praTama', 'eka']) - assert result1.exit_code == 0 - assert 'Bavati' in result1.output - - def test_generate(self): - """Test generation class.""" - gen = VerbFormGenerator() - assert(gen['BU', 'law', 'praTama', 'eka'] == {u'10.0277': [ - u'BAvayate'], u'10.0382': [u'BAvayate'], u'01.0001': [u'Bavati']}) - assert(gen['BU', 'law', 'praTama', 'dvi'] == {u'10.0277': [ - u'BAvayete'], u'10.0382': [u'BAvayete'], u'01.0001': [u'BavataH']}) - assert(gen['BU', 'law', 'praTama', 'bahu'] == {u'10.0277': [ - u'BAvayante'], u'10.0382': [u'BAvayante'], u'01.0001': [u'Bavanti']}) - assert(gen['BU', 'law', 'maDyama', 'eka'] == {u'10.0277': [ - u'BAvayase'], u'10.0382': [u'BAvayase'], u'01.0001': [u'Bavasi']}) - assert(gen['BU', 'law', 'maDyama', 'dvi'] == {u'10.0277': [ - u'BAvayeTe'], u'10.0382': [u'BAvayeTe'], u'01.0001': [u'BavaTaH']}) - assert(gen['BU', 'law', 'maDyama', 'bahu'] == {u'10.0277': [ - u'BAvayaDve'], u'10.0382': [u'BAvayaDve'], u'01.0001': [u'BavaTa']}) - assert(gen['BU', 'law', 'uttama', 'eka'] == {u'10.0277': [ - u'BAvaye'], u'10.0382': [u'BAvaye'], u'01.0001': [u'BavAmi']}) - assert(gen['BU', 'law', 'uttama', 'dvi'] == {u'10.0277': [ - u'BAvayAvahe'], u'10.0382': [u'BAvayAvahe'], u'01.0001': [u'BavAvaH']}) - assert(gen['BU', 'law', 'uttama', 'bahu'] == {u'10.0277': [ - u'BAvayAmahe'], u'10.0382': [u'BAvayAmahe'], u'01.0001': [u'BavAmaH']}) - assert(gen['BU', 'low', 'tip'] == {u'10.0277': [u'BAvayatu', u'BAvayatAt'], u'10.0382': [ - u'BAvayatu', u'BAvayatAt'], u'01.0001': [u'Bavatu', u'BavatAt']}) - assert(gen['BU', 'low', 'tas'] == {u'10.0277': [u'BAvayatAm'], u'10.0382': [ - u'BAvayatAm'], u'01.0001': [u'BavatAm']}) - assert(gen['BU', 'low', 'Ji'] == {u'10.0277': [u'BAvayantu'], u'10.0382': [ - u'BAvayantu'], u'01.0001': [u'Bavantu']}) - assert(gen['BU', 'low', 'sip'] == {u'10.0277': [u'BAvaya', u'BAvayatAt'], u'10.0382': [ - u'BAvaya', u'BAvayatAt'], u'01.0001': [u'Bava', u'BavatAt']}) - assert(gen['BU', 'low', 'Tas'] == {u'10.0277': [u'BAvayatam'], u'10.0382': [ - u'BAvayatam'], u'01.0001': [u'Bavatam']}) - assert(gen['BU', 'low', 'Ta'] == {u'10.0277': [u'BAvayata'], u'10.0382': [ - u'BAvayata'], u'01.0001': [u'Bavata']}) - assert(gen['BU', 'low', 'mip'] == {u'10.0277': [ - u'BAvayAni'], u'10.0382': [u'BAvayAni'], u'01.0001': [u'BavAni']}) - assert(gen['BU', 'low', 'vas'] == {u'10.0277': [ - u'BAvayAva'], u'10.0382': [u'BAvayAva'], u'01.0001': [u'BavAva']}) - assert(gen['BU', 'low', 'mas'] == {u'10.0277': [ - u'BAvayAma'], u'10.0382': [u'BAvayAma'], u'01.0001': [u'BavAma']}) - # Test for stripped verbs. - assert(gen['eD', 'lfw', 'Ja'] == {u'01.0002': [u'eDizyante']}) - - # Tests changed to use getforms function - assert(gen.getforms('BU', 'law', 'praTama', 'eka') == {u'10.0277': [ - u'BAvayate'], u'10.0382': [u'BAvayate'], u'01.0001': [u'Bavati']}) - assert(gen.getforms('BU', 'law', 'praTama', 'dvi') == {u'10.0277': [ - u'BAvayete'], u'10.0382': [u'BAvayete'], u'01.0001': [u'BavataH']}) - assert(gen.getforms('BU', 'law', 'praTama', 'bahu') == {u'10.0277': [ - u'BAvayante'], u'10.0382': [u'BAvayante'], u'01.0001': [u'Bavanti']}) - assert(gen.getforms('BU', 'law', 'maDyama', 'eka') == {u'10.0277': [ - u'BAvayase'], u'10.0382': [u'BAvayase'], u'01.0001': [u'Bavasi']}) - assert(gen.getforms('BU', 'law', 'maDyama', 'dvi') == {u'10.0277': [ - u'BAvayeTe'], u'10.0382': [u'BAvayeTe'], u'01.0001': [u'BavaTaH']}) - assert(gen.getforms('BU', 'law', 'maDyama', 'bahu') == {u'10.0277': [ - u'BAvayaDve'], u'10.0382': [u'BAvayaDve'], u'01.0001': [u'BavaTa']}) - assert(gen.getforms('BU', 'law', 'uttama', 'eka') == {u'10.0277': [ - u'BAvaye'], u'10.0382': [u'BAvaye'], u'01.0001': [u'BavAmi']}) - assert(gen.getforms('BU', 'law', 'uttama', 'dvi') == {u'10.0277': [ - u'BAvayAvahe'], u'10.0382': [u'BAvayAvahe'], u'01.0001': [u'BavAvaH']}) - assert(gen.getforms('BU', 'law', 'uttama', 'bahu') == {u'10.0277': [ - u'BAvayAmahe'], u'10.0382': [u'BAvayAmahe'], u'01.0001': [u'BavAmaH']}) - assert(gen.getforms('BU', 'low', suffix='tip') == {u'10.0277': [u'BAvayatu', u'BAvayatAt'], u'10.0382': [ - u'BAvayatu', u'BAvayatAt'], u'01.0001': [u'Bavatu', u'BavatAt']}) - assert(gen.getforms('BU', 'low', suffix='tas') == {u'10.0277': [ - u'BAvayatAm'], u'10.0382': [u'BAvayatAm'], u'01.0001': [u'BavatAm']}) - assert(gen.getforms('BU', 'low', suffix='Ji') == {u'10.0277': [ - u'BAvayantu'], u'10.0382': [u'BAvayantu'], u'01.0001': [u'Bavantu']}) - assert(gen.getforms('BU', 'low', suffix='sip') == {u'10.0277': [u'BAvaya', u'BAvayatAt'], u'10.0382': [ - u'BAvaya', u'BAvayatAt'], u'01.0001': [u'Bava', u'BavatAt']}) - assert(gen.getforms('BU', 'low', suffix='Tas') == {u'10.0277': [ - u'BAvayatam'], u'10.0382': [u'BAvayatam'], u'01.0001': [u'Bavatam']}) - assert(gen.getforms('BU', 'low', suffix='Ta') == {u'10.0277': [ - u'BAvayata'], u'10.0382': [u'BAvayata'], u'01.0001': [u'Bavata']}) - assert(gen.getforms('BU', 'low', suffix='mip') == {u'10.0277': [ - u'BAvayAni'], u'10.0382': [u'BAvayAni'], u'01.0001': [u'BavAni']}) - assert(gen.getforms('BU', 'low', suffix='vas') == {u'10.0277': [ - u'BAvayAva'], u'10.0382': [u'BAvayAva'], u'01.0001': [u'BavAva']}) - assert(gen.getforms('BU', 'low', suffix='mas') == {u'10.0277': [ - u'BAvayAma'], u'10.0382': [u'BAvayAma'], u'01.0001': [u'BavAma']}) - # Test for stripped verbs. - assert(gen.getforms('eD', 'lfw', suffix='Ja') - == {u'01.0002': [u'eDizyante']}) - - def test_generate_without_suffix(self): - """Test without suffix.""" - gen = VerbFormGenerator() - assert '01.0002' in gen['eD', 'law'] - assert '01.0001' in gen['BU', 'low'] - assert '01.0001' in gen['BU'] - assert '01.0002' in gen.getforms('eD', suffix='law') - assert '01.0001' in gen.getforms('BU', suffix='low') - assert '01.0001' in gen.getforms('BU') - - def test_generate_translit(self): - """Test with HK as input and itrans as output.""" - gen = VerbFormGenerator() - gen.input_translit('hk') - gen.output_translit('itrans') - assert(gen['bhU', 'laT', 'jhi'] == {u'01.0001': [u'bhavanti'], u'10.0382': [ - u'bhAvayanti'], u'10.0277': [u'bhAvayanti']}) - assert(gen.getforms('bhU', 'laT', suffix='jhi') == {u'01.0001': [ - u'bhavanti'], u'10.0382': [u'bhAvayanti'], u'10.0277': [u'bhAvayanti']}) - - def test_false_in(self): - """Test for false input transliteration.""" - gen = VerbFormGenerator() - with self.assertRaises(SystemExit): - gen.input_translit('asdfasdf') - - def test_false_out(self): - """Test for false output transliteration.""" - gen = VerbFormGenerator() - with self.assertRaises(SystemExit): - gen.output_translit('fdasfdas') - - def test_wrong_verb(self): - """Test for verb absent in database.""" - gen = VerbFormGenerator() - with self.assertRaises(SystemExit): - # gen['adsfasdf', 'tip'] - gen.getforms('adsfasdf', suffix='tip') +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for `prakriya` package.""" + + +import unittest +import json +import os.path +from click.testing import CliRunner +from prakriya import Prakriya, VerbFormGenerator +from prakriya import cli + + +def read_json(path): + """Read the given JSON file into python object.""" + with open(path, 'r') as fin: + return json.load(fin) + + +def comparetranslit(verbform, intran, outtran, arguments=''): + """Compare the transliteration conversion from prestored data.""" + prak = Prakriya() + prak.input_translit(intran) + prak.output_translit(outtran) + calculated = prak.get_info(verbform, arguments) + superdata = read_json(os.path.join('tests', 'testdata', 'Bavati.json')) + wholedata = superdata[outtran] + if arguments == '': + assert calculated == wholedata + else: + result = [member[arguments] for member in wholedata] + assert calculated == result + + +class TestPrakriya(unittest.TestCase): + """Tests for `prakriya` package.""" + + def test_setup(self): + """Set up test fixtures, if any.""" + prak = Prakriya() + prak.decompress() + print(prak['Bavati']) + + def test_false_input(self): + """Test for false input transliteration.""" + prak = Prakriya() + with self.assertRaises(SystemExit): + prak.input_translit('asdfasdf') + + def test_false_output(self): + """Test for false output transliteration.""" + prak = Prakriya() + with self.assertRaises(SystemExit): + prak.output_translit('fdasfdas') + + def test_bhavati(self): + """Test somethingen.""" + for (verbform, intran) in [('Bavati', 'slp1'), ('ഭവതി', 'malayalam'), + ('భవతి', 'telugu'), ('bhavati', 'iast'), + ('भवति', 'devanagari'), ('Bavawi', 'wx'), + ('ભવતિ', 'gujarati'), ('bhavati', 'itrans'), + ('ଭଵତି', 'oriya'), ('ಭವತಿ', 'kannada'), + ('bhavati', 'hk'), ('ভবতি', 'bengali'), + ('ਭਵਤਿ', 'gurmukhi')]: + for outtran in ['slp1', 'itrans', 'hk', 'iast', 'devanagari', 'wx', + 'bengali', 'gujarati', 'gurmukhi', 'kannada', + 'malayalam', 'oriya', 'telugu']: + print('Testing ' + intran + ' ' + outtran) + comparetranslit(verbform, intran, outtran) + comparetranslit(verbform, intran, outtran, 'prakriya') + comparetranslit(verbform, intran, outtran, 'verb') + comparetranslit(verbform, intran, outtran, 'verbaccent') + comparetranslit(verbform, intran, outtran, 'lakara') + comparetranslit(verbform, intran, outtran, 'gana') + comparetranslit(verbform, intran, outtran, 'meaning') + comparetranslit(verbform, intran, outtran, 'number') + comparetranslit(verbform, intran, outtran, 'madhaviya') + comparetranslit(verbform, intran, outtran, 'kshiratarangini') + comparetranslit(verbform, intran, outtran, 'dhatupradipa') + comparetranslit(verbform, intran, outtran, 'jnu') + comparetranslit(verbform, intran, outtran, 'uohyd') + comparetranslit(verbform, intran, outtran, 'upasarga') + comparetranslit(verbform, intran, outtran, 'padadecider_id') + comparetranslit(verbform, intran, outtran, 'padadecider_sutra') + comparetranslit(verbform, intran, outtran, 'it_id') + comparetranslit(verbform, intran, outtran, 'it_status') + comparetranslit(verbform, intran, outtran, 'it_sutra') + comparetranslit(verbform, intran, outtran, 'purusha') + comparetranslit(verbform, intran, outtran, 'vachana') + + def test_command_line_interface(self): + """Test the CLI.""" + runner = CliRunner() + result = runner.invoke(cli.main, ['Bavati', 'prakriya']) + assert result.exit_code == 0 + assert 'BUvAdayo DAtavaH' in result.output + help_result = runner.invoke(cli.main, ['--help']) + assert help_result.exit_code == 0 + assert 'Show this message and exit.' in help_result.output + result1 = runner.invoke(cli.generate, ['BU', 'law', 'praTama', 'eka']) + assert result1.exit_code == 0 + assert 'Bavati' in result1.output + + def test_generate(self): + """Test generation class.""" + gen = VerbFormGenerator() + assert(gen['BU', 'law', 'praTama', 'eka'] == {u'10.0277': [ + u'BAvayate'], u'10.0382': [u'BAvayate'], u'01.0001': [u'Bavati']}) + assert(gen['BU', 'law', 'praTama', 'dvi'] == {u'10.0277': [ + u'BAvayete'], u'10.0382': [u'BAvayete'], u'01.0001': [u'BavataH']}) + assert(gen['BU', 'law', 'praTama', 'bahu'] == {u'10.0277': [ + u'BAvayante'], u'10.0382': [u'BAvayante'], u'01.0001': [u'Bavanti']}) + assert(gen['BU', 'law', 'maDyama', 'eka'] == {u'10.0277': [ + u'BAvayase'], u'10.0382': [u'BAvayase'], u'01.0001': [u'Bavasi']}) + assert(gen['BU', 'law', 'maDyama', 'dvi'] == {u'10.0277': [ + u'BAvayeTe'], u'10.0382': [u'BAvayeTe'], u'01.0001': [u'BavaTaH']}) + assert(gen['BU', 'law', 'maDyama', 'bahu'] == {u'10.0277': [ + u'BAvayaDve'], u'10.0382': [u'BAvayaDve'], u'01.0001': [u'BavaTa']}) + assert(gen['BU', 'law', 'uttama', 'eka'] == {u'10.0277': [ + u'BAvaye'], u'10.0382': [u'BAvaye'], u'01.0001': [u'BavAmi']}) + assert(gen['BU', 'law', 'uttama', 'dvi'] == {u'10.0277': [ + u'BAvayAvahe'], u'10.0382': [u'BAvayAvahe'], u'01.0001': [u'BavAvaH']}) + assert(gen['BU', 'law', 'uttama', 'bahu'] == {u'10.0277': [ + u'BAvayAmahe'], u'10.0382': [u'BAvayAmahe'], u'01.0001': [u'BavAmaH']}) + assert(gen['BU', 'low', 'tip'] == {u'10.0277': [u'BAvayatu', u'BAvayatAt'], u'10.0382': [ + u'BAvayatu', u'BAvayatAt'], u'01.0001': [u'Bavatu', u'BavatAt']}) + assert(gen['BU', 'low', 'tas'] == {u'10.0277': [u'BAvayatAm'], u'10.0382': [ + u'BAvayatAm'], u'01.0001': [u'BavatAm']}) + assert(gen['BU', 'low', 'Ji'] == {u'10.0277': [u'BAvayantu'], u'10.0382': [ + u'BAvayantu'], u'01.0001': [u'Bavantu']}) + assert(gen['BU', 'low', 'sip'] == {u'10.0277': [u'BAvaya', u'BAvayatAt'], u'10.0382': [ + u'BAvaya', u'BAvayatAt'], u'01.0001': [u'Bava', u'BavatAt']}) + assert(gen['BU', 'low', 'Tas'] == {u'10.0277': [u'BAvayatam'], u'10.0382': [ + u'BAvayatam'], u'01.0001': [u'Bavatam']}) + assert(gen['BU', 'low', 'Ta'] == {u'10.0277': [u'BAvayata'], u'10.0382': [ + u'BAvayata'], u'01.0001': [u'Bavata']}) + assert(gen['BU', 'low', 'mip'] == {u'10.0277': [ + u'BAvayAni'], u'10.0382': [u'BAvayAni'], u'01.0001': [u'BavAni']}) + assert(gen['BU', 'low', 'vas'] == {u'10.0277': [ + u'BAvayAva'], u'10.0382': [u'BAvayAva'], u'01.0001': [u'BavAva']}) + assert(gen['BU', 'low', 'mas'] == {u'10.0277': [ + u'BAvayAma'], u'10.0382': [u'BAvayAma'], u'01.0001': [u'BavAma']}) + # Test for stripped verbs. + assert(gen['eD', 'lfw', 'Ja'] == {u'01.0002': [u'eDizyante']}) + + # Tests changed to use getforms function + assert(gen.getforms('BU', 'law', 'praTama', 'eka') == {u'10.0277': [ + u'BAvayate'], u'10.0382': [u'BAvayate'], u'01.0001': [u'Bavati']}) + assert(gen.getforms('BU', 'law', 'praTama', 'dvi') == {u'10.0277': [ + u'BAvayete'], u'10.0382': [u'BAvayete'], u'01.0001': [u'BavataH']}) + assert(gen.getforms('BU', 'law', 'praTama', 'bahu') == {u'10.0277': [ + u'BAvayante'], u'10.0382': [u'BAvayante'], u'01.0001': [u'Bavanti']}) + assert(gen.getforms('BU', 'law', 'maDyama', 'eka') == {u'10.0277': [ + u'BAvayase'], u'10.0382': [u'BAvayase'], u'01.0001': [u'Bavasi']}) + assert(gen.getforms('BU', 'law', 'maDyama', 'dvi') == {u'10.0277': [ + u'BAvayeTe'], u'10.0382': [u'BAvayeTe'], u'01.0001': [u'BavaTaH']}) + assert(gen.getforms('BU', 'law', 'maDyama', 'bahu') == {u'10.0277': [ + u'BAvayaDve'], u'10.0382': [u'BAvayaDve'], u'01.0001': [u'BavaTa']}) + assert(gen.getforms('BU', 'law', 'uttama', 'eka') == {u'10.0277': [ + u'BAvaye'], u'10.0382': [u'BAvaye'], u'01.0001': [u'BavAmi']}) + assert(gen.getforms('BU', 'law', 'uttama', 'dvi') == {u'10.0277': [ + u'BAvayAvahe'], u'10.0382': [u'BAvayAvahe'], u'01.0001': [u'BavAvaH']}) + assert(gen.getforms('BU', 'law', 'uttama', 'bahu') == {u'10.0277': [ + u'BAvayAmahe'], u'10.0382': [u'BAvayAmahe'], u'01.0001': [u'BavAmaH']}) + assert(gen.getforms('BU', 'low', suffix='tip') == {u'10.0277': [u'BAvayatu', u'BAvayatAt'], u'10.0382': [ + u'BAvayatu', u'BAvayatAt'], u'01.0001': [u'Bavatu', u'BavatAt']}) + assert(gen.getforms('BU', 'low', suffix='tas') == {u'10.0277': [ + u'BAvayatAm'], u'10.0382': [u'BAvayatAm'], u'01.0001': [u'BavatAm']}) + assert(gen.getforms('BU', 'low', suffix='Ji') == {u'10.0277': [ + u'BAvayantu'], u'10.0382': [u'BAvayantu'], u'01.0001': [u'Bavantu']}) + assert(gen.getforms('BU', 'low', suffix='sip') == {u'10.0277': [u'BAvaya', u'BAvayatAt'], u'10.0382': [ + u'BAvaya', u'BAvayatAt'], u'01.0001': [u'Bava', u'BavatAt']}) + assert(gen.getforms('BU', 'low', suffix='Tas') == {u'10.0277': [ + u'BAvayatam'], u'10.0382': [u'BAvayatam'], u'01.0001': [u'Bavatam']}) + assert(gen.getforms('BU', 'low', suffix='Ta') == {u'10.0277': [ + u'BAvayata'], u'10.0382': [u'BAvayata'], u'01.0001': [u'Bavata']}) + assert(gen.getforms('BU', 'low', suffix='mip') == {u'10.0277': [ + u'BAvayAni'], u'10.0382': [u'BAvayAni'], u'01.0001': [u'BavAni']}) + assert(gen.getforms('BU', 'low', suffix='vas') == {u'10.0277': [ + u'BAvayAva'], u'10.0382': [u'BAvayAva'], u'01.0001': [u'BavAva']}) + assert(gen.getforms('BU', 'low', suffix='mas') == {u'10.0277': [ + u'BAvayAma'], u'10.0382': [u'BAvayAma'], u'01.0001': [u'BavAma']}) + # Test for stripped verbs. + assert(gen.getforms('eD', 'lfw', suffix='Ja') == {u'01.0002': [ + u'eDizyante']}) + + def test_generate_without_suffix(self): + """Test without suffix.""" + gen = VerbFormGenerator() + assert '01.0002' in gen['eD', 'law'] + assert '01.0001' in gen['BU', 'low'] + assert '01.0001' in gen['BU'] + assert '01.0002' in gen.getforms('eD', suffix='law') + assert '01.0001' in gen.getforms('BU', suffix='low') + assert '01.0001' in gen.getforms('BU') + + def test_generate_translit(self): + """Test with HK as input and itrans as output.""" + gen = VerbFormGenerator() + gen.input_translit('hk') + gen.output_translit('itrans') + assert(gen['bhU', 'laT', 'jhi'] == {u'01.0001': [u'bhavanti'], u'10.0382': [ + u'bhAvayanti'], u'10.0277': [u'bhAvayanti']}) + assert(gen.getforms('bhU', 'laT', suffix='jhi') == {u'01.0001': [ + u'bhavanti'], u'10.0382': [u'bhAvayanti'], u'10.0277': [u'bhAvayanti']}) + + def test_false_in(self): + """Test for false input transliteration.""" + gen = VerbFormGenerator() + with self.assertRaises(SystemExit): + gen.input_translit('asdfasdf') + + def test_false_out(self): + """Test for false output transliteration.""" + gen = VerbFormGenerator() + with self.assertRaises(SystemExit): + gen.output_translit('fdasfdas') + + def test_wrong_verb(self): + """Test for verb absent in database.""" + gen = VerbFormGenerator() + with self.assertRaises(SystemExit): + # gen['adsfasdf', 'tip'] + gen.getforms('adsfasdf', suffix='tip') diff --git a/tests/testdata/Bavati.json b/tests/testdata/Bavati.json index b64bd4c..6a2cc0e 100644 --- a/tests/testdata/Bavati.json +++ b/tests/testdata/Bavati.json @@ -1 +1 @@ -{"malayalam": [{"gana": "\u0d2d\u0d4d\u0d35\u0d3e\u0d26\u0d3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0d2a\u0d30\u0d38\u0d4d\u0d2e\u0d48\u0d2a\u0d26\u0d40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0d2d\u0d42\u0d35\u0d3e\u0d26\u0d2f\u0d4b \u0d27\u0d3e\u0d24\u0d35\u0d03", "sutra_num": "1.3.1", "form": "\u0d2d\u0d42"}, {"sutra": "\u0d32\u0d03 \u0d15\u0d30\u0d4d\u0d2e\u0d23\u0d3f \u0d1a \u0d2d\u0d3e\u0d35\u0d47 \u0d1a\u0d3e\u0d15\u0d30\u0d4d\u0d2e\u0d15\u0d47\u0d2d\u0d4d\u0d2f\u0d03\u0964", "sutra_num": "3.4.69", "form": "\u0d2d\u0d42"}, {"sutra": "\u0d35\u0d30\u0d4d\u0d24\u0d2e\u0d3e\u0d28\u0d47 \u0d32\u0d1f\u0d4d", "sutra_num": "3.2.123", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d32\u0d38\u0d4d\u0d2f", "sutra_num": "3.4.77", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d39\u0d32\u0d28\u0d4d\u0d24\u0d4d\u0d2f\u0d2e\u0d4d", "sutra_num": "1.3.3", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d32\u0901"}, {"sutra": "\u0d09\u0d2a\u0d26\u0d47\u0d36\u0d47\u0d3d\u0d1c\u0d28\u0d41\u0d28\u0d3e\u0d38\u0d3f\u0d15 \u0d07\u0d24\u0d4d", "sutra_num": "1.3.2", "form": "\u0d2d\u0d42+\u0d32\u0901"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d32\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d2a\u0d4d\u0d24\u0d38\u0d4d\u0d1d\u0d3f\u0d38\u0d3f\u0d2a\u0d4d\u0d25\u0d38\u0d4d\u0d25\u0d2e\u0d3f\u0d2c\u0d4d\u0d35\u0d38\u0d4d\u0d2e\u0d38\u0d4d \u0d24\u0d3e\u0d24\u0d3e\u0d02\u0d1d\u0d25\u0d3e\u0d38\u0d3e\u0d25\u0d3e\u0d02\u0d27\u0d4d\u0d35\u0d2e\u0d3f\u0d21\u0d4d\u0d35\u0d39\u0d3f\u0d2e\u0d39\u0d3f\u0d19\u0d4d", "sutra_num": "3.4.78", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d32\u0d03 \u0d2a\u0d30\u0d38\u0d4d\u0d2e\u0d48\u0d2a\u0d26\u0d2e\u0d4d", "sutra_num": "1.4.99", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d38\u0d4d\u0d24\u0d4d\u0d30\u0d40\u0d23\u0d3f \u0d24\u0d4d\u0d30\u0d40\u0d23\u0d3f \u0d2a\u0d4d\u0d30\u0d25\u0d2e\u0d2e\u0d27\u0d4d\u0d2f\u0d2e\u0d4b\u0d24\u0d4d\u0d24\u0d2e\u0d3e\u0d03", "sutra_num": "1.4.101", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3e\u0d28\u0d4d\u0d2f\u0d47\u0d15\u0d35\u0d1a\u0d28\u0d26\u0d4d\u0d35\u0d3f\u0d35\u0d1a\u0d28\u0d2c\u0d39\u0d41\u0d35\u0d1a\u0d28\u0d3e\u0d28\u0d4d\u0d2f\u0d47\u0d15\u0d36\u0d03", "sutra_num": "1.4.102", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d36\u0d47\u0d37\u0d47 \u0d2a\u0d4d\u0d30\u0d25\u0d2e\u0d03", "sutra_num": "1.4.108", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d4d\u0d36\u0d3f\u0d24\u0d4d\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2e\u0d4d", "sutra_num": "3.4.113", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d15\u0d30\u0d4d\u0d24\u0d30\u0d3f \u0d36\u0d2a\u0d4d\u200c", "sutra_num": "3.1.68", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d4d\u0d36\u0d3f\u0d24\u0d4d\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2e\u0d4d", "sutra_num": "3.4.113", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d32\u0d36\u0d15\u0d4d\u0d35\u0d24\u0d26\u0d4d\u0d27\u0d3f\u0d24\u0d47", "sutra_num": "1.3.8", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d05\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d39\u0d32\u0d28\u0d4d\u0d24\u0d4d\u0d2f\u0d2e\u0d4d", "sutra_num": "1.3.3", "form": "\u0d2d\u0d42+\u0d05\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d3e\u0d30\u0d4d\u0d27\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2f\u0d4b\u0d03", "sutra_num": "7.3.84", "form": "\u0d2d\u0d4b+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d0f\u0d1a\u0d4b\u0d3d\u0d2f\u0d35\u0d3e\u0d2f\u0d3e\u0d35\u0d03", "sutra_num": "6.1.78", "form": "\u0d2d\u0d35\u0d4d+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d05\u0d28\u0d4d\u0d24\u0d3f\u0d2e\u0d02 \u0d30\u0d42\u0d2a\u0d2e\u0d4d", "sutra_num": "-2", "form": "\u0d2d\u0d35\u0d24\u0d3f"}], "number": "01.0001", "vachana": "\u0d0f\u0d15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0d2d\u0d42", "purusha": "\u0d2a\u0d4d\u0d30\u0d25\u0d2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0d32\u0d1f\u0d4d", "it_id": "", "it_sutra": "", "meaning": "\u0d38\u0d24\u0d4d\u0d24\u0d3e\u0d2f\u0d3e\u0d2e\u0d4d", "suffix": "\u0d24\u0d3f\u0d2a\u0d4d"}], "telugu": [{"gana": "\u0c2d\u0c4d\u0c35\u0c3e\u0c26\u0c3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0c2a\u0c30\u0c38\u0c4d\u0c2e\u0c48\u0c2a\u0c26\u0c40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0c2d\u0c42\u0c35\u0c3e\u0c26\u0c2f\u0c4b \u0c27\u0c3e\u0c24\u0c35\u0c03", "sutra_num": "1.3.1", "form": "\u0c2d\u0c42"}, {"sutra": "\u0c32\u0c03 \u0c15\u0c30\u0c4d\u0c2e\u0c23\u0c3f \u0c1a \u0c2d\u0c3e\u0c35\u0c47 \u0c1a\u0c3e\u0c15\u0c30\u0c4d\u0c2e\u0c15\u0c47\u0c2d\u0c4d\u0c2f\u0c03\u0964", "sutra_num": "3.4.69", "form": "\u0c2d\u0c42"}, {"sutra": "\u0c35\u0c30\u0c4d\u0c24\u0c2e\u0c3e\u0c28\u0c47 \u0c32\u0c1f\u0c4d", "sutra_num": "3.2.123", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c32\u0c38\u0c4d\u0c2f", "sutra_num": "3.4.77", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c39\u0c32\u0c28\u0c4d\u0c24\u0c4d\u0c2f\u0c2e\u0c4d", "sutra_num": "1.3.3", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c32\u0c01"}, {"sutra": "\u0c09\u0c2a\u0c26\u0c47\u0c36\u0c47\u0c3d\u0c1c\u0c28\u0c41\u0c28\u0c3e\u0c38\u0c3f\u0c15 \u0c07\u0c24\u0c4d", "sutra_num": "1.3.2", "form": "\u0c2d\u0c42+\u0c32\u0c01"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c32\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c2a\u0c4d\u0c24\u0c38\u0c4d\u0c1d\u0c3f\u0c38\u0c3f\u0c2a\u0c4d\u0c25\u0c38\u0c4d\u0c25\u0c2e\u0c3f\u0c2c\u0c4d\u0c35\u0c38\u0c4d\u0c2e\u0c38\u0c4d \u0c24\u0c3e\u0c24\u0c3e\u0c02\u0c1d\u0c25\u0c3e\u0c38\u0c3e\u0c25\u0c3e\u0c02\u0c27\u0c4d\u0c35\u0c2e\u0c3f\u0c21\u0c4d\u0c35\u0c39\u0c3f\u0c2e\u0c39\u0c3f\u0c19\u0c4d", "sutra_num": "3.4.78", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c32\u0c03 \u0c2a\u0c30\u0c38\u0c4d\u0c2e\u0c48\u0c2a\u0c26\u0c2e\u0c4d", "sutra_num": "1.4.99", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c38\u0c4d\u0c24\u0c4d\u0c30\u0c40\u0c23\u0c3f \u0c24\u0c4d\u0c30\u0c40\u0c23\u0c3f \u0c2a\u0c4d\u0c30\u0c25\u0c2e\u0c2e\u0c27\u0c4d\u0c2f\u0c2e\u0c4b\u0c24\u0c4d\u0c24\u0c2e\u0c3e\u0c03", "sutra_num": "1.4.101", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3e\u0c28\u0c4d\u0c2f\u0c47\u0c15\u0c35\u0c1a\u0c28\u0c26\u0c4d\u0c35\u0c3f\u0c35\u0c1a\u0c28\u0c2c\u0c39\u0c41\u0c35\u0c1a\u0c28\u0c3e\u0c28\u0c4d\u0c2f\u0c47\u0c15\u0c36\u0c03", "sutra_num": "1.4.102", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c36\u0c47\u0c37\u0c47 \u0c2a\u0c4d\u0c30\u0c25\u0c2e\u0c03", "sutra_num": "1.4.108", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c4d\u0c36\u0c3f\u0c24\u0c4d\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2e\u0c4d", "sutra_num": "3.4.113", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c15\u0c30\u0c4d\u0c24\u0c30\u0c3f \u0c36\u0c2a\u0c4d\u200c", "sutra_num": "3.1.68", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c4d\u0c36\u0c3f\u0c24\u0c4d\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2e\u0c4d", "sutra_num": "3.4.113", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c32\u0c36\u0c15\u0c4d\u0c35\u0c24\u0c26\u0c4d\u0c27\u0c3f\u0c24\u0c47", "sutra_num": "1.3.8", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c05\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c39\u0c32\u0c28\u0c4d\u0c24\u0c4d\u0c2f\u0c2e\u0c4d", "sutra_num": "1.3.3", "form": "\u0c2d\u0c42+\u0c05\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c3e\u0c30\u0c4d\u0c27\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2f\u0c4b\u0c03", "sutra_num": "7.3.84", "form": "\u0c2d\u0c4b+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c0f\u0c1a\u0c4b\u0c3d\u0c2f\u0c35\u0c3e\u0c2f\u0c3e\u0c35\u0c03", "sutra_num": "6.1.78", "form": "\u0c2d\u0c35\u0c4d+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c05\u0c28\u0c4d\u0c24\u0c3f\u0c2e\u0c02 \u0c30\u0c42\u0c2a\u0c2e\u0c4d", "sutra_num": "-2", "form": "\u0c2d\u0c35\u0c24\u0c3f"}], "number": "01.0001", "vachana": "\u0c0f\u0c15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0c2d\u0c42", "purusha": "\u0c2a\u0c4d\u0c30\u0c25\u0c2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0c32\u0c1f\u0c4d", "it_id": "", "it_sutra": "", "meaning": "\u0c38\u0c24\u0c4d\u0c24\u0c3e\u0c2f\u0c3e\u0c2e\u0c4d", "suffix": "\u0c24\u0c3f\u0c2a\u0c4d"}], "iast": [{"gana": "bhv\u0101di", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipad\u012b", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bh\u016bv\u0101dayo dh\u0101tava\u1e25", "sutra_num": "1.3.1", "form": "bh\u016b"}, {"sutra": "la\u1e25 karma\u1e47i ca bh\u0101ve c\u0101karmakebhya\u1e25\u0964", "sutra_num": "3.4.69", "form": "bh\u016b"}, {"sutra": "vartam\u0101ne la\u1e6d", "sutra_num": "3.2.123", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+lam\u0310"}, {"sutra": "upade\u015be'janun\u0101sika it", "sutra_num": "1.3.2", "form": "bh\u016b+lam\u0310"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+l"}, {"sutra": "tiptasjhisipthasthamibvasmas t\u0101t\u0101\u1e43jhath\u0101s\u0101th\u0101\u1e43dhvami\u1e0dvahimahi\u1e45", "sutra_num": "3.4.78", "form": "bh\u016b+tip"}, {"sutra": "la\u1e25 parasmaipadam", "sutra_num": "1.4.99", "form": "bh\u016b+tip"}, {"sutra": "ti\u1e45astr\u012b\u1e47i tr\u012b\u1e47i prathamamadhyamottam\u0101\u1e25", "sutra_num": "1.4.101", "form": "bh\u016b+tip"}, {"sutra": "t\u0101nyekavacanadvivacanabahuvacan\u0101nyeka\u015ba\u1e25", "sutra_num": "1.4.102", "form": "bh\u016b+tip"}, {"sutra": "\u015be\u1e63e prathama\u1e25", "sutra_num": "1.4.108", "form": "bh\u016b+tip"}, {"sutra": "ti\u1e45\u015bits\u0101rvadh\u0101tukam", "sutra_num": "3.4.113", "form": "bh\u016b+tip"}, {"sutra": "kartari \u015bap\u200c", "sutra_num": "3.1.68", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "ti\u1e45\u015bits\u0101rvadh\u0101tukam", "sutra_num": "3.4.113", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "la\u015bakvataddhite", "sutra_num": "1.3.8", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bh\u016b+ap+tip"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+a+ti"}, {"sutra": "s\u0101rvadh\u0101tuk\u0101rdhadh\u0101tukayo\u1e25", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "eco'yav\u0101y\u0101va\u1e25", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antima\u1e43 r\u016bpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bh\u016b", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "la\u1e6d", "it_id": "", "it_sutra": "", "meaning": "satt\u0101y\u0101m", "suffix": "tip"}], "devanagari": [{"gana": "\u092d\u094d\u0935\u093e\u0926\u093f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u092a\u0930\u0938\u094d\u092e\u0948\u092a\u0926\u0940", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u092d\u0942\u0935\u093e\u0926\u092f\u094b \u0927\u093e\u0924\u0935\u0903", "sutra_num": "1.3.1", "form": "\u092d\u0942"}, {"sutra": "\u0932\u0903 \u0915\u0930\u094d\u092e\u0923\u093f \u091a \u092d\u093e\u0935\u0947 \u091a\u093e\u0915\u0930\u094d\u092e\u0915\u0947\u092d\u094d\u092f\u0903\u0964", "sutra_num": "3.4.69", "form": "\u092d\u0942"}, {"sutra": "\u0935\u0930\u094d\u0924\u092e\u093e\u0928\u0947 \u0932\u091f\u094d", "sutra_num": "3.2.123", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0932\u0938\u094d\u092f", "sutra_num": "3.4.77", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0939\u0932\u0928\u094d\u0924\u094d\u092f\u092e\u094d", "sutra_num": "1.3.3", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0932\u0901"}, {"sutra": "\u0909\u092a\u0926\u0947\u0936\u0947\u093d\u091c\u0928\u0941\u0928\u093e\u0938\u093f\u0915 \u0907\u0924\u094d", "sutra_num": "1.3.2", "form": "\u092d\u0942+\u0932\u0901"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0932\u094d"}, {"sutra": "\u0924\u093f\u092a\u094d\u0924\u0938\u094d\u091d\u093f\u0938\u093f\u092a\u094d\u0925\u0938\u094d\u0925\u092e\u093f\u092c\u094d\u0935\u0938\u094d\u092e\u0938\u094d \u0924\u093e\u0924\u093e\u0902\u091d\u0925\u093e\u0938\u093e\u0925\u093e\u0902\u0927\u094d\u0935\u092e\u093f\u0921\u094d\u0935\u0939\u093f\u092e\u0939\u093f\u0919\u094d", "sutra_num": "3.4.78", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0932\u0903 \u092a\u0930\u0938\u094d\u092e\u0948\u092a\u0926\u092e\u094d", "sutra_num": "1.4.99", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u0938\u094d\u0924\u094d\u0930\u0940\u0923\u093f \u0924\u094d\u0930\u0940\u0923\u093f \u092a\u094d\u0930\u0925\u092e\u092e\u0927\u094d\u092f\u092e\u094b\u0924\u094d\u0924\u092e\u093e\u0903", "sutra_num": "1.4.101", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093e\u0928\u094d\u092f\u0947\u0915\u0935\u091a\u0928\u0926\u094d\u0935\u093f\u0935\u091a\u0928\u092c\u0939\u0941\u0935\u091a\u0928\u093e\u0928\u094d\u092f\u0947\u0915\u0936\u0903", "sutra_num": "1.4.102", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0936\u0947\u0937\u0947 \u092a\u094d\u0930\u0925\u092e\u0903", "sutra_num": "1.4.108", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u094d\u0936\u093f\u0924\u094d\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u092e\u094d", "sutra_num": "3.4.113", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0915\u0930\u094d\u0924\u0930\u093f \u0936\u092a\u094d\u200c", "sutra_num": "3.1.68", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u094d\u0936\u093f\u0924\u094d\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u092e\u094d", "sutra_num": "3.4.113", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0932\u0936\u0915\u094d\u0935\u0924\u0926\u094d\u0927\u093f\u0924\u0947", "sutra_num": "1.3.8", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0905\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0939\u0932\u0928\u094d\u0924\u094d\u092f\u092e\u094d", "sutra_num": "1.3.3", "form": "\u092d\u0942+\u0905\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0905+\u0924\u093f"}, {"sutra": "\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u093e\u0930\u094d\u0927\u0927\u093e\u0924\u0941\u0915\u092f\u094b\u0903", "sutra_num": "7.3.84", "form": "\u092d\u094b+\u0905+\u0924\u093f"}, {"sutra": "\u090f\u091a\u094b\u093d\u092f\u0935\u093e\u092f\u093e\u0935\u0903", "sutra_num": "6.1.78", "form": "\u092d\u0935\u094d+\u0905+\u0924\u093f"}, {"sutra": "\u0905\u0928\u094d\u0924\u093f\u092e\u0902 \u0930\u0942\u092a\u092e\u094d", "sutra_num": "-2", "form": "\u092d\u0935\u0924\u093f"}], "number": "01.0001", "vachana": "\u090f\u0915", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u092d\u0942", "purusha": "\u092a\u094d\u0930\u0925\u092e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0932\u091f\u094d", "it_id": "", "it_sutra": "", "meaning": "\u0938\u0924\u094d\u0924\u093e\u092f\u093e\u092e\u094d", "suffix": "\u0924\u093f\u092a\u094d"}], "gujarati": [{"gana": "\u0aad\u0acd\u0ab5\u0abe\u0aa6\u0abf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0aaa\u0ab0\u0ab8\u0acd\u0aae\u0ac8\u0aaa\u0aa6\u0ac0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0aad\u0ac2\u0ab5\u0abe\u0aa6\u0aaf\u0acb \u0aa7\u0abe\u0aa4\u0ab5\u0a83", "sutra_num": "1.3.1", "form": "\u0aad\u0ac2"}, {"sutra": "\u0ab2\u0a83 \u0a95\u0ab0\u0acd\u0aae\u0aa3\u0abf \u0a9a \u0aad\u0abe\u0ab5\u0ac7 \u0a9a\u0abe\u0a95\u0ab0\u0acd\u0aae\u0a95\u0ac7\u0aad\u0acd\u0aaf\u0a83\u0ae4", "sutra_num": "3.4.69", "form": "\u0aad\u0ac2"}, {"sutra": "\u0ab5\u0ab0\u0acd\u0aa4\u0aae\u0abe\u0aa8\u0ac7 \u0ab2\u0a9f\u0acd", "sutra_num": "3.2.123", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0ab2\u0ab8\u0acd\u0aaf", "sutra_num": "3.4.77", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0ab9\u0ab2\u0aa8\u0acd\u0aa4\u0acd\u0aaf\u0aae\u0acd", "sutra_num": "1.3.3", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0ab2\u0a81"}, {"sutra": "\u0a89\u0aaa\u0aa6\u0ac7\u0ab6\u0ac7\u0abd\u0a9c\u0aa8\u0ac1\u0aa8\u0abe\u0ab8\u0abf\u0a95 \u0a87\u0aa4\u0acd", "sutra_num": "1.3.2", "form": "\u0aad\u0ac2+\u0ab2\u0a81"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0ab2\u0acd"}, {"sutra": "\u0aa4\u0abf\u0aaa\u0acd\u0aa4\u0ab8\u0acd\u0a9d\u0abf\u0ab8\u0abf\u0aaa\u0acd\u0aa5\u0ab8\u0acd\u0aa5\u0aae\u0abf\u0aac\u0acd\u0ab5\u0ab8\u0acd\u0aae\u0ab8\u0acd \u0aa4\u0abe\u0aa4\u0abe\u0a82\u0a9d\u0aa5\u0abe\u0ab8\u0abe\u0aa5\u0abe\u0a82\u0aa7\u0acd\u0ab5\u0aae\u0abf\u0aa1\u0acd\u0ab5\u0ab9\u0abf\u0aae\u0ab9\u0abf\u0a99\u0acd", "sutra_num": "3.4.78", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab2\u0a83 \u0aaa\u0ab0\u0ab8\u0acd\u0aae\u0ac8\u0aaa\u0aa6\u0aae\u0acd", "sutra_num": "1.4.99", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0ab8\u0acd\u0aa4\u0acd\u0ab0\u0ac0\u0aa3\u0abf \u0aa4\u0acd\u0ab0\u0ac0\u0aa3\u0abf \u0aaa\u0acd\u0ab0\u0aa5\u0aae\u0aae\u0aa7\u0acd\u0aaf\u0aae\u0acb\u0aa4\u0acd\u0aa4\u0aae\u0abe\u0a83", "sutra_num": "1.4.101", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abe\u0aa8\u0acd\u0aaf\u0ac7\u0a95\u0ab5\u0a9a\u0aa8\u0aa6\u0acd\u0ab5\u0abf\u0ab5\u0a9a\u0aa8\u0aac\u0ab9\u0ac1\u0ab5\u0a9a\u0aa8\u0abe\u0aa8\u0acd\u0aaf\u0ac7\u0a95\u0ab6\u0a83", "sutra_num": "1.4.102", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab6\u0ac7\u0ab7\u0ac7 \u0aaa\u0acd\u0ab0\u0aa5\u0aae\u0a83", "sutra_num": "1.4.108", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0acd\u0ab6\u0abf\u0aa4\u0acd\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aae\u0acd", "sutra_num": "3.4.113", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0a95\u0ab0\u0acd\u0aa4\u0ab0\u0abf \u0ab6\u0aaa\u0acd\u200c", "sutra_num": "3.1.68", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0acd\u0ab6\u0abf\u0aa4\u0acd\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aae\u0acd", "sutra_num": "3.4.113", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab2\u0ab6\u0a95\u0acd\u0ab5\u0aa4\u0aa6\u0acd\u0aa7\u0abf\u0aa4\u0ac7", "sutra_num": "1.3.8", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0a85\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab9\u0ab2\u0aa8\u0acd\u0aa4\u0acd\u0aaf\u0aae\u0acd", "sutra_num": "1.3.3", "form": "\u0aad\u0ac2+\u0a85\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0abe\u0ab0\u0acd\u0aa7\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aaf\u0acb\u0a83", "sutra_num": "7.3.84", "form": "\u0aad\u0acb+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0a8f\u0a9a\u0acb\u0abd\u0aaf\u0ab5\u0abe\u0aaf\u0abe\u0ab5\u0a83", "sutra_num": "6.1.78", "form": "\u0aad\u0ab5\u0acd+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0a85\u0aa8\u0acd\u0aa4\u0abf\u0aae\u0a82 \u0ab0\u0ac2\u0aaa\u0aae\u0acd", "sutra_num": "-2", "form": "\u0aad\u0ab5\u0aa4\u0abf"}], "number": "01.0001", "vachana": "\u0a8f\u0a95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0aad\u0ac2", "purusha": "\u0aaa\u0acd\u0ab0\u0aa5\u0aae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0ab2\u0a9f\u0acd", "it_id": "", "it_sutra": "", "meaning": "\u0ab8\u0aa4\u0acd\u0aa4\u0abe\u0aaf\u0abe\u0aae\u0acd", "suffix": "\u0aa4\u0abf\u0aaa\u0acd"}], "oriya": [{"gana": "\u0b2d\u0b4d\u0b35\u0b3e\u0b26\u0b3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0b2a\u0b30\u0b38\u0b4d\u0b2e\u0b48\u0b2a\u0b26\u0b40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0b2d\u0b42\u0b35\u0b3e\u0b26\u0b2f\u0b4b \u0b27\u0b3e\u0b24\u0b35\u0b03", "sutra_num": "1.3.1", "form": "\u0b2d\u0b42"}, {"sutra": "\u0b32\u0b03 \u0b15\u0b30\u0b4d\u0b2e\u0b23\u0b3f \u0b1a \u0b2d\u0b3e\u0b35\u0b47 \u0b1a\u0b3e\u0b15\u0b30\u0b4d\u0b2e\u0b15\u0b47\u0b2d\u0b4d\u0b2f\u0b03\u0964", "sutra_num": "3.4.69", "form": "\u0b2d\u0b42"}, {"sutra": "\u0b35\u0b30\u0b4d\u0b24\u0b2e\u0b3e\u0b28\u0b47 \u0b32\u0b1f\u0b4d", "sutra_num": "3.2.123", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b32\u0b38\u0b4d\u0b2f", "sutra_num": "3.4.77", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b39\u0b32\u0b28\u0b4d\u0b24\u0b4d\u0b2f\u0b2e\u0b4d", "sutra_num": "1.3.3", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b32\u0b01"}, {"sutra": "\u0b09\u0b2a\u0b26\u0b47\u0b36\u0b47\u0b3d\u0b1c\u0b28\u0b41\u0b28\u0b3e\u0b38\u0b3f\u0b15 \u0b07\u0b24\u0b4d", "sutra_num": "1.3.2", "form": "\u0b2d\u0b42+\u0b32\u0b01"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b32\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b2a\u0b4d\u0b24\u0b38\u0b4d\u0b1d\u0b3f\u0b38\u0b3f\u0b2a\u0b4d\u0b25\u0b38\u0b4d\u0b25\u0b2e\u0b3f\u0b2c\u0b4d\u0b35\u0b38\u0b4d\u0b2e\u0b38\u0b4d \u0b24\u0b3e\u0b24\u0b3e\u0b02\u0b1d\u0b25\u0b3e\u0b38\u0b3e\u0b25\u0b3e\u0b02\u0b27\u0b4d\u0b35\u0b2e\u0b3f\u0b21\u0b4d\u0b35\u0b39\u0b3f\u0b2e\u0b39\u0b3f\u0b19\u0b4d", "sutra_num": "3.4.78", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b32\u0b03 \u0b2a\u0b30\u0b38\u0b4d\u0b2e\u0b48\u0b2a\u0b26\u0b2e\u0b4d", "sutra_num": "1.4.99", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b38\u0b4d\u0b24\u0b4d\u0b30\u0b40\u0b23\u0b3f \u0b24\u0b4d\u0b30\u0b40\u0b23\u0b3f \u0b2a\u0b4d\u0b30\u0b25\u0b2e\u0b2e\u0b27\u0b4d\u0b2f\u0b2e\u0b4b\u0b24\u0b4d\u0b24\u0b2e\u0b3e\u0b03", "sutra_num": "1.4.101", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3e\u0b28\u0b4d\u0b2f\u0b47\u0b15\u0b35\u0b1a\u0b28\u0b26\u0b4d\u0b35\u0b3f\u0b35\u0b1a\u0b28\u0b2c\u0b39\u0b41\u0b35\u0b1a\u0b28\u0b3e\u0b28\u0b4d\u0b2f\u0b47\u0b15\u0b36\u0b03", "sutra_num": "1.4.102", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b36\u0b47\u0b37\u0b47 \u0b2a\u0b4d\u0b30\u0b25\u0b2e\u0b03", "sutra_num": "1.4.108", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b4d\u0b36\u0b3f\u0b24\u0b4d\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2e\u0b4d", "sutra_num": "3.4.113", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b15\u0b30\u0b4d\u0b24\u0b30\u0b3f \u0b36\u0b2a\u0b4d\u200c", "sutra_num": "3.1.68", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b4d\u0b36\u0b3f\u0b24\u0b4d\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2e\u0b4d", "sutra_num": "3.4.113", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b32\u0b36\u0b15\u0b4d\u0b35\u0b24\u0b26\u0b4d\u0b27\u0b3f\u0b24\u0b47", "sutra_num": "1.3.8", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b05\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b39\u0b32\u0b28\u0b4d\u0b24\u0b4d\u0b2f\u0b2e\u0b4d", "sutra_num": "1.3.3", "form": "\u0b2d\u0b42+\u0b05\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b3e\u0b30\u0b4d\u0b27\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2f\u0b4b\u0b03", "sutra_num": "7.3.84", "form": "\u0b2d\u0b4b+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b0f\u0b1a\u0b4b\u0b3d\u0b2f\u0b35\u0b3e\u0b2f\u0b3e\u0b35\u0b03", "sutra_num": "6.1.78", "form": "\u0b2d\u0b35\u0b4d+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b05\u0b28\u0b4d\u0b24\u0b3f\u0b2e\u0b02 \u0b30\u0b42\u0b2a\u0b2e\u0b4d", "sutra_num": "-2", "form": "\u0b2d\u0b35\u0b24\u0b3f"}], "number": "01.0001", "vachana": "\u0b0f\u0b15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0b2d\u0b42", "purusha": "\u0b2a\u0b4d\u0b30\u0b25\u0b2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0b32\u0b1f\u0b4d", "it_id": "", "it_sutra": "", "meaning": "\u0b38\u0b24\u0b4d\u0b24\u0b3e\u0b2f\u0b3e\u0b2e\u0b4d", "suffix": "\u0b24\u0b3f\u0b2a\u0b4d"}], "kannada": [{"gana": "\u0cad\u0ccd\u0cb5\u0cbe\u0ca6\u0cbf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0caa\u0cb0\u0cb8\u0ccd\u0cae\u0cc8\u0caa\u0ca6\u0cc0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0cad\u0cc2\u0cb5\u0cbe\u0ca6\u0caf\u0ccb \u0ca7\u0cbe\u0ca4\u0cb5\u0c83", "sutra_num": "1.3.1", "form": "\u0cad\u0cc2"}, {"sutra": "\u0cb2\u0c83 \u0c95\u0cb0\u0ccd\u0cae\u0ca3\u0cbf \u0c9a \u0cad\u0cbe\u0cb5\u0cc7 \u0c9a\u0cbe\u0c95\u0cb0\u0ccd\u0cae\u0c95\u0cc7\u0cad\u0ccd\u0caf\u0c83\u0964", "sutra_num": "3.4.69", "form": "\u0cad\u0cc2"}, {"sutra": "\u0cb5\u0cb0\u0ccd\u0ca4\u0cae\u0cbe\u0ca8\u0cc7 \u0cb2\u0c9f\u0ccd", "sutra_num": "3.2.123", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0cb2\u0cb8\u0ccd\u0caf", "sutra_num": "3.4.77", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0cb9\u0cb2\u0ca8\u0ccd\u0ca4\u0ccd\u0caf\u0cae\u0ccd", "sutra_num": "1.3.3", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0cb2\u0901"}, {"sutra": "\u0c89\u0caa\u0ca6\u0cc7\u0cb6\u0cc7\u093d\u0c9c\u0ca8\u0cc1\u0ca8\u0cbe\u0cb8\u0cbf\u0c95 \u0c87\u0ca4\u0ccd", "sutra_num": "1.3.2", "form": "\u0cad\u0cc2+\u0cb2\u0901"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0cb2\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0caa\u0ccd\u0ca4\u0cb8\u0ccd\u0c9d\u0cbf\u0cb8\u0cbf\u0caa\u0ccd\u0ca5\u0cb8\u0ccd\u0ca5\u0cae\u0cbf\u0cac\u0ccd\u0cb5\u0cb8\u0ccd\u0cae\u0cb8\u0ccd \u0ca4\u0cbe\u0ca4\u0cbe\u0c82\u0c9d\u0ca5\u0cbe\u0cb8\u0cbe\u0ca5\u0cbe\u0c82\u0ca7\u0ccd\u0cb5\u0cae\u0cbf\u0ca1\u0ccd\u0cb5\u0cb9\u0cbf\u0cae\u0cb9\u0cbf\u0c99\u0ccd", "sutra_num": "3.4.78", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb2\u0c83 \u0caa\u0cb0\u0cb8\u0ccd\u0cae\u0cc8\u0caa\u0ca6\u0cae\u0ccd", "sutra_num": "1.4.99", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0cb8\u0ccd\u0ca4\u0ccd\u0cb0\u0cc0\u0ca3\u0cbf \u0ca4\u0ccd\u0cb0\u0cc0\u0ca3\u0cbf \u0caa\u0ccd\u0cb0\u0ca5\u0cae\u0cae\u0ca7\u0ccd\u0caf\u0cae\u0ccb\u0ca4\u0ccd\u0ca4\u0cae\u0cbe\u0c83", "sutra_num": "1.4.101", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbe\u0ca8\u0ccd\u0caf\u0cc7\u0c95\u0cb5\u0c9a\u0ca8\u0ca6\u0ccd\u0cb5\u0cbf\u0cb5\u0c9a\u0ca8\u0cac\u0cb9\u0cc1\u0cb5\u0c9a\u0ca8\u0cbe\u0ca8\u0ccd\u0caf\u0cc7\u0c95\u0cb6\u0c83", "sutra_num": "1.4.102", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb6\u0cc7\u0cb7\u0cc7 \u0caa\u0ccd\u0cb0\u0ca5\u0cae\u0c83", "sutra_num": "1.4.108", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0ccd\u0cb6\u0cbf\u0ca4\u0ccd\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cae\u0ccd", "sutra_num": "3.4.113", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0c95\u0cb0\u0ccd\u0ca4\u0cb0\u0cbf \u0cb6\u0caa\u0ccd\u200c", "sutra_num": "3.1.68", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0ccd\u0cb6\u0cbf\u0ca4\u0ccd\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cae\u0ccd", "sutra_num": "3.4.113", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb2\u0cb6\u0c95\u0ccd\u0cb5\u0ca4\u0ca6\u0ccd\u0ca7\u0cbf\u0ca4\u0cc7", "sutra_num": "1.3.8", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0c85\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb9\u0cb2\u0ca8\u0ccd\u0ca4\u0ccd\u0caf\u0cae\u0ccd", "sutra_num": "1.3.3", "form": "\u0cad\u0cc2+\u0c85\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cbe\u0cb0\u0ccd\u0ca7\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0caf\u0ccb\u0c83", "sutra_num": "7.3.84", "form": "\u0cad\u0ccb+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0c8f\u0c9a\u0ccb\u093d\u0caf\u0cb5\u0cbe\u0caf\u0cbe\u0cb5\u0c83", "sutra_num": "6.1.78", "form": "\u0cad\u0cb5\u0ccd+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0c85\u0ca8\u0ccd\u0ca4\u0cbf\u0cae\u0c82 \u0cb0\u0cc2\u0caa\u0cae\u0ccd", "sutra_num": "-2", "form": "\u0cad\u0cb5\u0ca4\u0cbf"}], "number": "01.0001", "vachana": "\u0c8f\u0c95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0cad\u0cc2", "purusha": "\u0caa\u0ccd\u0cb0\u0ca5\u0cae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0cb2\u0c9f\u0ccd", "it_id": "", "it_sutra": "", "meaning": "\u0cb8\u0ca4\u0ccd\u0ca4\u0cbe\u0caf\u0cbe\u0cae\u0ccd", "suffix": "\u0ca4\u0cbf\u0caa\u0ccd"}], "hk": [{"gana": "bhvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bhUvAdayo dhAtavaH", "sutra_num": "1.3.1", "form": "bhU"}, {"sutra": "laH karmaNi ca bhAve cAkarmakebhyaH.", "sutra_num": "3.4.69", "form": "bhU"}, {"sutra": "vartamAne laT", "sutra_num": "3.2.123", "form": "bhU+la~T"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bhU+la~T"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+la~T"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+la~"}, {"sutra": "upadeze'janunAsika it", "sutra_num": "1.3.2", "form": "bhU+la~"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+l"}, {"sutra": "tiptasjhisipthasthamibvasmas tAtAMjhathAsAthAMdhvamiDvahimahiG", "sutra_num": "3.4.78", "form": "bhU+tip"}, {"sutra": "laH parasmaipadam", "sutra_num": "1.4.99", "form": "bhU+tip"}, {"sutra": "tiGastrINi trINi prathamamadhyamottamAH", "sutra_num": "1.4.101", "form": "bhU+tip"}, {"sutra": "tAnyekavacanadvivacanabahuvacanAnyekazaH", "sutra_num": "1.4.102", "form": "bhU+tip"}, {"sutra": "zeSe prathamaH", "sutra_num": "1.4.108", "form": "bhU+tip"}, {"sutra": "tiGzitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+tip"}, {"sutra": "kartari zap\u200c", "sutra_num": "3.1.68", "form": "bhU+zap+tip"}, {"sutra": "tiGzitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+zap+tip"}, {"sutra": "lazakvataddhite", "sutra_num": "1.3.8", "form": "bhU+zap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+a+ti"}, {"sutra": "sArvadhAtukArdhadhAtukayoH", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bhU", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "laT", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "bengali": [{"gana": "\u09ad\u09cd\u09ac\u09be\u09a6\u09bf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u09aa\u09b0\u09b8\u09cd\u09ae\u09c8\u09aa\u09a6\u09c0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u09ad\u09c2\u09ac\u09be\u09a6\u09af\u09cb \u09a7\u09be\u09a4\u09ac\u0983", "sutra_num": "1.3.1", "form": "\u09ad\u09c2"}, {"sutra": "\u09b2\u0983 \u0995\u09b0\u09cd\u09ae\u09a3\u09bf \u099a \u09ad\u09be\u09ac\u09c7 \u099a\u09be\u0995\u09b0\u09cd\u09ae\u0995\u09c7\u09ad\u09cd\u09af\u0983\u0964", "sutra_num": "3.4.69", "form": "\u09ad\u09c2"}, {"sutra": "\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09b2\u099f\u09cd", "sutra_num": "3.2.123", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09b2\u09b8\u09cd\u09af", "sutra_num": "3.4.77", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09b9\u09b2\u09a8\u09cd\u09a4\u09cd\u09af\u09ae\u09cd", "sutra_num": "1.3.3", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u09b2\u0981"}, {"sutra": "\u0989\u09aa\u09a6\u09c7\u09b6\u09c7\u09bd\u099c\u09a8\u09c1\u09a8\u09be\u09b8\u09bf\u0995 \u0987\u09a4\u09cd", "sutra_num": "1.3.2", "form": "\u09ad\u09c2+\u09b2\u0981"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u09b2\u09cd"}, {"sutra": "\u09a4\u09bf\u09aa\u09cd\u09a4\u09b8\u09cd\u099d\u09bf\u09b8\u09bf\u09aa\u09cd\u09a5\u09b8\u09cd\u09a5\u09ae\u09bf\u09ac\u09cd\u09ac\u09b8\u09cd\u09ae\u09b8\u09cd \u09a4\u09be\u09a4\u09be\u0982\u099d\u09a5\u09be\u09b8\u09be\u09a5\u09be\u0982\u09a7\u09cd\u09ac\u09ae\u09bf\u09a1\u09cd\u09ac\u09b9\u09bf\u09ae\u09b9\u09bf\u0999\u09cd", "sutra_num": "3.4.78", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b2\u0983 \u09aa\u09b0\u09b8\u09cd\u09ae\u09c8\u09aa\u09a6\u09ae\u09cd", "sutra_num": "1.4.99", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09b8\u09cd\u09a4\u09cd\u09b0\u09c0\u09a3\u09bf \u09a4\u09cd\u09b0\u09c0\u09a3\u09bf \u09aa\u09cd\u09b0\u09a5\u09ae\u09ae\u09a7\u09cd\u09af\u09ae\u09cb\u09a4\u09cd\u09a4\u09ae\u09be\u0983", "sutra_num": "1.4.101", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09be\u09a8\u09cd\u09af\u09c7\u0995\u09ac\u099a\u09a8\u09a6\u09cd\u09ac\u09bf\u09ac\u099a\u09a8\u09ac\u09b9\u09c1\u09ac\u099a\u09a8\u09be\u09a8\u09cd\u09af\u09c7\u0995\u09b6\u0983", "sutra_num": "1.4.102", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b6\u09c7\u09b7\u09c7 \u09aa\u09cd\u09b0\u09a5\u09ae\u0983", "sutra_num": "1.4.108", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09cd\u09b6\u09bf\u09a4\u09cd\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09ae\u09cd", "sutra_num": "3.4.113", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u0995\u09b0\u09cd\u09a4\u09b0\u09bf \u09b6\u09aa\u09cd\u200c", "sutra_num": "3.1.68", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09cd\u09b6\u09bf\u09a4\u09cd\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09ae\u09cd", "sutra_num": "3.4.113", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b2\u09b6\u0995\u09cd\u09ac\u09a4\u09a6\u09cd\u09a7\u09bf\u09a4\u09c7", "sutra_num": "1.3.8", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u0985\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b9\u09b2\u09a8\u09cd\u09a4\u09cd\u09af\u09ae\u09cd", "sutra_num": "1.3.3", "form": "\u09ad\u09c2+\u0985\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u0985+\u09a4\u09bf"}, {"sutra": "\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09be\u09b0\u09cd\u09a7\u09a7\u09be\u09a4\u09c1\u0995\u09af\u09cb\u0983", "sutra_num": "7.3.84", "form": "\u09ad\u09cb+\u0985+\u09a4\u09bf"}, {"sutra": "\u098f\u099a\u09cb\u09bd\u09af\u09ac\u09be\u09af\u09be\u09ac\u0983", "sutra_num": "6.1.78", "form": "\u09ad\u09ac\u09cd+\u0985+\u09a4\u09bf"}, {"sutra": "\u0985\u09a8\u09cd\u09a4\u09bf\u09ae\u0982 \u09b0\u09c2\u09aa\u09ae\u09cd", "sutra_num": "-2", "form": "\u09ad\u09ac\u09a4\u09bf"}], "number": "01.0001", "vachana": "\u098f\u0995", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u09ad\u09c2", "purusha": "\u09aa\u09cd\u09b0\u09a5\u09ae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u09b2\u099f\u09cd", "it_id": "", "it_sutra": "", "meaning": "\u09b8\u09a4\u09cd\u09a4\u09be\u09af\u09be\u09ae\u09cd", "suffix": "\u09a4\u09bf\u09aa\u09cd"}], "gurmukhi": [{"gana": "\u0a2d\u0a4d\u0a35\u0a3e\u0a26\u0a3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0a2a\u0a30\u0a38\u0a4d\u0a2e\u0a48\u0a2a\u0a26\u0a40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0a2d\u0a42\u0a35\u0a3e\u0a26\u0a2f\u0a4b \u0a27\u0a3e\u0a24\u0a35\u0a03", "sutra_num": "1.3.1", "form": "\u0a2d\u0a42"}, {"sutra": "\u0a32\u0a03 \u0a15\u0a30\u0a4d\u0a2e\u0a23\u0a3f \u0a1a \u0a2d\u0a3e\u0a35\u0a47 \u0a1a\u0a3e\u0a15\u0a30\u0a4d\u0a2e\u0a15\u0a47\u0a2d\u0a4d\u0a2f\u0a03\u0964", "sutra_num": "3.4.69", "form": "\u0a2d\u0a42"}, {"sutra": "\u0a35\u0a30\u0a4d\u0a24\u0a2e\u0a3e\u0a28\u0a47 \u0a32\u0a1f\u0a4d", "sutra_num": "3.2.123", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a32\u0a38\u0a4d\u0a2f", "sutra_num": "3.4.77", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a39\u0a32\u0a28\u0a4d\u0a24\u0a4d\u0a2f\u0a2e\u0a4d", "sutra_num": "1.3.3", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a32\u0a01"}, {"sutra": "\u0a09\u0a2a\u0a26\u0a47\u0a36\u0a47\u093d\u0a1c\u0a28\u0a41\u0a28\u0a3e\u0a38\u0a3f\u0a15 \u0a07\u0a24\u0a4d", "sutra_num": "1.3.2", "form": "\u0a2d\u0a42+\u0a32\u0a01"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a32\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a2a\u0a4d\u0a24\u0a38\u0a4d\u0a1d\u0a3f\u0a38\u0a3f\u0a2a\u0a4d\u0a25\u0a38\u0a4d\u0a25\u0a2e\u0a3f\u0a2c\u0a4d\u0a35\u0a38\u0a4d\u0a2e\u0a38\u0a4d \u0a24\u0a3e\u0a24\u0a3e\u0a02\u0a1d\u0a25\u0a3e\u0a38\u0a3e\u0a25\u0a3e\u0a02\u0a27\u0a4d\u0a35\u0a2e\u0a3f\u0a21\u0a4d\u0a35\u0a39\u0a3f\u0a2e\u0a39\u0a3f\u0a19\u0a4d", "sutra_num": "3.4.78", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a32\u0a03 \u0a2a\u0a30\u0a38\u0a4d\u0a2e\u0a48\u0a2a\u0a26\u0a2e\u0a4d", "sutra_num": "1.4.99", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a38\u0a4d\u0a24\u0a4d\u0a30\u0a40\u0a23\u0a3f \u0a24\u0a4d\u0a30\u0a40\u0a23\u0a3f \u0a2a\u0a4d\u0a30\u0a25\u0a2e\u0a2e\u0a27\u0a4d\u0a2f\u0a2e\u0a4b\u0a24\u0a4d\u0a24\u0a2e\u0a3e\u0a03", "sutra_num": "1.4.101", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3e\u0a28\u0a4d\u0a2f\u0a47\u0a15\u0a35\u0a1a\u0a28\u0a26\u0a4d\u0a35\u0a3f\u0a35\u0a1a\u0a28\u0a2c\u0a39\u0a41\u0a35\u0a1a\u0a28\u0a3e\u0a28\u0a4d\u0a2f\u0a47\u0a15\u0a36\u0a03", "sutra_num": "1.4.102", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a36\u0a47\u0a36\u0a47 \u0a2a\u0a4d\u0a30\u0a25\u0a2e\u0a03", "sutra_num": "1.4.108", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a4d\u0a36\u0a3f\u0a24\u0a4d\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2e\u0a4d", "sutra_num": "3.4.113", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a15\u0a30\u0a4d\u0a24\u0a30\u0a3f \u0a36\u0a2a\u0a4d\u200c", "sutra_num": "3.1.68", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a4d\u0a36\u0a3f\u0a24\u0a4d\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2e\u0a4d", "sutra_num": "3.4.113", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a32\u0a36\u0a15\u0a4d\u0a35\u0a24\u0a26\u0a4d\u0a27\u0a3f\u0a24\u0a47", "sutra_num": "1.3.8", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a05\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a39\u0a32\u0a28\u0a4d\u0a24\u0a4d\u0a2f\u0a2e\u0a4d", "sutra_num": "1.3.3", "form": "\u0a2d\u0a42+\u0a05\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a3e\u0a30\u0a4d\u0a27\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2f\u0a4b\u0a03", "sutra_num": "7.3.84", "form": "\u0a2d\u0a4b+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a0f\u0a1a\u0a4b\u093d\u0a2f\u0a35\u0a3e\u0a2f\u0a3e\u0a35\u0a03", "sutra_num": "6.1.78", "form": "\u0a2d\u0a35\u0a4d+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a05\u0a28\u0a4d\u0a24\u0a3f\u0a2e\u0a02 \u0a30\u0a42\u0a2a\u0a2e\u0a4d", "sutra_num": "-2", "form": "\u0a2d\u0a35\u0a24\u0a3f"}], "number": "01.0001", "vachana": "\u0a0f\u0a15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0a2d\u0a42", "purusha": "\u0a2a\u0a4d\u0a30\u0a25\u0a2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0a32\u0a1f\u0a4d", "it_id": "", "it_sutra": "", "meaning": "\u0a38\u0a24\u0a4d\u0a24\u0a3e\u0a2f\u0a3e\u0a2e\u0a4d", "suffix": "\u0a24\u0a3f\u0a2a\u0a4d"}], "slp1": [{"gana": "BvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmEpadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "BUvAdayo DAtavaH", "sutra_num": "1.3.1", "form": "BU"}, {"sutra": "laH karmaRi ca BAve cAkarmakeByaH.", "sutra_num": "3.4.69", "form": "BU"}, {"sutra": "vartamAne law", "sutra_num": "3.2.123", "form": "BU+la~w"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "BU+la~w"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "BU+la~w"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+la~"}, {"sutra": "upadeSe'janunAsika it", "sutra_num": "1.3.2", "form": "BU+la~"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+l"}, {"sutra": "tiptasJisipTasTamibvasmas tAtAMJaTAsATAMDvamiqvahimahiN", "sutra_num": "3.4.78", "form": "BU+tip"}, {"sutra": "laH parasmEpadam", "sutra_num": "1.4.99", "form": "BU+tip"}, {"sutra": "tiNastrIRi trIRi praTamamaDyamottamAH", "sutra_num": "1.4.101", "form": "BU+tip"}, {"sutra": "tAnyekavacanadvivacanabahuvacanAnyekaSaH", "sutra_num": "1.4.102", "form": "BU+tip"}, {"sutra": "Seze praTamaH", "sutra_num": "1.4.108", "form": "BU+tip"}, {"sutra": "tiNSitsArvaDAtukam", "sutra_num": "3.4.113", "form": "BU+tip"}, {"sutra": "kartari Sap\u200c", "sutra_num": "3.1.68", "form": "BU+Sap+tip"}, {"sutra": "tiNSitsArvaDAtukam", "sutra_num": "3.4.113", "form": "BU+Sap+tip"}, {"sutra": "laSakvatadDite", "sutra_num": "1.3.8", "form": "BU+Sap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "BU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+a+ti"}, {"sutra": "sArvaDAtukArDaDAtukayoH", "sutra_num": "7.3.84", "form": "Bo+a+ti"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "Bav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "Bavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "BU", "purusha": "praTama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "law", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "itrans": [{"gana": "bhvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bhUvAdayo dhAtavaH", "sutra_num": "1.3.1", "form": "bhU"}, {"sutra": "laH karmaNi cha bhAve chAkarmakebhyaH.", "sutra_num": "3.4.69", "form": "bhU"}, {"sutra": "vartamAne laT", "sutra_num": "3.2.123", "form": "bhU+la.NT"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bhU+la.NT"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+la.NT"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+la.N"}, {"sutra": "upadeshe.ajanunAsika it", "sutra_num": "1.3.2", "form": "bhU+la.N"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+l"}, {"sutra": "tiptasjhisipthasthamibvasmas tAtAMjhathAsAthAMdhvamiDvahimahi~N", "sutra_num": "3.4.78", "form": "bhU+tip"}, {"sutra": "laH parasmaipadam", "sutra_num": "1.4.99", "form": "bhU+tip"}, {"sutra": "ti~NastrINi trINi prathamamadhyamottamAH", "sutra_num": "1.4.101", "form": "bhU+tip"}, {"sutra": "tAnyekavachanadvivachanabahuvachanAnyekashaH", "sutra_num": "1.4.102", "form": "bhU+tip"}, {"sutra": "sheShe prathamaH", "sutra_num": "1.4.108", "form": "bhU+tip"}, {"sutra": "ti~NshitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+tip"}, {"sutra": "kartari shap\u200c", "sutra_num": "3.1.68", "form": "bhU+shap+tip"}, {"sutra": "ti~NshitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+shap+tip"}, {"sutra": "lashakvataddhite", "sutra_num": "1.3.8", "form": "bhU+shap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+a+ti"}, {"sutra": "sArvadhAtukArdhadhAtukayoH", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "echo.ayavAyAvaH", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bhU", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "laT", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "tamil": [{"gana": "\u0baa\u0bcd\u0bb5\u0bbe\u0ba4\u0bbf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0baa\u0bb0\u0bb8\u0bcd\u0bae\u0bc8\u0baa\u0ba4\u0bc0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0baa\u0bc2\u0bb5\u0bbe\u0ba4\u0baf\u0bcb \u0ba4\u0bbe\u0ba4\u0bb5\u0b83", "sutra_num": "1.3.1", "form": "\u0baa\u0bc2"}, {"sutra": "\u0bb2\u0b83 \u0b95\u0bb0\u0bcd\u0bae\u0ba3\u0bbf \u0b9a \u0baa\u0bbe\u0bb5\u0bc7 \u0b9a\u0bbe\u0b95\u0bb0\u0bcd\u0bae\u0b95\u0bc7\u0baa\u0bcd\u0baf\u0b83\u0964", "sutra_num": "3.4.69", "form": "\u0baa\u0bc2"}, {"sutra": "\u0bb5\u0bb0\u0bcd\u0ba4\u0bae\u0bbe\u0ba8\u0bc7 \u0bb2\u0b9f\u0bcd", "sutra_num": "3.2.123", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0bb2\u0bb8\u0bcd\u0baf", "sutra_num": "3.4.77", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0bb9\u0bb2\u0ba8\u0bcd\u0ba4\u0bcd\u0baf\u0bae\u0bcd", "sutra_num": "1.3.3", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0bb2\u0901"}, {"sutra": "\u0b89\u0baa\u0ba4\u0bc7\u0bb6\u0bc7\u093d\u0b9c\u0ba8\u0bc1\u0ba8\u0bbe\u0bb8\u0bbf\u0b95 \u0b87\u0ba4\u0bcd", "sutra_num": "1.3.2", "form": "\u0baa\u0bc2+\u0bb2\u0901"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0bb2\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0baa\u0bcd\u0ba4\u0bb8\u0bcd\u0b9a\u0bbf\u0bb8\u0bbf\u0baa\u0bcd\u0ba4\u0bb8\u0bcd\u0ba4\u0bae\u0bbf\u0baa\u0bcd\u0bb5\u0bb8\u0bcd\u0bae\u0bb8\u0bcd \u0ba4\u0bbe\u0ba4\u0bbe\u0b82\u0b9a\u0ba4\u0bbe\u0bb8\u0bbe\u0ba4\u0bbe\u0b82\u0ba4\u0bcd\u0bb5\u0bae\u0bbf\u0b9f\u0bcd\u0bb5\u0bb9\u0bbf\u0bae\u0bb9\u0bbf\u0b99\u0bcd", "sutra_num": "3.4.78", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb2\u0b83 \u0baa\u0bb0\u0bb8\u0bcd\u0bae\u0bc8\u0baa\u0ba4\u0bae\u0bcd", "sutra_num": "1.4.99", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bb8\u0bcd\u0ba4\u0bcd\u0bb0\u0bc0\u0ba3\u0bbf \u0ba4\u0bcd\u0bb0\u0bc0\u0ba3\u0bbf \u0baa\u0bcd\u0bb0\u0ba4\u0bae\u0bae\u0ba4\u0bcd\u0baf\u0bae\u0bcb\u0ba4\u0bcd\u0ba4\u0bae\u0bbe\u0b83", "sutra_num": "1.4.101", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbe\u0ba8\u0bcd\u0baf\u0bc7\u0b95\u0bb5\u0b9a\u0ba8\u0ba4\u0bcd\u0bb5\u0bbf\u0bb5\u0b9a\u0ba8\u0baa\u0bb9\u0bc1\u0bb5\u0b9a\u0ba8\u0bbe\u0ba8\u0bcd\u0baf\u0bc7\u0b95\u0bb6\u0b83", "sutra_num": "1.4.102", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb6\u0bc7\u0bb7\u0bc7 \u0baa\u0bcd\u0bb0\u0ba4\u0bae\u0b83", "sutra_num": "1.4.108", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bcd\u0bb6\u0bbf\u0ba4\u0bcd\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bae\u0bcd", "sutra_num": "3.4.113", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0b95\u0bb0\u0bcd\u0ba4\u0bb0\u0bbf \u0bb6\u0baa\u0bcd\u200c", "sutra_num": "3.1.68", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bcd\u0bb6\u0bbf\u0ba4\u0bcd\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bae\u0bcd", "sutra_num": "3.4.113", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb2\u0bb6\u0b95\u0bcd\u0bb5\u0ba4\u0ba4\u0bcd\u0ba4\u0bbf\u0ba4\u0bc7", "sutra_num": "1.3.8", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0b85\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb9\u0bb2\u0ba8\u0bcd\u0ba4\u0bcd\u0baf\u0bae\u0bcd", "sutra_num": "1.3.3", "form": "\u0baa\u0bc2+\u0b85\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0bb0\u0bcd\u0ba4\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0baf\u0bcb\u0b83", "sutra_num": "7.3.84", "form": "\u0baa\u0bcb+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0b8f\u0b9a\u0bcb\u093d\u0baf\u0bb5\u0bbe\u0baf\u0bbe\u0bb5\u0b83", "sutra_num": "6.1.78", "form": "\u0baa\u0bb5\u0bcd+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0b85\u0ba8\u0bcd\u0ba4\u0bbf\u0bae\u0b82 \u0bb0\u0bc2\u0baa\u0bae\u0bcd", "sutra_num": "-2", "form": "\u0baa\u0bb5\u0ba4\u0bbf"}], "number": "01.0001", "vachana": "\u0b8f\u0b95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0baa\u0bc2", "purusha": "\u0baa\u0bcd\u0bb0\u0ba4\u0bae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0bb2\u0b9f\u0bcd", "it_id": "", "it_sutra": "", "meaning": "\u0bb8\u0ba4\u0bcd\u0ba4\u0bbe\u0baf\u0bbe\u0bae\u0bcd", "suffix": "\u0ba4\u0bbf\u0baa\u0bcd"}], "wx": [{"gana": "BvAxi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmEpaxI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "BUvAxayo XAwavaH", "sutra_num": "1.3.1", "form": "BU"}, {"sutra": "laH karmaNi ca BAve cAkarmakeByaH.", "sutra_num": "3.4.69", "form": "BU"}, {"sutra": "varwamAne lat", "sutra_num": "3.2.123", "form": "BU+la~t"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "BU+la~t"}, {"sutra": "halanwyam", "sutra_num": "1.3.3", "form": "BU+la~t"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+la~"}, {"sutra": "upaxeSe'janunAsika iw", "sutra_num": "1.3.2", "form": "BU+la~"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+l"}, {"sutra": "wipwasJisipWasWamibvasmas wAwAMJaWAsAWAMXvamidvahimahif", "sutra_num": "3.4.78", "form": "BU+wip"}, {"sutra": "laH parasmEpaxam", "sutra_num": "1.4.99", "form": "BU+wip"}, {"sutra": "wifaswrINi wrINi praWamamaXyamowwamAH", "sutra_num": "1.4.101", "form": "BU+wip"}, {"sutra": "wAnyekavacanaxvivacanabahuvacanAnyekaSaH", "sutra_num": "1.4.102", "form": "BU+wip"}, {"sutra": "SeRe praWamaH", "sutra_num": "1.4.108", "form": "BU+wip"}, {"sutra": "wifSiwsArvaXAwukam", "sutra_num": "3.4.113", "form": "BU+wip"}, {"sutra": "karwari Sap\u200c", "sutra_num": "3.1.68", "form": "BU+Sap+wip"}, {"sutra": "wifSiwsArvaXAwukam", "sutra_num": "3.4.113", "form": "BU+Sap+wip"}, {"sutra": "laSakvawaxXiwe", "sutra_num": "1.3.8", "form": "BU+Sap+wip"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+ap+wip"}, {"sutra": "halanwyam", "sutra_num": "1.3.3", "form": "BU+ap+wip"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+a+wi"}, {"sutra": "sArvaXAwukArXaXAwukayoH", "sutra_num": "7.3.84", "form": "Bo+a+wi"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "Bav+a+wi"}, {"sutra": "anwimaM rUpam", "sutra_num": "-2", "form": "Bavawi"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "BU", "purusha": "praWama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "lat", "it_id": "", "it_sutra": "", "meaning": "sawwAyAm", "suffix": "wip"}]} +{"malayalam": [{"gana": "\u0d2d\u0d4d\u0d35\u0d3e\u0d26\u0d3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0d2a\u0d30\u0d38\u0d4d\u0d2e\u0d48\u0d2a\u0d26\u0d40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0d2d\u0d42\u0d35\u0d3e\u0d26\u0d2f\u0d4b \u0d27\u0d3e\u0d24\u0d35\u0d03", "sutra_num": "1.3.1", "form": "\u0d2d\u0d42"}, {"sutra": "\u0d32\u0d03 \u0d15\u0d30\u0d4d\u0d2e\u0d23\u0d3f \u0d1a \u0d2d\u0d3e\u0d35\u0d47 \u0d1a\u0d3e\u0d15\u0d30\u0d4d\u0d2e\u0d15\u0d47\u0d2d\u0d4d\u0d2f\u0d03\u0964", "sutra_num": "3.4.69", "form": "\u0d2d\u0d42"}, {"sutra": "\u0d35\u0d30\u0d4d\u0d24\u0d2e\u0d3e\u0d28\u0d47 \u0d32\u0d1f\u0d4d", "sutra_num": "3.2.123", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d32\u0d38\u0d4d\u0d2f", "sutra_num": "3.4.77", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d39\u0d32\u0d28\u0d4d\u0d24\u0d4d\u0d2f\u0d2e\u0d4d", "sutra_num": "1.3.3", "form": "\u0d2d\u0d42+\u0d32\u0901\u0d1f\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d32\u0901"}, {"sutra": "\u0d09\u0d2a\u0d26\u0d47\u0d36\u0d47\u0d3d\u0d1c\u0d28\u0d41\u0d28\u0d3e\u0d38\u0d3f\u0d15 \u0d07\u0d24\u0d4d", "sutra_num": "1.3.2", "form": "\u0d2d\u0d42+\u0d32\u0901"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d32\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d2a\u0d4d\u0d24\u0d38\u0d4d\u0d1d\u0d3f\u0d38\u0d3f\u0d2a\u0d4d\u0d25\u0d38\u0d4d\u0d25\u0d2e\u0d3f\u0d2c\u0d4d\u0d35\u0d38\u0d4d\u0d2e\u0d38\u0d4d \u0d24\u0d3e\u0d24\u0d3e\u0d02\u0d1d\u0d25\u0d3e\u0d38\u0d3e\u0d25\u0d3e\u0d02\u0d27\u0d4d\u0d35\u0d2e\u0d3f\u0d21\u0d4d\u0d35\u0d39\u0d3f\u0d2e\u0d39\u0d3f\u0d19\u0d4d", "sutra_num": "3.4.78", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d32\u0d03 \u0d2a\u0d30\u0d38\u0d4d\u0d2e\u0d48\u0d2a\u0d26\u0d2e\u0d4d", "sutra_num": "1.4.99", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d38\u0d4d\u0d24\u0d4d\u0d30\u0d40\u0d23\u0d3f \u0d24\u0d4d\u0d30\u0d40\u0d23\u0d3f \u0d2a\u0d4d\u0d30\u0d25\u0d2e\u0d2e\u0d27\u0d4d\u0d2f\u0d2e\u0d4b\u0d24\u0d4d\u0d24\u0d2e\u0d3e\u0d03", "sutra_num": "1.4.101", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3e\u0d28\u0d4d\u0d2f\u0d47\u0d15\u0d35\u0d1a\u0d28\u0d26\u0d4d\u0d35\u0d3f\u0d35\u0d1a\u0d28\u0d2c\u0d39\u0d41\u0d35\u0d1a\u0d28\u0d3e\u0d28\u0d4d\u0d2f\u0d47\u0d15\u0d36\u0d03", "sutra_num": "1.4.102", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d36\u0d47\u0d37\u0d47 \u0d2a\u0d4d\u0d30\u0d25\u0d2e\u0d03", "sutra_num": "1.4.108", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d4d\u0d36\u0d3f\u0d24\u0d4d\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2e\u0d4d", "sutra_num": "3.4.113", "form": "\u0d2d\u0d42+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d15\u0d30\u0d4d\u0d24\u0d30\u0d3f \u0d36\u0d2a\u0d4d\u200c", "sutra_num": "3.1.68", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d3f\u0d19\u0d4d\u0d36\u0d3f\u0d24\u0d4d\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2e\u0d4d", "sutra_num": "3.4.113", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d32\u0d36\u0d15\u0d4d\u0d35\u0d24\u0d26\u0d4d\u0d27\u0d3f\u0d24\u0d47", "sutra_num": "1.3.8", "form": "\u0d2d\u0d42+\u0d36\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d05\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d39\u0d32\u0d28\u0d4d\u0d24\u0d4d\u0d2f\u0d2e\u0d4d", "sutra_num": "1.3.3", "form": "\u0d2d\u0d42+\u0d05\u0d2a\u0d4d+\u0d24\u0d3f\u0d2a\u0d4d"}, {"sutra": "\u0d24\u0d38\u0d4d\u0d2f \u0d32\u0d4b\u0d2a\u0d03", "sutra_num": "1.3.9", "form": "\u0d2d\u0d42+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d38\u0d3e\u0d30\u0d4d\u0d35\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d3e\u0d30\u0d4d\u0d27\u0d27\u0d3e\u0d24\u0d41\u0d15\u0d2f\u0d4b\u0d03", "sutra_num": "7.3.84", "form": "\u0d2d\u0d4b+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d0f\u0d1a\u0d4b\u0d3d\u0d2f\u0d35\u0d3e\u0d2f\u0d3e\u0d35\u0d03", "sutra_num": "6.1.78", "form": "\u0d2d\u0d35\u0d4d+\u0d05+\u0d24\u0d3f"}, {"sutra": "\u0d05\u0d28\u0d4d\u0d24\u0d3f\u0d2e\u0d02 \u0d30\u0d42\u0d2a\u0d2e\u0d4d", "sutra_num": "-2", "form": "\u0d2d\u0d35\u0d24\u0d3f"}], "number": "01.0001", "vachana": "\u0d0f\u0d15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0d2d\u0d42", "purusha": "\u0d2a\u0d4d\u0d30\u0d25\u0d2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0d32\u0d1f\u0d4d", "it_id": "", "it_sutra": "", "meaning": "\u0d38\u0d24\u0d4d\u0d24\u0d3e\u0d2f\u0d3e\u0d2e\u0d4d", "suffix": "\u0d24\u0d3f\u0d2a\u0d4d"}], "telugu": [{"gana": "\u0c2d\u0c4d\u0c35\u0c3e\u0c26\u0c3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0c2a\u0c30\u0c38\u0c4d\u0c2e\u0c48\u0c2a\u0c26\u0c40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0c2d\u0c42\u0c35\u0c3e\u0c26\u0c2f\u0c4b \u0c27\u0c3e\u0c24\u0c35\u0c03", "sutra_num": "1.3.1", "form": "\u0c2d\u0c42"}, {"sutra": "\u0c32\u0c03 \u0c15\u0c30\u0c4d\u0c2e\u0c23\u0c3f \u0c1a \u0c2d\u0c3e\u0c35\u0c47 \u0c1a\u0c3e\u0c15\u0c30\u0c4d\u0c2e\u0c15\u0c47\u0c2d\u0c4d\u0c2f\u0c03\u0964", "sutra_num": "3.4.69", "form": "\u0c2d\u0c42"}, {"sutra": "\u0c35\u0c30\u0c4d\u0c24\u0c2e\u0c3e\u0c28\u0c47 \u0c32\u0c1f\u0c4d", "sutra_num": "3.2.123", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c32\u0c38\u0c4d\u0c2f", "sutra_num": "3.4.77", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c39\u0c32\u0c28\u0c4d\u0c24\u0c4d\u0c2f\u0c2e\u0c4d", "sutra_num": "1.3.3", "form": "\u0c2d\u0c42+\u0c32\u0c01\u0c1f\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c32\u0c01"}, {"sutra": "\u0c09\u0c2a\u0c26\u0c47\u0c36\u0c47\u0c3d\u0c1c\u0c28\u0c41\u0c28\u0c3e\u0c38\u0c3f\u0c15 \u0c07\u0c24\u0c4d", "sutra_num": "1.3.2", "form": "\u0c2d\u0c42+\u0c32\u0c01"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c32\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c2a\u0c4d\u0c24\u0c38\u0c4d\u0c1d\u0c3f\u0c38\u0c3f\u0c2a\u0c4d\u0c25\u0c38\u0c4d\u0c25\u0c2e\u0c3f\u0c2c\u0c4d\u0c35\u0c38\u0c4d\u0c2e\u0c38\u0c4d \u0c24\u0c3e\u0c24\u0c3e\u0c02\u0c1d\u0c25\u0c3e\u0c38\u0c3e\u0c25\u0c3e\u0c02\u0c27\u0c4d\u0c35\u0c2e\u0c3f\u0c21\u0c4d\u0c35\u0c39\u0c3f\u0c2e\u0c39\u0c3f\u0c19\u0c4d", "sutra_num": "3.4.78", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c32\u0c03 \u0c2a\u0c30\u0c38\u0c4d\u0c2e\u0c48\u0c2a\u0c26\u0c2e\u0c4d", "sutra_num": "1.4.99", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c38\u0c4d\u0c24\u0c4d\u0c30\u0c40\u0c23\u0c3f \u0c24\u0c4d\u0c30\u0c40\u0c23\u0c3f \u0c2a\u0c4d\u0c30\u0c25\u0c2e\u0c2e\u0c27\u0c4d\u0c2f\u0c2e\u0c4b\u0c24\u0c4d\u0c24\u0c2e\u0c3e\u0c03", "sutra_num": "1.4.101", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3e\u0c28\u0c4d\u0c2f\u0c47\u0c15\u0c35\u0c1a\u0c28\u0c26\u0c4d\u0c35\u0c3f\u0c35\u0c1a\u0c28\u0c2c\u0c39\u0c41\u0c35\u0c1a\u0c28\u0c3e\u0c28\u0c4d\u0c2f\u0c47\u0c15\u0c36\u0c03", "sutra_num": "1.4.102", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c36\u0c47\u0c37\u0c47 \u0c2a\u0c4d\u0c30\u0c25\u0c2e\u0c03", "sutra_num": "1.4.108", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c4d\u0c36\u0c3f\u0c24\u0c4d\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2e\u0c4d", "sutra_num": "3.4.113", "form": "\u0c2d\u0c42+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c15\u0c30\u0c4d\u0c24\u0c30\u0c3f \u0c36\u0c2a\u0c4d\u200c", "sutra_num": "3.1.68", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c3f\u0c19\u0c4d\u0c36\u0c3f\u0c24\u0c4d\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2e\u0c4d", "sutra_num": "3.4.113", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c32\u0c36\u0c15\u0c4d\u0c35\u0c24\u0c26\u0c4d\u0c27\u0c3f\u0c24\u0c47", "sutra_num": "1.3.8", "form": "\u0c2d\u0c42+\u0c36\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c05\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c39\u0c32\u0c28\u0c4d\u0c24\u0c4d\u0c2f\u0c2e\u0c4d", "sutra_num": "1.3.3", "form": "\u0c2d\u0c42+\u0c05\u0c2a\u0c4d+\u0c24\u0c3f\u0c2a\u0c4d"}, {"sutra": "\u0c24\u0c38\u0c4d\u0c2f \u0c32\u0c4b\u0c2a\u0c03", "sutra_num": "1.3.9", "form": "\u0c2d\u0c42+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c38\u0c3e\u0c30\u0c4d\u0c35\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c3e\u0c30\u0c4d\u0c27\u0c27\u0c3e\u0c24\u0c41\u0c15\u0c2f\u0c4b\u0c03", "sutra_num": "7.3.84", "form": "\u0c2d\u0c4b+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c0f\u0c1a\u0c4b\u0c3d\u0c2f\u0c35\u0c3e\u0c2f\u0c3e\u0c35\u0c03", "sutra_num": "6.1.78", "form": "\u0c2d\u0c35\u0c4d+\u0c05+\u0c24\u0c3f"}, {"sutra": "\u0c05\u0c28\u0c4d\u0c24\u0c3f\u0c2e\u0c02 \u0c30\u0c42\u0c2a\u0c2e\u0c4d", "sutra_num": "-2", "form": "\u0c2d\u0c35\u0c24\u0c3f"}], "number": "01.0001", "vachana": "\u0c0f\u0c15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0c2d\u0c42", "purusha": "\u0c2a\u0c4d\u0c30\u0c25\u0c2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0c32\u0c1f\u0c4d", "it_id": "", "it_sutra": "", "meaning": "\u0c38\u0c24\u0c4d\u0c24\u0c3e\u0c2f\u0c3e\u0c2e\u0c4d", "suffix": "\u0c24\u0c3f\u0c2a\u0c4d"}], "iast": [{"gana": "bhv\u0101di", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipad\u012b", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bh\u016bv\u0101dayo dh\u0101tava\u1e25", "sutra_num": "1.3.1", "form": "bh\u016b"}, {"sutra": "la\u1e25 karma\u1e47i ca bh\u0101ve c\u0101karmakebhya\u1e25\u0964", "sutra_num": "3.4.69", "form": "bh\u016b"}, {"sutra": "vartam\u0101ne la\u1e6d", "sutra_num": "3.2.123", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bh\u016b+lam\u0310\u1e6d"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+lam\u0310"}, {"sutra": "upade\u015be'janun\u0101sika it", "sutra_num": "1.3.2", "form": "bh\u016b+lam\u0310"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+l"}, {"sutra": "tiptasjhisipthasthamibvasmas t\u0101t\u0101\u1e43jhath\u0101s\u0101th\u0101\u1e43dhvami\u1e0dvahimahi\u1e45", "sutra_num": "3.4.78", "form": "bh\u016b+tip"}, {"sutra": "la\u1e25 parasmaipadam", "sutra_num": "1.4.99", "form": "bh\u016b+tip"}, {"sutra": "ti\u1e45astr\u012b\u1e47i tr\u012b\u1e47i prathamamadhyamottam\u0101\u1e25", "sutra_num": "1.4.101", "form": "bh\u016b+tip"}, {"sutra": "t\u0101nyekavacanadvivacanabahuvacan\u0101nyeka\u015ba\u1e25", "sutra_num": "1.4.102", "form": "bh\u016b+tip"}, {"sutra": "\u015be\u1e63e prathama\u1e25", "sutra_num": "1.4.108", "form": "bh\u016b+tip"}, {"sutra": "ti\u1e45\u015bits\u0101rvadh\u0101tukam", "sutra_num": "3.4.113", "form": "bh\u016b+tip"}, {"sutra": "kartari \u015bap\u200c", "sutra_num": "3.1.68", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "ti\u1e45\u015bits\u0101rvadh\u0101tukam", "sutra_num": "3.4.113", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "la\u015bakvataddhite", "sutra_num": "1.3.8", "form": "bh\u016b+\u015bap+tip"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bh\u016b+ap+tip"}, {"sutra": "tasya lopa\u1e25", "sutra_num": "1.3.9", "form": "bh\u016b+a+ti"}, {"sutra": "s\u0101rvadh\u0101tuk\u0101rdhadh\u0101tukayo\u1e25", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "eco'yav\u0101y\u0101va\u1e25", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antima\u1e43 r\u016bpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bh\u016b", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "la\u1e6d", "it_id": "", "it_sutra": "", "meaning": "satt\u0101y\u0101m", "suffix": "tip"}], "devanagari": [{"gana": "\u092d\u094d\u0935\u093e\u0926\u093f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u092a\u0930\u0938\u094d\u092e\u0948\u092a\u0926\u0940", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u092d\u0942\u0935\u093e\u0926\u092f\u094b \u0927\u093e\u0924\u0935\u0903", "sutra_num": "1.3.1", "form": "\u092d\u0942"}, {"sutra": "\u0932\u0903 \u0915\u0930\u094d\u092e\u0923\u093f \u091a \u092d\u093e\u0935\u0947 \u091a\u093e\u0915\u0930\u094d\u092e\u0915\u0947\u092d\u094d\u092f\u0903\u0964", "sutra_num": "3.4.69", "form": "\u092d\u0942"}, {"sutra": "\u0935\u0930\u094d\u0924\u092e\u093e\u0928\u0947 \u0932\u091f\u094d", "sutra_num": "3.2.123", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0932\u0938\u094d\u092f", "sutra_num": "3.4.77", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0939\u0932\u0928\u094d\u0924\u094d\u092f\u092e\u094d", "sutra_num": "1.3.3", "form": "\u092d\u0942+\u0932\u0901\u091f\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0932\u0901"}, {"sutra": "\u0909\u092a\u0926\u0947\u0936\u0947\u093d\u091c\u0928\u0941\u0928\u093e\u0938\u093f\u0915 \u0907\u0924\u094d", "sutra_num": "1.3.2", "form": "\u092d\u0942+\u0932\u0901"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0932\u094d"}, {"sutra": "\u0924\u093f\u092a\u094d\u0924\u0938\u094d\u091d\u093f\u0938\u093f\u092a\u094d\u0925\u0938\u094d\u0925\u092e\u093f\u092c\u094d\u0935\u0938\u094d\u092e\u0938\u094d \u0924\u093e\u0924\u093e\u0902\u091d\u0925\u093e\u0938\u093e\u0925\u093e\u0902\u0927\u094d\u0935\u092e\u093f\u0921\u094d\u0935\u0939\u093f\u092e\u0939\u093f\u0919\u094d", "sutra_num": "3.4.78", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0932\u0903 \u092a\u0930\u0938\u094d\u092e\u0948\u092a\u0926\u092e\u094d", "sutra_num": "1.4.99", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u0938\u094d\u0924\u094d\u0930\u0940\u0923\u093f \u0924\u094d\u0930\u0940\u0923\u093f \u092a\u094d\u0930\u0925\u092e\u092e\u0927\u094d\u092f\u092e\u094b\u0924\u094d\u0924\u092e\u093e\u0903", "sutra_num": "1.4.101", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093e\u0928\u094d\u092f\u0947\u0915\u0935\u091a\u0928\u0926\u094d\u0935\u093f\u0935\u091a\u0928\u092c\u0939\u0941\u0935\u091a\u0928\u093e\u0928\u094d\u092f\u0947\u0915\u0936\u0903", "sutra_num": "1.4.102", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0936\u0947\u0937\u0947 \u092a\u094d\u0930\u0925\u092e\u0903", "sutra_num": "1.4.108", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u094d\u0936\u093f\u0924\u094d\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u092e\u094d", "sutra_num": "3.4.113", "form": "\u092d\u0942+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0915\u0930\u094d\u0924\u0930\u093f \u0936\u092a\u094d\u200c", "sutra_num": "3.1.68", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u093f\u0919\u094d\u0936\u093f\u0924\u094d\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u092e\u094d", "sutra_num": "3.4.113", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0932\u0936\u0915\u094d\u0935\u0924\u0926\u094d\u0927\u093f\u0924\u0947", "sutra_num": "1.3.8", "form": "\u092d\u0942+\u0936\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0905\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0939\u0932\u0928\u094d\u0924\u094d\u092f\u092e\u094d", "sutra_num": "1.3.3", "form": "\u092d\u0942+\u0905\u092a\u094d+\u0924\u093f\u092a\u094d"}, {"sutra": "\u0924\u0938\u094d\u092f \u0932\u094b\u092a\u0903", "sutra_num": "1.3.9", "form": "\u092d\u0942+\u0905+\u0924\u093f"}, {"sutra": "\u0938\u093e\u0930\u094d\u0935\u0927\u093e\u0924\u0941\u0915\u093e\u0930\u094d\u0927\u0927\u093e\u0924\u0941\u0915\u092f\u094b\u0903", "sutra_num": "7.3.84", "form": "\u092d\u094b+\u0905+\u0924\u093f"}, {"sutra": "\u090f\u091a\u094b\u093d\u092f\u0935\u093e\u092f\u093e\u0935\u0903", "sutra_num": "6.1.78", "form": "\u092d\u0935\u094d+\u0905+\u0924\u093f"}, {"sutra": "\u0905\u0928\u094d\u0924\u093f\u092e\u0902 \u0930\u0942\u092a\u092e\u094d", "sutra_num": "-2", "form": "\u092d\u0935\u0924\u093f"}], "number": "01.0001", "vachana": "\u090f\u0915", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u092d\u0942", "purusha": "\u092a\u094d\u0930\u0925\u092e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0932\u091f\u094d", "it_id": "", "it_sutra": "", "meaning": "\u0938\u0924\u094d\u0924\u093e\u092f\u093e\u092e\u094d", "suffix": "\u0924\u093f\u092a\u094d"}], "gujarati": [{"gana": "\u0aad\u0acd\u0ab5\u0abe\u0aa6\u0abf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0aaa\u0ab0\u0ab8\u0acd\u0aae\u0ac8\u0aaa\u0aa6\u0ac0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0aad\u0ac2\u0ab5\u0abe\u0aa6\u0aaf\u0acb \u0aa7\u0abe\u0aa4\u0ab5\u0a83", "sutra_num": "1.3.1", "form": "\u0aad\u0ac2"}, {"sutra": "\u0ab2\u0a83 \u0a95\u0ab0\u0acd\u0aae\u0aa3\u0abf \u0a9a \u0aad\u0abe\u0ab5\u0ac7 \u0a9a\u0abe\u0a95\u0ab0\u0acd\u0aae\u0a95\u0ac7\u0aad\u0acd\u0aaf\u0a83\u0ae4", "sutra_num": "3.4.69", "form": "\u0aad\u0ac2"}, {"sutra": "\u0ab5\u0ab0\u0acd\u0aa4\u0aae\u0abe\u0aa8\u0ac7 \u0ab2\u0a9f\u0acd", "sutra_num": "3.2.123", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0ab2\u0ab8\u0acd\u0aaf", "sutra_num": "3.4.77", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0ab9\u0ab2\u0aa8\u0acd\u0aa4\u0acd\u0aaf\u0aae\u0acd", "sutra_num": "1.3.3", "form": "\u0aad\u0ac2+\u0ab2\u0a81\u0a9f\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0ab2\u0a81"}, {"sutra": "\u0a89\u0aaa\u0aa6\u0ac7\u0ab6\u0ac7\u0abd\u0a9c\u0aa8\u0ac1\u0aa8\u0abe\u0ab8\u0abf\u0a95 \u0a87\u0aa4\u0acd", "sutra_num": "1.3.2", "form": "\u0aad\u0ac2+\u0ab2\u0a81"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0ab2\u0acd"}, {"sutra": "\u0aa4\u0abf\u0aaa\u0acd\u0aa4\u0ab8\u0acd\u0a9d\u0abf\u0ab8\u0abf\u0aaa\u0acd\u0aa5\u0ab8\u0acd\u0aa5\u0aae\u0abf\u0aac\u0acd\u0ab5\u0ab8\u0acd\u0aae\u0ab8\u0acd \u0aa4\u0abe\u0aa4\u0abe\u0a82\u0a9d\u0aa5\u0abe\u0ab8\u0abe\u0aa5\u0abe\u0a82\u0aa7\u0acd\u0ab5\u0aae\u0abf\u0aa1\u0acd\u0ab5\u0ab9\u0abf\u0aae\u0ab9\u0abf\u0a99\u0acd", "sutra_num": "3.4.78", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab2\u0a83 \u0aaa\u0ab0\u0ab8\u0acd\u0aae\u0ac8\u0aaa\u0aa6\u0aae\u0acd", "sutra_num": "1.4.99", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0ab8\u0acd\u0aa4\u0acd\u0ab0\u0ac0\u0aa3\u0abf \u0aa4\u0acd\u0ab0\u0ac0\u0aa3\u0abf \u0aaa\u0acd\u0ab0\u0aa5\u0aae\u0aae\u0aa7\u0acd\u0aaf\u0aae\u0acb\u0aa4\u0acd\u0aa4\u0aae\u0abe\u0a83", "sutra_num": "1.4.101", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abe\u0aa8\u0acd\u0aaf\u0ac7\u0a95\u0ab5\u0a9a\u0aa8\u0aa6\u0acd\u0ab5\u0abf\u0ab5\u0a9a\u0aa8\u0aac\u0ab9\u0ac1\u0ab5\u0a9a\u0aa8\u0abe\u0aa8\u0acd\u0aaf\u0ac7\u0a95\u0ab6\u0a83", "sutra_num": "1.4.102", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab6\u0ac7\u0ab7\u0ac7 \u0aaa\u0acd\u0ab0\u0aa5\u0aae\u0a83", "sutra_num": "1.4.108", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0acd\u0ab6\u0abf\u0aa4\u0acd\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aae\u0acd", "sutra_num": "3.4.113", "form": "\u0aad\u0ac2+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0a95\u0ab0\u0acd\u0aa4\u0ab0\u0abf \u0ab6\u0aaa\u0acd\u200c", "sutra_num": "3.1.68", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0abf\u0a99\u0acd\u0ab6\u0abf\u0aa4\u0acd\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aae\u0acd", "sutra_num": "3.4.113", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab2\u0ab6\u0a95\u0acd\u0ab5\u0aa4\u0aa6\u0acd\u0aa7\u0abf\u0aa4\u0ac7", "sutra_num": "1.3.8", "form": "\u0aad\u0ac2+\u0ab6\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0a85\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0ab9\u0ab2\u0aa8\u0acd\u0aa4\u0acd\u0aaf\u0aae\u0acd", "sutra_num": "1.3.3", "form": "\u0aad\u0ac2+\u0a85\u0aaa\u0acd+\u0aa4\u0abf\u0aaa\u0acd"}, {"sutra": "\u0aa4\u0ab8\u0acd\u0aaf \u0ab2\u0acb\u0aaa\u0a83", "sutra_num": "1.3.9", "form": "\u0aad\u0ac2+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0ab8\u0abe\u0ab0\u0acd\u0ab5\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0abe\u0ab0\u0acd\u0aa7\u0aa7\u0abe\u0aa4\u0ac1\u0a95\u0aaf\u0acb\u0a83", "sutra_num": "7.3.84", "form": "\u0aad\u0acb+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0a8f\u0a9a\u0acb\u0abd\u0aaf\u0ab5\u0abe\u0aaf\u0abe\u0ab5\u0a83", "sutra_num": "6.1.78", "form": "\u0aad\u0ab5\u0acd+\u0a85+\u0aa4\u0abf"}, {"sutra": "\u0a85\u0aa8\u0acd\u0aa4\u0abf\u0aae\u0a82 \u0ab0\u0ac2\u0aaa\u0aae\u0acd", "sutra_num": "-2", "form": "\u0aad\u0ab5\u0aa4\u0abf"}], "number": "01.0001", "vachana": "\u0a8f\u0a95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0aad\u0ac2", "purusha": "\u0aaa\u0acd\u0ab0\u0aa5\u0aae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0ab2\u0a9f\u0acd", "it_id": "", "it_sutra": "", "meaning": "\u0ab8\u0aa4\u0acd\u0aa4\u0abe\u0aaf\u0abe\u0aae\u0acd", "suffix": "\u0aa4\u0abf\u0aaa\u0acd"}], "oriya": [{"gana": "\u0b2d\u0b4d\u0b35\u0b3e\u0b26\u0b3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0b2a\u0b30\u0b38\u0b4d\u0b2e\u0b48\u0b2a\u0b26\u0b40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0b2d\u0b42\u0b35\u0b3e\u0b26\u0b2f\u0b4b \u0b27\u0b3e\u0b24\u0b35\u0b03", "sutra_num": "1.3.1", "form": "\u0b2d\u0b42"}, {"sutra": "\u0b32\u0b03 \u0b15\u0b30\u0b4d\u0b2e\u0b23\u0b3f \u0b1a \u0b2d\u0b3e\u0b35\u0b47 \u0b1a\u0b3e\u0b15\u0b30\u0b4d\u0b2e\u0b15\u0b47\u0b2d\u0b4d\u0b2f\u0b03\u0964", "sutra_num": "3.4.69", "form": "\u0b2d\u0b42"}, {"sutra": "\u0b35\u0b30\u0b4d\u0b24\u0b2e\u0b3e\u0b28\u0b47 \u0b32\u0b1f\u0b4d", "sutra_num": "3.2.123", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b32\u0b38\u0b4d\u0b2f", "sutra_num": "3.4.77", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b39\u0b32\u0b28\u0b4d\u0b24\u0b4d\u0b2f\u0b2e\u0b4d", "sutra_num": "1.3.3", "form": "\u0b2d\u0b42+\u0b32\u0b01\u0b1f\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b32\u0b01"}, {"sutra": "\u0b09\u0b2a\u0b26\u0b47\u0b36\u0b47\u0b3d\u0b1c\u0b28\u0b41\u0b28\u0b3e\u0b38\u0b3f\u0b15 \u0b07\u0b24\u0b4d", "sutra_num": "1.3.2", "form": "\u0b2d\u0b42+\u0b32\u0b01"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b32\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b2a\u0b4d\u0b24\u0b38\u0b4d\u0b1d\u0b3f\u0b38\u0b3f\u0b2a\u0b4d\u0b25\u0b38\u0b4d\u0b25\u0b2e\u0b3f\u0b2c\u0b4d\u0b35\u0b38\u0b4d\u0b2e\u0b38\u0b4d \u0b24\u0b3e\u0b24\u0b3e\u0b02\u0b1d\u0b25\u0b3e\u0b38\u0b3e\u0b25\u0b3e\u0b02\u0b27\u0b4d\u0b35\u0b2e\u0b3f\u0b21\u0b4d\u0b35\u0b39\u0b3f\u0b2e\u0b39\u0b3f\u0b19\u0b4d", "sutra_num": "3.4.78", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b32\u0b03 \u0b2a\u0b30\u0b38\u0b4d\u0b2e\u0b48\u0b2a\u0b26\u0b2e\u0b4d", "sutra_num": "1.4.99", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b38\u0b4d\u0b24\u0b4d\u0b30\u0b40\u0b23\u0b3f \u0b24\u0b4d\u0b30\u0b40\u0b23\u0b3f \u0b2a\u0b4d\u0b30\u0b25\u0b2e\u0b2e\u0b27\u0b4d\u0b2f\u0b2e\u0b4b\u0b24\u0b4d\u0b24\u0b2e\u0b3e\u0b03", "sutra_num": "1.4.101", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3e\u0b28\u0b4d\u0b2f\u0b47\u0b15\u0b35\u0b1a\u0b28\u0b26\u0b4d\u0b35\u0b3f\u0b35\u0b1a\u0b28\u0b2c\u0b39\u0b41\u0b35\u0b1a\u0b28\u0b3e\u0b28\u0b4d\u0b2f\u0b47\u0b15\u0b36\u0b03", "sutra_num": "1.4.102", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b36\u0b47\u0b37\u0b47 \u0b2a\u0b4d\u0b30\u0b25\u0b2e\u0b03", "sutra_num": "1.4.108", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b4d\u0b36\u0b3f\u0b24\u0b4d\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2e\u0b4d", "sutra_num": "3.4.113", "form": "\u0b2d\u0b42+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b15\u0b30\u0b4d\u0b24\u0b30\u0b3f \u0b36\u0b2a\u0b4d\u200c", "sutra_num": "3.1.68", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b3f\u0b19\u0b4d\u0b36\u0b3f\u0b24\u0b4d\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2e\u0b4d", "sutra_num": "3.4.113", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b32\u0b36\u0b15\u0b4d\u0b35\u0b24\u0b26\u0b4d\u0b27\u0b3f\u0b24\u0b47", "sutra_num": "1.3.8", "form": "\u0b2d\u0b42+\u0b36\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b05\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b39\u0b32\u0b28\u0b4d\u0b24\u0b4d\u0b2f\u0b2e\u0b4d", "sutra_num": "1.3.3", "form": "\u0b2d\u0b42+\u0b05\u0b2a\u0b4d+\u0b24\u0b3f\u0b2a\u0b4d"}, {"sutra": "\u0b24\u0b38\u0b4d\u0b2f \u0b32\u0b4b\u0b2a\u0b03", "sutra_num": "1.3.9", "form": "\u0b2d\u0b42+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b38\u0b3e\u0b30\u0b4d\u0b35\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b3e\u0b30\u0b4d\u0b27\u0b27\u0b3e\u0b24\u0b41\u0b15\u0b2f\u0b4b\u0b03", "sutra_num": "7.3.84", "form": "\u0b2d\u0b4b+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b0f\u0b1a\u0b4b\u0b3d\u0b2f\u0b35\u0b3e\u0b2f\u0b3e\u0b35\u0b03", "sutra_num": "6.1.78", "form": "\u0b2d\u0b35\u0b4d+\u0b05+\u0b24\u0b3f"}, {"sutra": "\u0b05\u0b28\u0b4d\u0b24\u0b3f\u0b2e\u0b02 \u0b30\u0b42\u0b2a\u0b2e\u0b4d", "sutra_num": "-2", "form": "\u0b2d\u0b35\u0b24\u0b3f"}], "number": "01.0001", "vachana": "\u0b0f\u0b15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0b2d\u0b42", "purusha": "\u0b2a\u0b4d\u0b30\u0b25\u0b2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0b32\u0b1f\u0b4d", "it_id": "", "it_sutra": "", "meaning": "\u0b38\u0b24\u0b4d\u0b24\u0b3e\u0b2f\u0b3e\u0b2e\u0b4d", "suffix": "\u0b24\u0b3f\u0b2a\u0b4d"}], "kannada": [{"gana": "\u0cad\u0ccd\u0cb5\u0cbe\u0ca6\u0cbf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0caa\u0cb0\u0cb8\u0ccd\u0cae\u0cc8\u0caa\u0ca6\u0cc0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0cad\u0cc2\u0cb5\u0cbe\u0ca6\u0caf\u0ccb \u0ca7\u0cbe\u0ca4\u0cb5\u0c83", "sutra_num": "1.3.1", "form": "\u0cad\u0cc2"}, {"sutra": "\u0cb2\u0c83 \u0c95\u0cb0\u0ccd\u0cae\u0ca3\u0cbf \u0c9a \u0cad\u0cbe\u0cb5\u0cc7 \u0c9a\u0cbe\u0c95\u0cb0\u0ccd\u0cae\u0c95\u0cc7\u0cad\u0ccd\u0caf\u0c83\u0964", "sutra_num": "3.4.69", "form": "\u0cad\u0cc2"}, {"sutra": "\u0cb5\u0cb0\u0ccd\u0ca4\u0cae\u0cbe\u0ca8\u0cc7 \u0cb2\u0c9f\u0ccd", "sutra_num": "3.2.123", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0cb2\u0cb8\u0ccd\u0caf", "sutra_num": "3.4.77", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0cb9\u0cb2\u0ca8\u0ccd\u0ca4\u0ccd\u0caf\u0cae\u0ccd", "sutra_num": "1.3.3", "form": "\u0cad\u0cc2+\u0cb2\u0901\u0c9f\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0cb2\u0901"}, {"sutra": "\u0c89\u0caa\u0ca6\u0cc7\u0cb6\u0cc7\u093d\u0c9c\u0ca8\u0cc1\u0ca8\u0cbe\u0cb8\u0cbf\u0c95 \u0c87\u0ca4\u0ccd", "sutra_num": "1.3.2", "form": "\u0cad\u0cc2+\u0cb2\u0901"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0cb2\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0caa\u0ccd\u0ca4\u0cb8\u0ccd\u0c9d\u0cbf\u0cb8\u0cbf\u0caa\u0ccd\u0ca5\u0cb8\u0ccd\u0ca5\u0cae\u0cbf\u0cac\u0ccd\u0cb5\u0cb8\u0ccd\u0cae\u0cb8\u0ccd \u0ca4\u0cbe\u0ca4\u0cbe\u0c82\u0c9d\u0ca5\u0cbe\u0cb8\u0cbe\u0ca5\u0cbe\u0c82\u0ca7\u0ccd\u0cb5\u0cae\u0cbf\u0ca1\u0ccd\u0cb5\u0cb9\u0cbf\u0cae\u0cb9\u0cbf\u0c99\u0ccd", "sutra_num": "3.4.78", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb2\u0c83 \u0caa\u0cb0\u0cb8\u0ccd\u0cae\u0cc8\u0caa\u0ca6\u0cae\u0ccd", "sutra_num": "1.4.99", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0cb8\u0ccd\u0ca4\u0ccd\u0cb0\u0cc0\u0ca3\u0cbf \u0ca4\u0ccd\u0cb0\u0cc0\u0ca3\u0cbf \u0caa\u0ccd\u0cb0\u0ca5\u0cae\u0cae\u0ca7\u0ccd\u0caf\u0cae\u0ccb\u0ca4\u0ccd\u0ca4\u0cae\u0cbe\u0c83", "sutra_num": "1.4.101", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbe\u0ca8\u0ccd\u0caf\u0cc7\u0c95\u0cb5\u0c9a\u0ca8\u0ca6\u0ccd\u0cb5\u0cbf\u0cb5\u0c9a\u0ca8\u0cac\u0cb9\u0cc1\u0cb5\u0c9a\u0ca8\u0cbe\u0ca8\u0ccd\u0caf\u0cc7\u0c95\u0cb6\u0c83", "sutra_num": "1.4.102", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb6\u0cc7\u0cb7\u0cc7 \u0caa\u0ccd\u0cb0\u0ca5\u0cae\u0c83", "sutra_num": "1.4.108", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0ccd\u0cb6\u0cbf\u0ca4\u0ccd\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cae\u0ccd", "sutra_num": "3.4.113", "form": "\u0cad\u0cc2+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0c95\u0cb0\u0ccd\u0ca4\u0cb0\u0cbf \u0cb6\u0caa\u0ccd\u200c", "sutra_num": "3.1.68", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cbf\u0c99\u0ccd\u0cb6\u0cbf\u0ca4\u0ccd\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cae\u0ccd", "sutra_num": "3.4.113", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb2\u0cb6\u0c95\u0ccd\u0cb5\u0ca4\u0ca6\u0ccd\u0ca7\u0cbf\u0ca4\u0cc7", "sutra_num": "1.3.8", "form": "\u0cad\u0cc2+\u0cb6\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0c85\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0cb9\u0cb2\u0ca8\u0ccd\u0ca4\u0ccd\u0caf\u0cae\u0ccd", "sutra_num": "1.3.3", "form": "\u0cad\u0cc2+\u0c85\u0caa\u0ccd+\u0ca4\u0cbf\u0caa\u0ccd"}, {"sutra": "\u0ca4\u0cb8\u0ccd\u0caf \u0cb2\u0ccb\u0caa\u0c83", "sutra_num": "1.3.9", "form": "\u0cad\u0cc2+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0cb8\u0cbe\u0cb0\u0ccd\u0cb5\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0cbe\u0cb0\u0ccd\u0ca7\u0ca7\u0cbe\u0ca4\u0cc1\u0c95\u0caf\u0ccb\u0c83", "sutra_num": "7.3.84", "form": "\u0cad\u0ccb+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0c8f\u0c9a\u0ccb\u093d\u0caf\u0cb5\u0cbe\u0caf\u0cbe\u0cb5\u0c83", "sutra_num": "6.1.78", "form": "\u0cad\u0cb5\u0ccd+\u0c85+\u0ca4\u0cbf"}, {"sutra": "\u0c85\u0ca8\u0ccd\u0ca4\u0cbf\u0cae\u0c82 \u0cb0\u0cc2\u0caa\u0cae\u0ccd", "sutra_num": "-2", "form": "\u0cad\u0cb5\u0ca4\u0cbf"}], "number": "01.0001", "vachana": "\u0c8f\u0c95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0cad\u0cc2", "purusha": "\u0caa\u0ccd\u0cb0\u0ca5\u0cae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0cb2\u0c9f\u0ccd", "it_id": "", "it_sutra": "", "meaning": "\u0cb8\u0ca4\u0ccd\u0ca4\u0cbe\u0caf\u0cbe\u0cae\u0ccd", "suffix": "\u0ca4\u0cbf\u0caa\u0ccd"}], "hk": [{"gana": "bhvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bhUvAdayo dhAtavaH", "sutra_num": "1.3.1", "form": "bhU"}, {"sutra": "laH karmaNi ca bhAve cAkarmakebhyaH.", "sutra_num": "3.4.69", "form": "bhU"}, {"sutra": "vartamAne laT", "sutra_num": "3.2.123", "form": "bhU+la~T"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bhU+la~T"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+la~T"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+la~"}, {"sutra": "upadeze'janunAsika it", "sutra_num": "1.3.2", "form": "bhU+la~"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+l"}, {"sutra": "tiptasjhisipthasthamibvasmas tAtAMjhathAsAthAMdhvamiDvahimahiG", "sutra_num": "3.4.78", "form": "bhU+tip"}, {"sutra": "laH parasmaipadam", "sutra_num": "1.4.99", "form": "bhU+tip"}, {"sutra": "tiGastrINi trINi prathamamadhyamottamAH", "sutra_num": "1.4.101", "form": "bhU+tip"}, {"sutra": "tAnyekavacanadvivacanabahuvacanAnyekazaH", "sutra_num": "1.4.102", "form": "bhU+tip"}, {"sutra": "zeSe prathamaH", "sutra_num": "1.4.108", "form": "bhU+tip"}, {"sutra": "tiGzitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+tip"}, {"sutra": "kartari zap\u200c", "sutra_num": "3.1.68", "form": "bhU+zap+tip"}, {"sutra": "tiGzitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+zap+tip"}, {"sutra": "lazakvataddhite", "sutra_num": "1.3.8", "form": "bhU+zap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+a+ti"}, {"sutra": "sArvadhAtukArdhadhAtukayoH", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bhU", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "laT", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "bengali": [{"gana": "\u09ad\u09cd\u09ac\u09be\u09a6\u09bf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u09aa\u09b0\u09b8\u09cd\u09ae\u09c8\u09aa\u09a6\u09c0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u09ad\u09c2\u09ac\u09be\u09a6\u09af\u09cb \u09a7\u09be\u09a4\u09ac\u0983", "sutra_num": "1.3.1", "form": "\u09ad\u09c2"}, {"sutra": "\u09b2\u0983 \u0995\u09b0\u09cd\u09ae\u09a3\u09bf \u099a \u09ad\u09be\u09ac\u09c7 \u099a\u09be\u0995\u09b0\u09cd\u09ae\u0995\u09c7\u09ad\u09cd\u09af\u0983\u0964", "sutra_num": "3.4.69", "form": "\u09ad\u09c2"}, {"sutra": "\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09b2\u099f\u09cd", "sutra_num": "3.2.123", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09b2\u09b8\u09cd\u09af", "sutra_num": "3.4.77", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09b9\u09b2\u09a8\u09cd\u09a4\u09cd\u09af\u09ae\u09cd", "sutra_num": "1.3.3", "form": "\u09ad\u09c2+\u09b2\u0981\u099f\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u09b2\u0981"}, {"sutra": "\u0989\u09aa\u09a6\u09c7\u09b6\u09c7\u09bd\u099c\u09a8\u09c1\u09a8\u09be\u09b8\u09bf\u0995 \u0987\u09a4\u09cd", "sutra_num": "1.3.2", "form": "\u09ad\u09c2+\u09b2\u0981"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u09b2\u09cd"}, {"sutra": "\u09a4\u09bf\u09aa\u09cd\u09a4\u09b8\u09cd\u099d\u09bf\u09b8\u09bf\u09aa\u09cd\u09a5\u09b8\u09cd\u09a5\u09ae\u09bf\u09ac\u09cd\u09ac\u09b8\u09cd\u09ae\u09b8\u09cd \u09a4\u09be\u09a4\u09be\u0982\u099d\u09a5\u09be\u09b8\u09be\u09a5\u09be\u0982\u09a7\u09cd\u09ac\u09ae\u09bf\u09a1\u09cd\u09ac\u09b9\u09bf\u09ae\u09b9\u09bf\u0999\u09cd", "sutra_num": "3.4.78", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b2\u0983 \u09aa\u09b0\u09b8\u09cd\u09ae\u09c8\u09aa\u09a6\u09ae\u09cd", "sutra_num": "1.4.99", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09b8\u09cd\u09a4\u09cd\u09b0\u09c0\u09a3\u09bf \u09a4\u09cd\u09b0\u09c0\u09a3\u09bf \u09aa\u09cd\u09b0\u09a5\u09ae\u09ae\u09a7\u09cd\u09af\u09ae\u09cb\u09a4\u09cd\u09a4\u09ae\u09be\u0983", "sutra_num": "1.4.101", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09be\u09a8\u09cd\u09af\u09c7\u0995\u09ac\u099a\u09a8\u09a6\u09cd\u09ac\u09bf\u09ac\u099a\u09a8\u09ac\u09b9\u09c1\u09ac\u099a\u09a8\u09be\u09a8\u09cd\u09af\u09c7\u0995\u09b6\u0983", "sutra_num": "1.4.102", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b6\u09c7\u09b7\u09c7 \u09aa\u09cd\u09b0\u09a5\u09ae\u0983", "sutra_num": "1.4.108", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09cd\u09b6\u09bf\u09a4\u09cd\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09ae\u09cd", "sutra_num": "3.4.113", "form": "\u09ad\u09c2+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u0995\u09b0\u09cd\u09a4\u09b0\u09bf \u09b6\u09aa\u09cd\u200c", "sutra_num": "3.1.68", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09bf\u0999\u09cd\u09b6\u09bf\u09a4\u09cd\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09ae\u09cd", "sutra_num": "3.4.113", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b2\u09b6\u0995\u09cd\u09ac\u09a4\u09a6\u09cd\u09a7\u09bf\u09a4\u09c7", "sutra_num": "1.3.8", "form": "\u09ad\u09c2+\u09b6\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u0985\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09b9\u09b2\u09a8\u09cd\u09a4\u09cd\u09af\u09ae\u09cd", "sutra_num": "1.3.3", "form": "\u09ad\u09c2+\u0985\u09aa\u09cd+\u09a4\u09bf\u09aa\u09cd"}, {"sutra": "\u09a4\u09b8\u09cd\u09af \u09b2\u09cb\u09aa\u0983", "sutra_num": "1.3.9", "form": "\u09ad\u09c2+\u0985+\u09a4\u09bf"}, {"sutra": "\u09b8\u09be\u09b0\u09cd\u09ac\u09a7\u09be\u09a4\u09c1\u0995\u09be\u09b0\u09cd\u09a7\u09a7\u09be\u09a4\u09c1\u0995\u09af\u09cb\u0983", "sutra_num": "7.3.84", "form": "\u09ad\u09cb+\u0985+\u09a4\u09bf"}, {"sutra": "\u098f\u099a\u09cb\u09bd\u09af\u09ac\u09be\u09af\u09be\u09ac\u0983", "sutra_num": "6.1.78", "form": "\u09ad\u09ac\u09cd+\u0985+\u09a4\u09bf"}, {"sutra": "\u0985\u09a8\u09cd\u09a4\u09bf\u09ae\u0982 \u09b0\u09c2\u09aa\u09ae\u09cd", "sutra_num": "-2", "form": "\u09ad\u09ac\u09a4\u09bf"}], "number": "01.0001", "vachana": "\u098f\u0995", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u09ad\u09c2", "purusha": "\u09aa\u09cd\u09b0\u09a5\u09ae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u09b2\u099f\u09cd", "it_id": "", "it_sutra": "", "meaning": "\u09b8\u09a4\u09cd\u09a4\u09be\u09af\u09be\u09ae\u09cd", "suffix": "\u09a4\u09bf\u09aa\u09cd"}], "gurmukhi": [{"gana": "\u0a2d\u0a4d\u0a35\u0a3e\u0a26\u0a3f", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0a2a\u0a30\u0a38\u0a4d\u0a2e\u0a48\u0a2a\u0a26\u0a40", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0a2d\u0a42\u0a35\u0a3e\u0a26\u0a2f\u0a4b \u0a27\u0a3e\u0a24\u0a35\u0a03", "sutra_num": "1.3.1", "form": "\u0a2d\u0a42"}, {"sutra": "\u0a32\u0a03 \u0a15\u0a30\u0a4d\u0a2e\u0a23\u0a3f \u0a1a \u0a2d\u0a3e\u0a35\u0a47 \u0a1a\u0a3e\u0a15\u0a30\u0a4d\u0a2e\u0a15\u0a47\u0a2d\u0a4d\u0a2f\u0a03\u0964", "sutra_num": "3.4.69", "form": "\u0a2d\u0a42"}, {"sutra": "\u0a35\u0a30\u0a4d\u0a24\u0a2e\u0a3e\u0a28\u0a47 \u0a32\u0a1f\u0a4d", "sutra_num": "3.2.123", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a32\u0a38\u0a4d\u0a2f", "sutra_num": "3.4.77", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a39\u0a32\u0a28\u0a4d\u0a24\u0a4d\u0a2f\u0a2e\u0a4d", "sutra_num": "1.3.3", "form": "\u0a2d\u0a42+\u0a32\u0a01\u0a1f\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a32\u0a01"}, {"sutra": "\u0a09\u0a2a\u0a26\u0a47\u0a36\u0a47\u093d\u0a1c\u0a28\u0a41\u0a28\u0a3e\u0a38\u0a3f\u0a15 \u0a07\u0a24\u0a4d", "sutra_num": "1.3.2", "form": "\u0a2d\u0a42+\u0a32\u0a01"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a32\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a2a\u0a4d\u0a24\u0a38\u0a4d\u0a1d\u0a3f\u0a38\u0a3f\u0a2a\u0a4d\u0a25\u0a38\u0a4d\u0a25\u0a2e\u0a3f\u0a2c\u0a4d\u0a35\u0a38\u0a4d\u0a2e\u0a38\u0a4d \u0a24\u0a3e\u0a24\u0a3e\u0a02\u0a1d\u0a25\u0a3e\u0a38\u0a3e\u0a25\u0a3e\u0a02\u0a27\u0a4d\u0a35\u0a2e\u0a3f\u0a21\u0a4d\u0a35\u0a39\u0a3f\u0a2e\u0a39\u0a3f\u0a19\u0a4d", "sutra_num": "3.4.78", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a32\u0a03 \u0a2a\u0a30\u0a38\u0a4d\u0a2e\u0a48\u0a2a\u0a26\u0a2e\u0a4d", "sutra_num": "1.4.99", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a38\u0a4d\u0a24\u0a4d\u0a30\u0a40\u0a23\u0a3f \u0a24\u0a4d\u0a30\u0a40\u0a23\u0a3f \u0a2a\u0a4d\u0a30\u0a25\u0a2e\u0a2e\u0a27\u0a4d\u0a2f\u0a2e\u0a4b\u0a24\u0a4d\u0a24\u0a2e\u0a3e\u0a03", "sutra_num": "1.4.101", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3e\u0a28\u0a4d\u0a2f\u0a47\u0a15\u0a35\u0a1a\u0a28\u0a26\u0a4d\u0a35\u0a3f\u0a35\u0a1a\u0a28\u0a2c\u0a39\u0a41\u0a35\u0a1a\u0a28\u0a3e\u0a28\u0a4d\u0a2f\u0a47\u0a15\u0a36\u0a03", "sutra_num": "1.4.102", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a36\u0a47\u0a36\u0a47 \u0a2a\u0a4d\u0a30\u0a25\u0a2e\u0a03", "sutra_num": "1.4.108", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a4d\u0a36\u0a3f\u0a24\u0a4d\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2e\u0a4d", "sutra_num": "3.4.113", "form": "\u0a2d\u0a42+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a15\u0a30\u0a4d\u0a24\u0a30\u0a3f \u0a36\u0a2a\u0a4d\u200c", "sutra_num": "3.1.68", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a3f\u0a19\u0a4d\u0a36\u0a3f\u0a24\u0a4d\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2e\u0a4d", "sutra_num": "3.4.113", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a32\u0a36\u0a15\u0a4d\u0a35\u0a24\u0a26\u0a4d\u0a27\u0a3f\u0a24\u0a47", "sutra_num": "1.3.8", "form": "\u0a2d\u0a42+\u0a36\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a05\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a39\u0a32\u0a28\u0a4d\u0a24\u0a4d\u0a2f\u0a2e\u0a4d", "sutra_num": "1.3.3", "form": "\u0a2d\u0a42+\u0a05\u0a2a\u0a4d+\u0a24\u0a3f\u0a2a\u0a4d"}, {"sutra": "\u0a24\u0a38\u0a4d\u0a2f \u0a32\u0a4b\u0a2a\u0a03", "sutra_num": "1.3.9", "form": "\u0a2d\u0a42+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a38\u0a3e\u0a30\u0a4d\u0a35\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a3e\u0a30\u0a4d\u0a27\u0a27\u0a3e\u0a24\u0a41\u0a15\u0a2f\u0a4b\u0a03", "sutra_num": "7.3.84", "form": "\u0a2d\u0a4b+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a0f\u0a1a\u0a4b\u093d\u0a2f\u0a35\u0a3e\u0a2f\u0a3e\u0a35\u0a03", "sutra_num": "6.1.78", "form": "\u0a2d\u0a35\u0a4d+\u0a05+\u0a24\u0a3f"}, {"sutra": "\u0a05\u0a28\u0a4d\u0a24\u0a3f\u0a2e\u0a02 \u0a30\u0a42\u0a2a\u0a2e\u0a4d", "sutra_num": "-2", "form": "\u0a2d\u0a35\u0a24\u0a3f"}], "number": "01.0001", "vachana": "\u0a0f\u0a15", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0a2d\u0a42", "purusha": "\u0a2a\u0a4d\u0a30\u0a25\u0a2e", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0a32\u0a1f\u0a4d", "it_id": "", "it_sutra": "", "meaning": "\u0a38\u0a24\u0a4d\u0a24\u0a3e\u0a2f\u0a3e\u0a2e\u0a4d", "suffix": "\u0a24\u0a3f\u0a2a\u0a4d"}], "slp1": [{"gana": "BvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmEpadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "BUvAdayo DAtavaH", "sutra_num": "1.3.1", "form": "BU"}, {"sutra": "laH karmaRi ca BAve cAkarmakeByaH.", "sutra_num": "3.4.69", "form": "BU"}, {"sutra": "vartamAne law", "sutra_num": "3.2.123", "form": "BU+la~w"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "BU+la~w"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "BU+la~w"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+la~"}, {"sutra": "upadeSe'janunAsika it", "sutra_num": "1.3.2", "form": "BU+la~"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+l"}, {"sutra": "tiptasJisipTasTamibvasmas tAtAMJaTAsATAMDvamiqvahimahiN", "sutra_num": "3.4.78", "form": "BU+tip"}, {"sutra": "laH parasmEpadam", "sutra_num": "1.4.99", "form": "BU+tip"}, {"sutra": "tiNastrIRi trIRi praTamamaDyamottamAH", "sutra_num": "1.4.101", "form": "BU+tip"}, {"sutra": "tAnyekavacanadvivacanabahuvacanAnyekaSaH", "sutra_num": "1.4.102", "form": "BU+tip"}, {"sutra": "Seze praTamaH", "sutra_num": "1.4.108", "form": "BU+tip"}, {"sutra": "tiNSitsArvaDAtukam", "sutra_num": "3.4.113", "form": "BU+tip"}, {"sutra": "kartari Sap\u200c", "sutra_num": "3.1.68", "form": "BU+Sap+tip"}, {"sutra": "tiNSitsArvaDAtukam", "sutra_num": "3.4.113", "form": "BU+Sap+tip"}, {"sutra": "laSakvatadDite", "sutra_num": "1.3.8", "form": "BU+Sap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "BU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "BU+a+ti"}, {"sutra": "sArvaDAtukArDaDAtukayoH", "sutra_num": "7.3.84", "form": "Bo+a+ti"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "Bav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "Bavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "BU", "purusha": "praTama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "law", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "itrans": [{"gana": "bhvAdi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmaipadI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "bhUvAdayo dhAtavaH", "sutra_num": "1.3.1", "form": "bhU"}, {"sutra": "laH karmaNi cha bhAve chAkarmakebhyaH.", "sutra_num": "3.4.69", "form": "bhU"}, {"sutra": "vartamAne laT", "sutra_num": "3.2.123", "form": "bhU+la.NT"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "bhU+la.NT"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+la.NT"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+la.N"}, {"sutra": "upadeshe.ajanunAsika it", "sutra_num": "1.3.2", "form": "bhU+la.N"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+l"}, {"sutra": "tiptasjhisipthasthamibvasmas tAtAMjhathAsAthAMdhvamiDvahimahi~N", "sutra_num": "3.4.78", "form": "bhU+tip"}, {"sutra": "laH parasmaipadam", "sutra_num": "1.4.99", "form": "bhU+tip"}, {"sutra": "ti~NastrINi trINi prathamamadhyamottamAH", "sutra_num": "1.4.101", "form": "bhU+tip"}, {"sutra": "tAnyekavachanadvivachanabahuvachanAnyekashaH", "sutra_num": "1.4.102", "form": "bhU+tip"}, {"sutra": "sheShe prathamaH", "sutra_num": "1.4.108", "form": "bhU+tip"}, {"sutra": "ti~NshitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+tip"}, {"sutra": "kartari shap\u200c", "sutra_num": "3.1.68", "form": "bhU+shap+tip"}, {"sutra": "ti~NshitsArvadhAtukam", "sutra_num": "3.4.113", "form": "bhU+shap+tip"}, {"sutra": "lashakvataddhite", "sutra_num": "1.3.8", "form": "bhU+shap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+ap+tip"}, {"sutra": "halantyam", "sutra_num": "1.3.3", "form": "bhU+ap+tip"}, {"sutra": "tasya lopaH", "sutra_num": "1.3.9", "form": "bhU+a+ti"}, {"sutra": "sArvadhAtukArdhadhAtukayoH", "sutra_num": "7.3.84", "form": "bho+a+ti"}, {"sutra": "echo.ayavAyAvaH", "sutra_num": "6.1.78", "form": "bhav+a+ti"}, {"sutra": "antimaM rUpam", "sutra_num": "-2", "form": "bhavati"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "bhU", "purusha": "prathama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "laT", "it_id": "", "it_sutra": "", "meaning": "sattAyAm", "suffix": "tip"}], "tamil": [{"gana": "\u0baa\u0bcd\u0bb5\u0bbe\u0ba4\u0bbf", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "\u0baa\u0bb0\u0bb8\u0bcd\u0bae\u0bc8\u0baa\u0ba4\u0bc0", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "\u0baa\u0bc2\u0bb5\u0bbe\u0ba4\u0baf\u0bcb \u0ba4\u0bbe\u0ba4\u0bb5\u0b83", "sutra_num": "1.3.1", "form": "\u0baa\u0bc2"}, {"sutra": "\u0bb2\u0b83 \u0b95\u0bb0\u0bcd\u0bae\u0ba3\u0bbf \u0b9a \u0baa\u0bbe\u0bb5\u0bc7 \u0b9a\u0bbe\u0b95\u0bb0\u0bcd\u0bae\u0b95\u0bc7\u0baa\u0bcd\u0baf\u0b83\u0964", "sutra_num": "3.4.69", "form": "\u0baa\u0bc2"}, {"sutra": "\u0bb5\u0bb0\u0bcd\u0ba4\u0bae\u0bbe\u0ba8\u0bc7 \u0bb2\u0b9f\u0bcd", "sutra_num": "3.2.123", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0bb2\u0bb8\u0bcd\u0baf", "sutra_num": "3.4.77", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0bb9\u0bb2\u0ba8\u0bcd\u0ba4\u0bcd\u0baf\u0bae\u0bcd", "sutra_num": "1.3.3", "form": "\u0baa\u0bc2+\u0bb2\u0901\u0b9f\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0bb2\u0901"}, {"sutra": "\u0b89\u0baa\u0ba4\u0bc7\u0bb6\u0bc7\u093d\u0b9c\u0ba8\u0bc1\u0ba8\u0bbe\u0bb8\u0bbf\u0b95 \u0b87\u0ba4\u0bcd", "sutra_num": "1.3.2", "form": "\u0baa\u0bc2+\u0bb2\u0901"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0bb2\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0baa\u0bcd\u0ba4\u0bb8\u0bcd\u0b9a\u0bbf\u0bb8\u0bbf\u0baa\u0bcd\u0ba4\u0bb8\u0bcd\u0ba4\u0bae\u0bbf\u0baa\u0bcd\u0bb5\u0bb8\u0bcd\u0bae\u0bb8\u0bcd \u0ba4\u0bbe\u0ba4\u0bbe\u0b82\u0b9a\u0ba4\u0bbe\u0bb8\u0bbe\u0ba4\u0bbe\u0b82\u0ba4\u0bcd\u0bb5\u0bae\u0bbf\u0b9f\u0bcd\u0bb5\u0bb9\u0bbf\u0bae\u0bb9\u0bbf\u0b99\u0bcd", "sutra_num": "3.4.78", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb2\u0b83 \u0baa\u0bb0\u0bb8\u0bcd\u0bae\u0bc8\u0baa\u0ba4\u0bae\u0bcd", "sutra_num": "1.4.99", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bb8\u0bcd\u0ba4\u0bcd\u0bb0\u0bc0\u0ba3\u0bbf \u0ba4\u0bcd\u0bb0\u0bc0\u0ba3\u0bbf \u0baa\u0bcd\u0bb0\u0ba4\u0bae\u0bae\u0ba4\u0bcd\u0baf\u0bae\u0bcb\u0ba4\u0bcd\u0ba4\u0bae\u0bbe\u0b83", "sutra_num": "1.4.101", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbe\u0ba8\u0bcd\u0baf\u0bc7\u0b95\u0bb5\u0b9a\u0ba8\u0ba4\u0bcd\u0bb5\u0bbf\u0bb5\u0b9a\u0ba8\u0baa\u0bb9\u0bc1\u0bb5\u0b9a\u0ba8\u0bbe\u0ba8\u0bcd\u0baf\u0bc7\u0b95\u0bb6\u0b83", "sutra_num": "1.4.102", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb6\u0bc7\u0bb7\u0bc7 \u0baa\u0bcd\u0bb0\u0ba4\u0bae\u0b83", "sutra_num": "1.4.108", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bcd\u0bb6\u0bbf\u0ba4\u0bcd\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bae\u0bcd", "sutra_num": "3.4.113", "form": "\u0baa\u0bc2+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0b95\u0bb0\u0bcd\u0ba4\u0bb0\u0bbf \u0bb6\u0baa\u0bcd\u200c", "sutra_num": "3.1.68", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bbf\u0b99\u0bcd\u0bb6\u0bbf\u0ba4\u0bcd\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bae\u0bcd", "sutra_num": "3.4.113", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb2\u0bb6\u0b95\u0bcd\u0bb5\u0ba4\u0ba4\u0bcd\u0ba4\u0bbf\u0ba4\u0bc7", "sutra_num": "1.3.8", "form": "\u0baa\u0bc2+\u0bb6\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0b85\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0bb9\u0bb2\u0ba8\u0bcd\u0ba4\u0bcd\u0baf\u0bae\u0bcd", "sutra_num": "1.3.3", "form": "\u0baa\u0bc2+\u0b85\u0baa\u0bcd+\u0ba4\u0bbf\u0baa\u0bcd"}, {"sutra": "\u0ba4\u0bb8\u0bcd\u0baf \u0bb2\u0bcb\u0baa\u0b83", "sutra_num": "1.3.9", "form": "\u0baa\u0bc2+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0bb8\u0bbe\u0bb0\u0bcd\u0bb5\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0bb0\u0bcd\u0ba4\u0ba4\u0bbe\u0ba4\u0bc1\u0b95\u0baf\u0bcb\u0b83", "sutra_num": "7.3.84", "form": "\u0baa\u0bcb+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0b8f\u0b9a\u0bcb\u093d\u0baf\u0bb5\u0bbe\u0baf\u0bbe\u0bb5\u0b83", "sutra_num": "6.1.78", "form": "\u0baa\u0bb5\u0bcd+\u0b85+\u0ba4\u0bbf"}, {"sutra": "\u0b85\u0ba8\u0bcd\u0ba4\u0bbf\u0bae\u0b82 \u0bb0\u0bc2\u0baa\u0bae\u0bcd", "sutra_num": "-2", "form": "\u0baa\u0bb5\u0ba4\u0bbf"}], "number": "01.0001", "vachana": "\u0b8f\u0b95", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "\u0baa\u0bc2", "purusha": "\u0baa\u0bcd\u0bb0\u0ba4\u0bae", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "\u0bb2\u0b9f\u0bcd", "it_id": "", "it_sutra": "", "meaning": "\u0bb8\u0ba4\u0bcd\u0ba4\u0bbe\u0baf\u0bbe\u0bae\u0bcd", "suffix": "\u0ba4\u0bbf\u0baa\u0bcd"}], "wx": [{"gana": "BvAxi", "madhaviya": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//mA1.html", "kshiratarangini": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//kRi1.html", "padadecider_sutra": "", "jnu": "http://sanskrit.jnu.ac.in/tinanta/tinanta.jsp?t=1", "padadecider_id": "parasmEpaxI", "dhatupradipa": "http://sanskrit.uohyd.ac.in/scl/dhaatupaatha/files-15-03-2017//XA1.html", "prakriya": [{"sutra": "BUvAxayo XAwavaH", "sutra_num": "1.3.1", "form": "BU"}, {"sutra": "laH karmaNi ca BAve cAkarmakeByaH.", "sutra_num": "3.4.69", "form": "BU"}, {"sutra": "varwamAne lat", "sutra_num": "3.2.123", "form": "BU+la~t"}, {"sutra": "lasya", "sutra_num": "3.4.77", "form": "BU+la~t"}, {"sutra": "halanwyam", "sutra_num": "1.3.3", "form": "BU+la~t"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+la~"}, {"sutra": "upaxeSe'janunAsika iw", "sutra_num": "1.3.2", "form": "BU+la~"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+l"}, {"sutra": "wipwasJisipWasWamibvasmas wAwAMJaWAsAWAMXvamidvahimahif", "sutra_num": "3.4.78", "form": "BU+wip"}, {"sutra": "laH parasmEpaxam", "sutra_num": "1.4.99", "form": "BU+wip"}, {"sutra": "wifaswrINi wrINi praWamamaXyamowwamAH", "sutra_num": "1.4.101", "form": "BU+wip"}, {"sutra": "wAnyekavacanaxvivacanabahuvacanAnyekaSaH", "sutra_num": "1.4.102", "form": "BU+wip"}, {"sutra": "SeRe praWamaH", "sutra_num": "1.4.108", "form": "BU+wip"}, {"sutra": "wifSiwsArvaXAwukam", "sutra_num": "3.4.113", "form": "BU+wip"}, {"sutra": "karwari Sap\u200c", "sutra_num": "3.1.68", "form": "BU+Sap+wip"}, {"sutra": "wifSiwsArvaXAwukam", "sutra_num": "3.4.113", "form": "BU+Sap+wip"}, {"sutra": "laSakvawaxXiwe", "sutra_num": "1.3.8", "form": "BU+Sap+wip"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+ap+wip"}, {"sutra": "halanwyam", "sutra_num": "1.3.3", "form": "BU+ap+wip"}, {"sutra": "wasya lopaH", "sutra_num": "1.3.9", "form": "BU+a+wi"}, {"sutra": "sArvaXAwukArXaXAwukayoH", "sutra_num": "7.3.84", "form": "Bo+a+wi"}, {"sutra": "eco'yavAyAvaH", "sutra_num": "6.1.78", "form": "Bav+a+wi"}, {"sutra": "anwimaM rUpam", "sutra_num": "-2", "form": "Bavawi"}], "number": "01.0001", "vachana": "eka", "it_status": "", "uohyd": "http://sanskrit.uohyd.ac.in/cgi-bin/scl/skt_gen/verb/verb_gen.cgi?vb=BU1_BU_BvAxiH_sawwAyAm&prayoga=karwari&encoding=WX&upasarga=-&paxI=parasmEpaxI", "verb": "BU", "purusha": "praWama", "upasarga": "", "verbaccent": "\u092d\u0942\u0951", "lakara": "lat", "it_id": "", "it_sutra": "", "meaning": "sawwAyAm", "suffix": "wip"}]} diff --git a/tox.ini b/tox.ini index cbbe240..ffb626d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,30 +1,30 @@ -[tox] -envlist = py27, py35, py36, flake8 - -[travis] -python = - 3.5: py35 - 3.6: py36 - 3.7: py37 - 2.7: py27 - -[testenv:flake8] -basepython=python -deps=flake8 -commands=flake8 prakriya - -[testenv] -setenv = - PYTHONPATH = {toxinidir} -commands = python setup.py test -deps = -r{toxinidir}/requirements_docs.txt - -[pytest] -addopts = --ignore=setup.py --ignore=travis_pypi_setup.py -python_files = *.py -python_functions = test_ - -; If you want to make tox run the tests with the same versions, create a -; requirements.txt with the pinned versions and uncomment the following lines: -; deps = -; -r{toxinidir}/requirements.txt +[tox] +envlist = py27, py35, py36, flake8 + +[travis] +python = + 3.5: py35 + 3.6: py36 + 3.7: py37 + 2.7: py27 + +[testenv:flake8] +basepython=python +deps=flake8 +commands=flake8 prakriya + +[testenv] +setenv = + PYTHONPATH = {toxinidir} +commands = python setup.py test +deps = -r{toxinidir}/requirements_docs.txt + +[pytest] +addopts = --ignore=setup.py --ignore=travis_pypi_setup.py +python_files = *.py +python_functions = test_ + +; If you want to make tox run the tests with the same versions, create a +; requirements.txt with the pinned versions and uncomment the following lines: +; deps = +; -r{toxinidir}/requirements.txt diff --git a/travis_pypi_setup.py b/travis_pypi_setup.py index c5b0946..8cb94eb 100644 --- a/travis_pypi_setup.py +++ b/travis_pypi_setup.py @@ -1,127 +1,127 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Update encrypted deploy password in Travis config file.""" - - -from __future__ import print_function -import base64 -import json -import os -from getpass import getpass -import yaml -from cryptography.hazmat.primitives.serialization import load_pem_public_key -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 - - -try: - from urllib import urlopen -except ImportError: - from urllib.request import urlopen - - -GITHUB_REPO = 'drdhaval2785/python-prakriya' -TRAVIS_CONFIG_FILE = os.path.join( - os.path.dirname(os.path.abspath(__file__)), '.travis.yml') - - -def load_key(pubkey): - """Load public RSA key. - - Work around keys with incorrect header/footer format. - - Read more about RSA encryption with cryptography: - https://cryptography.io/latest/hazmat/primitives/asymmetric/rsa/ - """ - try: - return load_pem_public_key(pubkey.encode(), default_backend()) - except ValueError: - # workaround for https://github.com/travis-ci/travis-api/issues/196 - pubkey = pubkey.replace('BEGIN RSA', 'BEGIN').replace('END RSA', 'END') - return load_pem_public_key(pubkey.encode(), default_backend()) - - -def encrypt(pubkey, password): - """Encrypt password using given RSA public key and encode it with base64. - - The encrypted password can only be decrypted by someone with the - private key (in this case, only Travis). - """ - key = load_key(pubkey) - encrypted_password = key.encrypt(password, PKCS1v15()) - return base64.b64encode(encrypted_password) - - -def fetch_public_key(repo): - """Download RSA public key Travis will use for this repo. - - Travis API docs: http://docs.travis-ci.com/api/#repository-keys - """ - keyurl = 'https://api.travis-ci.org/repos/{0}/key'.format(repo) - data = json.loads(urlopen(keyurl).read().decode()) - if 'key' not in data: - errmsg = "Could not find public key for repo: {}.\n".format(repo) - errmsg += "Have you already added your GitHub repo to Travis?" - raise ValueError(errmsg) - return data['key'] - - -def prepend_line(filepath, line): - """Rewrite a file adding a line to its beginning.""" - with open(filepath) as f: - lines = f.readlines() - - lines.insert(0, line) - - with open(filepath, 'w') as f: - f.writelines(lines) - - -def load_yaml_config(filepath): - """Load yaml config file at the given path.""" - with open(filepath) as f: - return yaml.load(f) - - -def save_yaml_config(filepath, config): - """Save yaml config file at the given path.""" - with open(filepath, 'w') as f: - yaml.dump(config, f, default_flow_style=False) - - -def update_travis_deploy_password(encrypted_password): - """Put `encrypted_password` into the deploy section of .travis.yml.""" - config = load_yaml_config(TRAVIS_CONFIG_FILE) - - config['deploy']['password'] = dict(secure=encrypted_password) - - save_yaml_config(TRAVIS_CONFIG_FILE, config) - - line = ('# This file was autogenerated and will overwrite' - ' each time you run travis_pypi_setup.py\n') - prepend_line(TRAVIS_CONFIG_FILE, line) - - -def main(args): - """Add a PyPI password to .travis.yml so that Travis can deploy to PyPI. - - Fetch the Travis public key for the repo, and encrypt the PyPI password - with it before adding, so that only Travis can decrypt and use the PyPI - password. - """ - public_key = fetch_public_key(args.repo) - password = args.password or getpass('PyPI password: ') - update_travis_deploy_password(encrypt(public_key, password.encode())) - print("Wrote encrypted password to .travis.yml -- you're ready to deploy") - - -if '__main__' == __name__: - import argparse - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('--repo', default=GITHUB_REPO, - help='GitHub repo (default: %s)' % GITHUB_REPO) - parser.add_argument('--password', - help='PyPI password (will prompt if not provided)') - - args = parser.parse_args() - main(args) +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Update encrypted deploy password in Travis config file.""" + + +from __future__ import print_function +import base64 +import json +import os +from getpass import getpass +import yaml +from cryptography.hazmat.primitives.serialization import load_pem_public_key +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15 + + +try: + from urllib import urlopen +except ImportError: + from urllib.request import urlopen + + +GITHUB_REPO = 'drdhaval2785/python-prakriya' +TRAVIS_CONFIG_FILE = os.path.join( + os.path.dirname(os.path.abspath(__file__)), '.travis.yml') + + +def load_key(pubkey): + """Load public RSA key. + + Work around keys with incorrect header/footer format. + + Read more about RSA encryption with cryptography: + https://cryptography.io/latest/hazmat/primitives/asymmetric/rsa/ + """ + try: + return load_pem_public_key(pubkey.encode(), default_backend()) + except ValueError: + # workaround for https://github.com/travis-ci/travis-api/issues/196 + pubkey = pubkey.replace('BEGIN RSA', 'BEGIN').replace('END RSA', 'END') + return load_pem_public_key(pubkey.encode(), default_backend()) + + +def encrypt(pubkey, password): + """Encrypt password using given RSA public key and encode it with base64. + + The encrypted password can only be decrypted by someone with the + private key (in this case, only Travis). + """ + key = load_key(pubkey) + encrypted_password = key.encrypt(password, PKCS1v15()) + return base64.b64encode(encrypted_password) + + +def fetch_public_key(repo): + """Download RSA public key Travis will use for this repo. + + Travis API docs: http://docs.travis-ci.com/api/#repository-keys + """ + keyurl = 'https://api.travis-ci.org/repos/{0}/key'.format(repo) + data = json.loads(urlopen(keyurl).read().decode()) + if 'key' not in data: + errmsg = "Could not find public key for repo: {}.\n".format(repo) + errmsg += "Have you already added your GitHub repo to Travis?" + raise ValueError(errmsg) + return data['key'] + + +def prepend_line(filepath, line): + """Rewrite a file adding a line to its beginning.""" + with open(filepath) as f: + lines = f.readlines() + + lines.insert(0, line) + + with open(filepath, 'w') as f: + f.writelines(lines) + + +def load_yaml_config(filepath): + """Load yaml config file at the given path.""" + with open(filepath) as f: + return yaml.load(f) + + +def save_yaml_config(filepath, config): + """Save yaml config file at the given path.""" + with open(filepath, 'w') as f: + yaml.dump(config, f, default_flow_style=False) + + +def update_travis_deploy_password(encrypted_password): + """Put `encrypted_password` into the deploy section of .travis.yml.""" + config = load_yaml_config(TRAVIS_CONFIG_FILE) + + config['deploy']['password'] = dict(secure=encrypted_password) + + save_yaml_config(TRAVIS_CONFIG_FILE, config) + + line = ('# This file was autogenerated and will overwrite' + ' each time you run travis_pypi_setup.py\n') + prepend_line(TRAVIS_CONFIG_FILE, line) + + +def main(args): + """Add a PyPI password to .travis.yml so that Travis can deploy to PyPI. + + Fetch the Travis public key for the repo, and encrypt the PyPI password + with it before adding, so that only Travis can decrypt and use the PyPI + password. + """ + public_key = fetch_public_key(args.repo) + password = args.password or getpass('PyPI password: ') + update_travis_deploy_password(encrypt(public_key, password.encode())) + print("Wrote encrypted password to .travis.yml -- you're ready to deploy") + + +if '__main__' == __name__: + import argparse + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--repo', default=GITHUB_REPO, + help='GitHub repo (default: %s)' % GITHUB_REPO) + parser.add_argument('--password', + help='PyPI password (will prompt if not provided)') + + args = parser.parse_args() + main(args)