├── .github ├── FUNDING.yml └── workflows │ └── pythonpackage.yml ├── .gitignore ├── .readthedocs.yaml ├── .travis.yml ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── chandas ├── __init__.py ├── chandas_relation │ ├── __init__.py │ ├── ardhasama.py │ └── data │ │ ├── Chandas छन्दः - अर्धसम.csv │ │ ├── ardhasama_prefix.csv │ │ └── ardhasama_suffix.csv ├── svat │ ├── __init__.py │ ├── data │ │ ├── __init__.py │ │ ├── curated.json │ │ ├── curated.py │ │ ├── dhaval_mishra.py │ │ ├── dhaval_vrttaratnakara.py │ │ ├── ganesh.json │ │ ├── ganesh.py │ │ ├── metrical_data.py │ │ ├── mishra.json │ │ └── vrttaratnakara.json │ ├── identify │ │ ├── README.org │ │ ├── __init__.py │ │ └── identifier.py │ └── read │ │ ├── __init__.py │ │ ├── filters.py │ │ ├── read.py │ │ └── split_gretil.py └── syllabize.py ├── docs └── index.rst ├── requirements.txt ├── scrapers ├── ardhasama.csv ├── sama.csv ├── tmp.csv └── viShama.csv ├── setup.py ├── tests ├── __init__.py ├── data │ ├── chandasIdTests.json │ └── syllabizationTests.json ├── identify_test.py └── syllabize_test.py └── tox.ini /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: vvasuki # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | -------------------------------------------------------------------------------- /.github/workflows/pythonpackage.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a variety of Python versions 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions 3 | 4 | name: Python package 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | workflow_dispatch: 12 | inputs: 13 | logLevel: 14 | default: 'warning' 15 | 16 | jobs: 17 | build: 18 | permissions: 19 | id-token: write # IMPORTANT: this permission is mandatory for trusted publishing 20 | 21 | runs-on: ubuntu-latest 22 | strategy: 23 | matrix: 24 | python-version: [3.9] 25 | # python-version: [3.5, 3.6, 3.7, 3.8] 26 | 27 | steps: 28 | - name: Inject slug/short variables 29 | uses: rlespinasse/github-slug-action@v3.x 30 | - uses: actions/checkout@master 31 | # - name: Install ubuntu deps 32 | # run: | 33 | # sudo apt-get update 34 | - name: Set up Python ${{ matrix.python-version }} 35 | uses: actions/setup-python@v1 36 | with: 37 | python-version: ${{ matrix.python-version }} 38 | - name: Install dependencies 39 | run: | 40 | python -m pip install --upgrade pip 41 | 42 | # # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 43 | # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 44 | #The below is disabled pending https://github.com/sanskrit-coders/jyotisha/runs/1142973750 45 | - name: Build package 46 | run: | 47 | python -m pip install . 48 | pip install setuptools wheel twine 49 | python setup.py bdist_wheel 50 | - name: Build test 51 | run: | 52 | python -c "import chandas" 53 | - name: Test with pytest 54 | run: | 55 | pip install pytest 56 | pytest 57 | - name: Upload package 58 | if: ${{ github.event_name != 'pull_request'}} 59 | with: 60 | skip-existing: true 61 | uses: pypa/gh-action-pypi-publish@release/v1 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # general things to ignore 2 | /build/ 3 | dist/ 4 | .pytest_cache/ 5 | *.egg-info/ 6 | *.egg 7 | *.py[cod] 8 | __pycache__/ 9 | *.so 10 | *~ 11 | 12 | # due to using tox and pytest 13 | .tox 14 | .cache 15 | 16 | *.iml -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file for Sphinx projects 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | # Required 5 | version: 2 6 | 7 | # Set the OS, Python version and other tools you might need 8 | build: 9 | os: ubuntu-22.04 10 | tools: 11 | python: "3.12" 12 | # You can also specify other tool versions: 13 | # nodejs: "20" 14 | # rust: "1.70" 15 | # golang: "1.20" 16 | 17 | # Build documentation in the "docs/" directory with Sphinx 18 | sphinx: 19 | configuration: docs/conf.py 20 | # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs 21 | # builder: "dirhtml" 22 | # Fail on all warnings to avoid broken references 23 | # fail_on_warning: true 24 | 25 | # Optionally build your docs in additional formats such as PDF and ePub 26 | # formats: 27 | # - pdf 28 | # - epub 29 | 30 | # Optional but recommended, declare the Python requirements required 31 | # to build your documentation 32 | # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html 33 | # python: 34 | # install: 35 | # - requirements: docs/requirements.txt -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: python 3 | python: 4 | - "3.6" 5 | dist: trusty 6 | addons: # get google-chrome-stable 7 | chrome: stable 8 | install: # Install ChromeDriver (64bits; replace 64 with 32 for 32bits). 9 | - wget -N http://chromedriver.storage.googleapis.com/2.45/chromedriver_linux64.zip -P ~/ 10 | - unzip ~/chromedriver_linux64.zip -d ~/ 11 | - rm ~/chromedriver_linux64.zip 12 | - sudo mv -f ~/chromedriver /usr/local/share/ 13 | - sudo chmod +x /usr/local/share/chromedriver 14 | - sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver 15 | - pip install tox travis 16 | script: 17 | - whereis google-chrome-stable 18 | - whereis chromedriver 19 | - tox 20 | notifications: 21 | email: 22 | on_success: never # default: change 23 | on_failure: change # default: always 24 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 (Sanskrit Coders and contributors to this repository) 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | # Include the license file 2 | include LICENSE.txt 3 | 4 | # Include the data files 5 | # recursive-include data * 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Chandas 2 | 3 | [![Build Status](https://travis-ci.org/sanskrit-coders/chandas.svg?branch=master)](https://travis-ci.org/sanskrit-coders/chandas) 4 | [![Documentation Status](https://readthedocs.org/projects/chandas/badge/?version=latest)](http://chandas.readthedocs.io/en/latest/?badge=latest) 5 | [![Actions Status](https://github.com/sanskrit-coders/chandas/workflows/Python%20package/badge.svg)](https://github.com/sanskrit-coders/chandas/actions) 6 | [![PyPI version](https://badge.fury.io/py/chandas.svg)](https://badge.fury.io/py/chandas) 7 | 8 | ### Intro 9 | This is a python package for Indic language (mostly sanskrit) metre identification and related tasks like syllabization. This module expects devanAgarI input, and currently produces IAST output. 10 | 11 | ## For users 12 | * [Autogenerated Docs on readthedocs (might be broken)](http://chandas.readthedocs.io/en/latest/). 13 | * Manually and periodically generated docs [here](https://sanskrit-coders.github.io/chandas/build/html/) 14 | * For detailed examples and help, please see individual module files in this package. 15 | 16 | ### Installation or upgrade: 17 | - `sudo apt-get install build-essential pkg-config libicu-dev` 18 | - `sudo pip install chandas -U` 19 | - `sudo pip install git+https://github.com/sanskrit-coders/chandas/@master -U` 20 | - [Web](https://pypi.python.org/pypi/chandas). 21 | 22 | 23 | ### Usage 24 | For more examples, see tests. 25 | 26 | #### Metre Identification 27 | ``` 28 | from chandas import identify 29 | pattern_lines = identify.to_pattern_lines("निर्दिष्टाङ् कुलपतिना स पर्णशालाम् अध्यास्य प्रयतपरिग्रहद्वितीयः ।\nतच्छिष्याध्ययननिवेदितावसानां सव्ँविष्टः कुशशयने निशान् निनाय ॥".split("\n")) 30 | id_result = identify.identifier.IdentifyFromPatternLines(pattern_lines) 31 | assert id_result['exact'] == "Praharṣiṇī" 32 | ``` 33 | 34 | #### Syllabization 35 | ``` 36 | from chandas import syllabize 37 | syllabize.get_syllables(u"ॐ मणि पद्मे ऽहम्") == "ओम् म णि पद् मे हम्" 38 | syllabize.get_graphemes(u"बिक्रममेरोनामहो") == "बि क् र म मे रो ना म हो".split(" ") 39 | ``` 40 | 41 | ### Shared test data 42 | Please feel free to use test data published here to test your own modules: 43 | - [syllabizationTests.json](https://github.com/sanskrit-coders/chandas/blob/master/src/test/data/syllabizationTests.json) 44 | 45 | ## For external collaborators 46 | - We copy the data and identification code from [shreevatsa's repo](https://github.com/shreevatsa/sanskrit/). This code has been transformed a bit to conform to PEP conventions. 47 | - You may be interested in sharing and contributing to a common pool of test cases - see the chandas-id and syllabization tests under https://github.com/sanskrit-coders/chandas/tree/master/tests/data . 48 | 49 | ## For contributors 50 | ### Contact 51 | 52 | Have a problem or question? Please head to [github](https://github.com/sanskrit-coders/chandas). 53 | 54 | ### Packaging 55 | 56 | * ~/.pypirc should have your pypi login credentials. 57 | ``` 58 | python setup.py bdist_wheel 59 | twine upload dist/* --skip-existing 60 | ``` 61 | 62 | ### Build documentation 63 | - sphinx html docs can be generated with `cd docs; make html` 64 | 65 | ### Testing 66 | Run `pytest` in the root directory. 67 | 68 | ### Auxiliary tools 69 | - [![Build Status](https://travis-ci.org/sanskrit-coders/chandas.svg?branch=master)](https://travis-ci.org/sanskrit-coders/chandas) 70 | - [![Documentation Status](https://readthedocs.org/projects/indic-transliteration/badge/?version=latest)](http://indic-transliteration.readthedocs.io/en/latest/?badge=latest) 71 | - [pyup](https://pyup.io/account/repos/github/sanskrit-coders/chandas/) 72 | 73 | -------------------------------------------------------------------------------- /chandas/__init__.py: -------------------------------------------------------------------------------- 1 | from chandas import syllabize 2 | from chandas.svat.data import metrical_data 3 | from chandas.svat.identify import identifier 4 | 5 | metrical_data.InitializeData() 6 | svat_identifier = identifier.Identifier(metrical_data=metrical_data) 7 | 8 | def to_pattern_lines(input_lines): 9 | pattern_lines = ["".join(syllabize.to_weight_list(line)) for line in input_lines] 10 | return pattern_lines 11 | -------------------------------------------------------------------------------- /chandas/chandas_relation/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | import sys, os 4 | sys.path.append(os.path.abspath('..')) 5 | from chandas import syllabize 6 | import unicodecsv 7 | import codecs 8 | 9 | def count_mAtrAs(pattern_str): 10 | graphemes = syllabize.get_graphemes(pattern_str) 11 | mAtrA_count = 0 12 | for grapheme in graphemes: 13 | if grapheme == 'द': 14 | mAtrA_count = mAtrA_count + 1 15 | if grapheme == 'दा': 16 | mAtrA_count = mAtrA_count + 2 17 | return mAtrA_count 18 | 19 | # def removeNonAscii(s): return "".join(filter(lambda x: ord(x)<128, s)) 20 | def get_common_prefix(strings): 21 | b = zip(*map(lambda x: syllabize.get_graphemes(x), strings)) 22 | from itertools import takewhile 23 | prefix_tuples = takewhile(lambda x: x[0]*len(x) == "".join(x), b) 24 | result = " ".join(x[0] for x in prefix_tuples) 25 | return result 26 | 27 | def _reverse(string): 28 | return string[::-1] 29 | 30 | def get_common_suffix(strings): 31 | s = get_common_prefix(map(_reverse, strings)) 32 | return _reverse(s) 33 | 34 | if __name__ == '__main__': 35 | data_file = u'data/Chandas छन्दः - सम.csv' 36 | sama_file = u'data/sama_mAtrA.csv' 37 | 38 | with open(data_file, 'r') as csvfile, codecs.open(sama_file, 'w', 'utf-8') as outfile: 39 | chandas_reader = unicodecsv.reader(csvfile, encoding='utf-8') 40 | for chandas in chandas_reader: 41 | mAtrA_count = count_mAtrAs(chandas[3]) 42 | print(mAtrA_count) 43 | outfile.write('%d\n' % mAtrA_count) 44 | -------------------------------------------------------------------------------- /chandas/chandas_relation/ardhasama.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import sys 4 | 5 | from chandas import chandas_relation 6 | 7 | sys.path.append(os.path.abspath('..')) 8 | 9 | import unicodecsv 10 | import codecs 11 | 12 | if __name__ == '__main__': 13 | data_file = u'data/Chandas छन्दः - अर्धसम.csv' 14 | out_file = u'data/ardhasama_prefix.csv' 15 | suffix_file_name = u'data/ardhasama_suffix.csv' 16 | 17 | with open(data_file, 'r') as csvfile, codecs.open(out_file, 'w', 'utf-8') as outfile, codecs.open(suffix_file_name, 'w', 'utf-8') as suffix_file: 18 | chandas_reader = unicodecsv.reader(csvfile, encoding='utf-8') 19 | for chandas in chandas_reader: 20 | prefix = chandas_relation.get_common_prefix([chandas[3], chandas[5]]) 21 | outfile.write(prefix + '\n') 22 | suffix = chandas_relation.get_common_suffix([chandas[3], chandas[5]]) 23 | suffix_file.write(suffix + '\n') 24 | -------------------------------------------------------------------------------- /chandas/chandas_relation/data/Chandas छन्दः - अर्धसम.csv: -------------------------------------------------------------------------------- 1 | नाम,अक्षराणि,विषमे-स्वराः,विषमयोर् मात्राः,समे-सङ्ख्या,समयोर् मात्राः,प्रसिद्धिः,पादयोः साम्यम्,जातिः,जातिः २,उदाहरणम्,मुख्यांशः 2 | वैसारी,38,9,दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,,,,,, 3 | वासववन्दिता,38,10,दा दा दा द द दा द दा द दा,9,दा दा द द दा द दा द दा,,,,,, 4 | अतैलम्,40,10,द दा द दा दा द दा दा द दा,10,दा दा द दा दा द दा दा द दा,,,,,, 5 | आलोलघटिका,40,10,द द दा द द दा द दा द दा,10,दा दा द द द दा द दा द दा,,,,,, 6 | घटिका,40,10,दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,,,,,, 7 | प्रभासिता,40,10,दा दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,,,,,, 8 | प्रभासिता,40,10,द द दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,,,,,, 9 | विश्वप्रमा,40,10,दा दा द दा दा द दा दा द दा,10,द दा द दा दा द दा दा द दा,,,,,, 10 | करधा,42,10,दा दा दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,,,,,, 11 | केतुमती,42,10,द द दा द दा द द द दा दा,11,दा द द दा द दा द द द दा दा,,,,,, 12 | भद्रविराट्,42,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 13 | वेगवती,42,10,द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,,,,,, 14 | समुद्रकान्ता,42,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 15 | सुधा,42,10,दा दा दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,,,,,, 16 | "वियोगिनी/ सुन्दरी 17 | [वैतालीयम्]",42,10,द द दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,५,,इक्षतां मात्राछन्दस्सु वैतालीयम्।,,"sahasā vidadhīta na kriyām 18 | avivekaḥ param āpadāṃ padam / 19 | vṛṇate hi vimṛśyakāriṇo 20 | guṇalabdhāḥ svayam eva sampadaḥ ", 21 | असुधा,42,11,द द दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,,,,,, 22 | कान्ता,42,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 23 | केतुः,42,11,दा द द दा द दा द द द दा दा,10,द द दा द दा द द द दा दा,,,,,, 24 | युद्धविराट्,42,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 25 | वर्गवती,42,11,दा द द दा द द दा द द दा दा,10,द द दा द द दा द द दा दा,,,,,, 26 | वैयाली,42,11,द द द द द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,,,,,, 27 | सुन्दरी,42,11,द द दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,,,,,, 28 | अरुन्तुदः,44,10,द द दा द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,,,,,, 29 | नवनीलता,44,10,द द दा द द दा द दा द दा,12,द द दा दा द द द दा द दा द दा,,,,,, 30 | संपातशीला,44,10,दा दा द दा दा दा दा द दा दा,12,द द दा द द द दा दा दा द दा दा,,,,,, 31 | अयवती,44,11,द द दा दा दा दा द द द द दा,11,दा दा द द द द दा दा द द दा,,,,,, 32 | अवहित्रा,44,11,दा द द दा द द दा द द दा दा,11,द द दा द द दा द द दा द द,,,,,, 33 | आख्यानकी,44,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,,,,,, 34 | उपचित्रा,44,11,द द दा द द दा द द दा द द,11,दा द द दा द द दा द द दा दा,,,,,, 35 | औपगवम्,44,11,द द द दा द दा दा द दा द दा,11,दा द द दा द दा दा द दा द दा,,,,,, 36 | औपगवीतम्,44,11,दा द द दा द दा दा द दा द दा,11,द द द दा द दा दा द दा द दा,,,,,, 37 | करभोद्धता,44,11,दा द द दा दा द दा द दा द दा,11,द द दा द द द दा द दा द दा,,,,,, 38 | कर्णिनी,44,11,दा द दा द द द दा द द दा दा,11,दा द दा द द द दा द दा द दा,,,,,, 39 | भद्रा,44,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,,,,,, 40 | विपरीताख्यानकी,44,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,,,,,, 41 | शालभञ्जिका,44,11,द द दा द द द दा द दा द दा,11,दा द द दा दा द दा द दा द दा,,,,,, 42 | समयवती,44,11,दा दा द द द द दा दा द द दा,11,द द दा दा दा दा द द द द दा,,,,,, 43 | सारिका,44,11,दा द दा द द द दा द दा द दा,11,दा द दा द द द दा द द दा दा,,,,,, 44 | हंसी,44,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,,,,,, 45 | अनूपकम्,44,12,द द द द दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,,,,,, 46 | करीरिता,44,12,द द दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,,,,,, 47 | पातशीला,44,12,द द दा द द द दा दा दा द दा दा,10,दा दा द दा दा दा दा द दा दा,,,,,, 48 | जारिणी,46,10,द द द दा दा द दा दा द दा,13,दा द दा दा द दा द द द दा दा द दा,,,,,, 49 | शुकावली,46,10,दा दा द द दा द दा द दा दा,13,दा दा दा द द द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 50 | अपरवक्त्रम्,46,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,,,,,, 51 | असुराढ्या,46,11,दा दा दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 52 | उपाढ्यम्,46,11,द द द द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 53 | उपोद्गता,46,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 54 | कमलाकरा,46,11,दा द द दा द द दा द द दा दा,12,दा द द द द द द दा द द दा दा,,,,,, 55 | किन्नटकः,46,11,दा दा द द दा द द दा द द दा,12,द द दा द द दा द द दा द द दा,,,,,, 56 | किलिकिता,46,11,दा द दा द द द दा द दा द दा,12,द द द दा द द द दा द दा द दा,,,,,, 57 | कोरकिता,46,11,दा द द दा द द दा द द दा दा,12,द द द द दा दा द द द द दा दा,,,,,, 58 | द्रुतमध्या,46,11,दा द द दा द द दा द द दा दा,12,द द द द दा द द दा द द दा दा,,,,,, 59 | "वसन्तमालिका 60 | मालभरणी",46,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,वसन्तमालिका-पादौ,"इक्षतां मात्राछन्दस्सु औपछन्दसिकम्। 61 | शोके।","मधुरोपवनं निरीक्ष्य दूये 62 | बहुशः खण्डित-नालिकेर-षण्डम् । 63 | परितो नृ-करोटि-कोटि-हार- 64 | प्रचलत्-शूल-परम्परा-परीतम् ", 65 | विमानिनी,46,11,द द दा दा द द दा द दा द दा,12,दा दा दा द द द द दा द दा द दा,,,,,, 66 | शिशिरशिखा,46,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,,,,,, 67 | साचीकृतवदना,46,11,द द द द दा दा दा द द दा दा,12,दा दा द द द द दा द द द द दा,,,,,, 68 | हरिणीप्लुता,46,11,द द दा द द दा द द दा द दा,12,द द द दा द द दा द द दा द दा,,,,,, 69 | हरिलुप्ता,46,11,द द दा द द दा द द दा द दा,12,द द दा दा द द दा द द दा द दा,,,,,, 70 | अकुसुमचरम्,46,12,दा द द द द द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,,,,,, 71 | अवाचीकृतवदना,46,12,दा दा द द द द दा द द द द दा,11,द द द द दा दा दा द द दा दा,,,,,, 72 | ईहा,46,12,द द द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,,,,,, 73 | उपाढ्यम्,46,12,दा द द दा द द दा द दा द दा दा,11,द द द द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 74 | उपोद्गता,46,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,वसन्तमालिका-पादौ,"इक्षतां मात्राछन्दस्सु औपछन्दसिकम्। 75 | शोके।",, 76 | किलिकिता,46,12,द द द दा द द द दा द दा द दा,11,दा द दा द द द दा द दा द दा,,,,,, 77 | नटकः,46,12,द द दा द द दा द द दा द द दा,11,दा दा द द दा द द दा द द दा,,,,,, 78 | परवक्त्रम्,46,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,,,,,, 79 | पाटलिका,46,12,द द द द दा दा द द द द दा दा,11,दा द द दा द द दा द द दा दा,,,,,, 80 | प्रमालिका,46,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 81 | मृदुमालती,46,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,,,,,, 82 | लुप्ता,46,12,द द दा दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,,,,,, 83 | विमानिनी,46,12,दा दा दा द द द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,,,,,, 84 | सुराढ्या,46,12,द द द द द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 85 | हरिणीप्लुता,46,12,द द द दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,,,,,, 86 | अलिपदम्,46,13,दा द दा दा द दा द द द दा दा द दा,10,द द द दा दा द दा दा द दा,,,,,, 87 | किंशुकावली,46,13,दा दा दा द द द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 88 | विलासवापी,48,10,दा दा द द दा द दा द दा दा,14,द द दा दा द द दा द दा द दा द दा दा,,,,,, 89 | बद्धा,48,11,दा दा दा दा द द द द द द दा,13,द द दा द द दा द द द द द द दा,,,,,, 90 | अर्भकपङ्क्तिः,48,12,द द दा दा द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 91 | उपमेया,48,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,,,,,, 92 | उपसरसीकम्,48,12,द द दा दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,,,,,, 93 | उलपोहा,48,12,दा द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 94 | वियद्वाणी,48,12,द द दा दा द द दा द दा द दा दा,12,दा दा दा द द दा द दा द दा दा दा,,द द दा द दा द दा दा,,,, 95 | वियद्वाणी,48,12,दा दा दा द द दा द दा द दा दा दा,12,द द दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 96 | शिशिरा,48,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,,,,,, 97 | सरसीकम्,48,12,दा दा द दा द द द दा द द दा दा,12,द द दा दा द द द दा द द दा दा,,,,,, 98 | कामाक्षी,48,13,द द दा द द दा द द द द द द दा,11,दा दा दा दा द द द द द द दा,,,,,, 99 | अकोषकृष्टा,48,14,द द दा दा द द दा द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,,,,,, 100 | सुरभिः,50,11,द द दा द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,वसन्तमालिका +‌पुष्पिताग्रा,,, 101 | अप्रमाथिनी,50,12,द द दा दा द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 102 | अमरावती,50,12,दा द दा द दा द दा द दा द दा द,13,द दा द दा द दा द दा द दा द दा दा,,,,,, 103 | चमूरुभीरुः,50,12,दा द दा द द द द दा द दा द दा,13,द द दा द द द द दा द दा द दा दा,,,,,, 104 | पद्मावती,50,12,दा दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द द दा दा,,,,,, 105 | पुष्पिताग्रा,50,12,द द द द द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,५,द द दा द दा द दा दा,,,, 106 | अञ्चिताग्रा,50,13,द द द द दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 107 | अमरावती,50,13,द दा द दा द दा द दा द दा द दा दा,12,दा द दा द दा द दा द दा द दा द,,,,,, 108 | चमूरुः,50,13,द द दा द द द द दा द दा द दा दा,12,दा द दा द द द द दा द दा द दा,,,,,, 109 | पद्मावती,50,13,द द दा द दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,,,,,, 110 | प्रमाथिनी,50,13,द द द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,,द द दा द दा द दा दा,,,, 111 | अतिसुरहिता,52,13,दा दा द द द द द द द द द द दा,13,द द द द द द द द दा द द दा दा,,,,,, 112 | अनङ्गपदम्,52,13,दा द द दा द द दा द द दा द द दा,13,द द दा द द दा द द दा द द दा दा,,,,,, 113 | अनिरया,52,13,द द द दा द द द द दा द दा द दा,13,द द द दा द द द दा द द दा द दा,,,,,, 114 | अर्धरुतम्,52,13,दा द द द द द द दा दा द द द द,13,दा द द द द द द दा द द दा द द,,,,,, 115 | अल्परुतम्,52,13,दा द द द द द द दा द द दा द द,13,दा द द द द द द दा दा द द द द,,,,,, 116 | कलना,52,13,द द दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द दा द दा,,,,,, 117 | कलनावती,52,13,द द दा द दा द द द दा द दा द दा,13,द द दा द दा द द द दा द द दा दा,,,,,, 118 | धीरावर्त्तः,52,13,दा दा दा दा दा द द दा दा द द दा दा,13,दा दा दा दा द द द द दा दा दा दा दा,,,,,, 119 | धीरावर्त्तः,52,13,दा दा दा दा द द द द दा दा दा दा दा,13,दा दा दा दा दा द द दा दा द द दा दा,,,,,, 120 | निर्मधुवारि,52,13,दा दा द दा द द दा द दा द द दा द,13,द द दा द दा द द द दा द दा द दा,,,,,, 121 | भुजङ्गभृता,52,13,द द दा द द दा द द दा द द दा दा,13,दा द द दा द द दा द द दा द द दा,,,,,, 122 | मधुवारि,52,13,द द दा द दा द द द दा द दा द दा,13,दा दा द दा द द दा द दा द द दा द,,,,,, 123 | रुचिमुखी,52,13,द द द द द द द द दा द द दा दा,13,द द द द द द दा द द द द दा दा,,,,,, 124 | विमुखी,52,13,द द द द द द दा द द द द दा दा,13,द द द द द द द द दा द द दा दा,,,,,, 125 | शिशुमुखी,52,13,द द द दा द द द दा द द दा द दा,13,द द द दा द द द द दा द दा द दा,,,,,, 126 | सुरहिता,52,13,द द द द द द द द दा द द दा दा,13,दा दा द द द द द द द द द द दा,,,,,, 127 | शरावती,54,12,द द द द द द दा द दा द दा दा,15,द द दा दा द द द द द द दा द दा द दा,,,,,, 128 | आलेपनम्,54,13,द द द दा दा द दा दा द दा दा द दा,14,द द द दा द द द दा दा द दा दा द दा,,,,,, 129 | प्रतिविनीता,54,13,द द द द दा दा द दा द दा द दा दा,14,द द दा दा द द दा द दा द द द दा दा,,,,,, 130 | मदाक्रान्ता,54,13,द द दा द द दा द दा द दा द दा दा,14,दा दा दा द द दा द दा द दा द दा दा दा,,,,,, 131 | लास्यलीलालयः,54,13,दा दा द द दा दा दा द दा दा द दा दा,14,दा द द द द दा दा दा द दा दा द दा दा,,,,,, 132 | अतिप्रतिविनीता,54,14,द द दा दा द द दा द दा द द द दा दा,13,द द द द दा दा द दा द दा द दा दा,,,,,, 133 | अनालेपनम्,54,14,द द द दा द द द दा दा द दा दा द दा,13,द द द दा दा द दा दा द दा दा द दा,,,,,, 134 | लास्यलीला,54,14,दा द द द द दा दा दा द दा दा द दा दा,13,दा दा द द दा दा दा द दा दा द दा दा,,,,,, 135 | सम्मदाक्रान्ता,54,14,दा दा दा द द दा द दा द दा द दा दा दा,13,द द दा द द दा द दा द दा द दा दा,,,,,, 136 | बृहच्छरावती,54,15,द द दा दा द द द द द द दा द दा द दा,12,द द द द द द दा द दा द दा दा,,,,,, 137 | अहीनताली,56,12,दा दा दा द द द द दा द दा द दा,16,द द दा दा द द द द दा द दा द दा द दा दा,,,,,, 138 | हीनताली,56,16,द द दा दा द द द द दा द दा द दा द दा दा,12,दा दा दा द द द द दा द दा द दा,,,,,, 139 | परप्रीणिता,58,13,द द द द द द दा दा द दा दा द दा,16,द द द द द द द द दा दा दा द दा दा द दा,,,,,, 140 | अवरोधवनिता,58,14,द द द दा द द दा द द दा द दा द दा,15,द द दा द द दा द दा द दा द द द दा दा,,,,,, 141 | प्रमोदपरिणीता,58,14,द द द द द द दा द दा द दा द दा दा,15,द द द द दा द द दा द दा द द द दा दा,,,,,, 142 | अवरोधवनिता,58,15,द द दा द द दा द दा द दा द द द दा दा,14,द द द दा द द दा द द दा द दा द दा,,,,,, 143 | प्रमोदपदम्,58,15,द द द द दा द द दा द दा द द द दा दा,14,द द द द द द दा द दा द दा द दा दा,,,,,, 144 | अपरप्रीणिता,58,16,द द द द द द द द दा दा दा द दा दा द दा,13,द द द द द द दा दा द दा दा द दा,,,,,, 145 | आसववासिता,62,15,द द द दा द द द दा द दा द दा द दा दा,16,द द दा दा द द दा द दा द दा द द द दा दा,,,,,, 146 | अनासववासिता,62,16,द द दा दा द द दा द दा द दा द द द दा दा,15,द द द दा द द द दा द दा द दा द दा दा,,,,,, 147 | मार्दङ्गी,64,14,द द दा द द द द द दा द द द दा दा,18,दा दा दा द द द द दा द द द द द द द द दा दा,,,,,, 148 | वासववासिनी,64,16,द द द द दा द दा द द द दा द द दा द दा,16,दा दा द द दा द दा द द द दा द द दा द दा,,,,,, 149 | वासिनी,64,16,दा दा द द दा द दा द द द दा द द दा द दा,16,द द द द दा द दा द द द दा द द दा द दा,,,,,, 150 | मार्दङ्गी,64,18,दा दा दा द द द द दा द द द द द द द द दा दा,14,द द दा द द द द द दा द द द दा दा,,,,,, -------------------------------------------------------------------------------- /chandas/chandas_relation/data/ardhasama_prefix.csv: -------------------------------------------------------------------------------- 1 | 2 | दा दा 3 | दा दा 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | दा दा 13 | 14 | दा दा 15 | 16 | द द दा 17 | 18 | दा दा 19 | 20 | दा दा 21 | 22 | 23 | द द दा 24 | द द 25 | द द दा 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | दा द दा द द द दा द 35 | 36 | 37 | 38 | 39 | दा द दा द द द दा द 40 | 41 | द द 42 | द द दा 43 | 44 | 45 | दा दा 46 | द द द द 47 | 48 | 49 | द द दा 50 | दा द द 51 | 52 | 53 | 54 | 55 | द द दा 56 | 57 | द द द द 58 | 59 | द द 60 | द द दा 61 | दा द द 62 | 63 | 64 | 65 | द द दा 66 | 67 | 68 | द द द द 69 | 70 | द द दा 71 | द द द द 72 | द द दा 73 | 74 | 75 | द द 76 | 77 | दा दा 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | द द 91 | द द 92 | 93 | 94 | 95 | द द द द 96 | द द द द 97 | 98 | 99 | 100 | द द 101 | 102 | 103 | द द द दा द द द 104 | दा द द द द द द दा 105 | दा द द द द द द दा 106 | द द दा द दा द द द दा द 107 | द द दा द दा द द द दा द 108 | दा दा दा दा 109 | दा दा दा दा 110 | 111 | 112 | 113 | द द द द द द 114 | द द द द द द 115 | द द द दा द द द 116 | 117 | द द 118 | द द द दा 119 | द द 120 | 121 | दा 122 | द द 123 | द द द दा 124 | दा 125 | 126 | द द 127 | 128 | 129 | द द द द द द 130 | द द 131 | द द द द 132 | द द 133 | द द द द 134 | द द द द द द 135 | द द 136 | द द 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /chandas/chandas_relation/data/ardhasama_suffix.csv: -------------------------------------------------------------------------------- 1 | मात्राः 2 | दा दा द द दा द दा द दा 3 | दा दा द द दा द दा द दा 4 | दा द दा दा द दा दा द दा 5 | द द दा द दा द दा 6 | द द दा द दा द दा 7 | दा द द दा द दा द दा 8 | दा द द दा द दा द दा 9 | दा द दा दा द दा दा द दा 10 | द द दा द दा द दा 11 | द द दा द दा द द द दा दा 12 | दा दा द द दा द दा द दा दा 13 | द द दा द द दा द द दा दा 14 | दा दा द द दा द दा द दा दा 15 | दा दा द द दा द दा द दा 16 | दा द द दा द दा द दा 17 | दा दा द द दा द दा द दा 18 | दा दा द द दा द दा द दा दा 19 | द द दा द दा द द द दा दा 20 | दा दा द द दा द दा द दा दा 21 | द द दा द द दा द द दा दा 22 | द द दा द दा द दा 23 | दा द द दा द दा द दा 24 | द द दा द द दा द दा द दा 25 | द द दा द दा द दा 26 | दा दा दा द दा दा 27 | द द दा 28 | 29 | दा द दा दा द द दा द दा दा 30 | 31 | द द दा द दा दा द दा द दा 32 | द द दा द दा दा द दा द दा 33 | द दा द दा द दा 34 | दा 35 | दा द दा दा द द दा द दा दा 36 | दा द दा दा द द दा द दा दा 37 | द दा द दा द दा 38 | द द दा 39 | दा 40 | दा द दा दा द द दा द दा दा 41 | द द दा द द दा द दा द दा 42 | द द दा द दा द दा 43 | दा दा दा द दा दा 44 | द दा दा द दा 45 | द द दा द दा द दा दा 46 | द द दा द दा द दा 47 | द द दा द दा द दा दा 48 | द द दा द दा द दा दा 49 | दा द द दा द दा द दा दा 50 | द द दा द द दा दा 51 | दा द द दा द द दा द द दा 52 | द दा द द द दा द दा द दा 53 | द द दा दा 54 | द द दा द द दा द द दा दा 55 | दा द द दा द दा द दा दा 56 | द द दा द दा द दा 57 | द द दा द दा द दा 58 | दा 59 | द द दा द द दा द द दा द दा 60 | दा द द दा द द दा द दा 61 | द द दा द द दा दा 62 | दा 63 | द द दा द द दा द द दा दा 64 | द द दा द दा द दा दा 65 | दा द द दा द दा द दा दा 66 | द दा द द द दा द दा द दा 67 | दा द द दा द द दा द द दा 68 | द द दा द दा द दा 69 | द द दा दा 70 | दा द द दा द दा द दा दा 71 | द द दा द दा द दा 72 | दा द द दा द द दा द दा 73 | द द दा द दा द दा 74 | द द दा द दा द दा दा 75 | द द दा द द दा द द दा द दा 76 | द दा दा द दा 77 | द द दा द दा द दा दा 78 | द दा द दा द दा दा 79 | दा द द द द द द दा 80 | दा द द दा द दा द दा दा 81 | दा द दा दा द द दा द दा द दा 82 | दा द द द दा द द दा दा 83 | दा द द दा द दा द दा दा 84 | दा दा 85 | दा दा 86 | दा द दा दा द द दा द दा द दा 87 | दा द द द दा द द दा दा 88 | दा द द द द द द दा 89 | द दा द दा द दा दा 90 | द द दा द द दा द दा द दा दा 91 | दा द द दा द दा द दा दा 92 | 93 | दा 94 | दा द दा द द द दा द द दा दा 95 | द द दा द दा द दा दा 96 | द द दा द दा द दा दा 97 | 98 | दा 99 | दा द दा द द द दा द द दा दा 100 | दा द द दा द दा द दा दा 101 | दा 102 | दा 103 | द दा द दा 104 | द द 105 | द द 106 | दा 107 | दा 108 | दा दा 109 | दा दा 110 | 111 | दा 112 | 113 | द द दा दा 114 | द द दा दा 115 | द दा द दा 116 | दा 117 | दा 118 | द दा दा द दा दा द दा 119 | द दा दा 120 | दा दा 121 | द द दा दा दा द दा दा द दा दा 122 | द दा दा 123 | द दा दा द दा दा द दा 124 | द द दा दा दा द दा दा द दा दा 125 | दा दा 126 | दा 127 | दा 128 | दा 129 | दा दा द दा दा द दा 130 | दा 131 | द दा दा 132 | दा 133 | द दा दा 134 | दा दा द दा दा द दा 135 | द दा दा 136 | द दा दा 137 | द द द दा दा 138 | द द दा द दा द द द दा द द दा द दा 139 | द द दा द दा द द द दा द द दा द दा 140 | द द द दा दा 141 | -------------------------------------------------------------------------------- /chandas/svat/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/chandas/svat/__init__.py -------------------------------------------------------------------------------- /chandas/svat/data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/chandas/svat/data/__init__.py -------------------------------------------------------------------------------- /chandas/svat/data/curated.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": ["Data for well-known metres, other than those by Dr. Ganesh"], 3 | "metres": [ 4 | ["Aupacchandasikam (Vasantamālikā) (Upodgatā)", ["LLG LLGLGLGG", 5 | "LLGGLLGLGLGG"]], 6 | ["Matta-mayūram", { 7 | "pattern": "G G G G – G L L G G – L L G G", 8 | "instance": "Kalidasa: Raghuv. 9.75" 9 | }], 10 | ["Kṣamā (Candrikā, Utpalinī)", "LLLLLLGGLGGLG"], 11 | ["Prabhā (Mandākinī)", "LLLLLLGLGGLG"], 12 | ["Madhyakṣāmā (Haṃsaśyenī, Kuṭila, Cūḍāpīḍam)", "GGGGLLLLLLGGGG"], 13 | ["Rucirā", "L G L G L L L L G L G L G"], 14 | ["Nārācam", { 15 | "pattern": "L L L L L L G L G G L G G L G G L G", 16 | "instance": "Kalidasa: end of Raghuv. 12" 17 | }], 18 | ["Madirā", "G L L G L L G L L G L L G L L G L L G L L G"], 19 | ["Pādākulakam (and many other names)", "4444"] 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /chandas/svat/data/curated.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Data for well-known metres, other than those by Dr. Ganesh""" 3 | 4 | from __future__ import absolute_import, division, print_function, unicode_literals 5 | 6 | # TODO(shreevatsa): pādānta-lagu whitelist: metres until Vasantatilakā, -Śālinī 7 | curated_vrtta_data = [ 8 | # TODO(shreevatsa): This should go into ganesh.py 9 | ('Aupacchandasikam (Vasantamālikā) (Upodgatā)', ['LLG LLGLGLGG', 10 | 'LLGGLLGLGLGG']), 11 | # ('Dodhakam', 'G L L G L L G L L G G'), # In VR 12 | ('Matta-mayūram', 'G G G G – G L L G G – L L G G'), # Kalidasa: Raghuv. 9.75 13 | ('Kṣamā (Candrikā, Utpalinī)', 'LLLLLLGGLGGLG'), 14 | ('Prabhā (Mandākinī)', 'LLLLLLGLGGLG'), 15 | ('Madhyakṣāmā (Haṃsaśyenī, Kuṭila, Cūḍāpīḍam)', 'GGGGLLLLLLGGGG'), 16 | # ('Vaṃśapatrapatitam (Vaṃśadala)', 'GLLGLGLLLGLLLLLLG'), # in VR 17 | ('Rucirā', 'L G L G L L L L G L G L G'), 18 | ('Nārācam', 'L L L L L L G L G G L G G L G G L G'), # Kalidasa: end of Raghuv. 12 19 | 20 | # ('Mālatī', 'L L L L G L L G L G L G'), # in VR 21 | ('Madirā', 'G L L G L L G L L G L L G L L G L L G L L G'), 22 | # ('Vidyunmālā', 'G G G G G G G G'), # in VR 23 | # # AddMatravrtta('Pādākulakam (and many other names)', ['4 * 4'] * 4) 24 | ] 25 | -------------------------------------------------------------------------------- /chandas/svat/data/dhaval_mishra.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Large list of metres, input by Dr. Dhaval Patel. 3 | Based on Marcis Gasuns scraping the site by Anand Mishra at 4 | http://sanskrit.sai.uni-heidelberg.de/Chanda/HTML/ 5 | """ 6 | 7 | from __future__ import absolute_import, division, print_function, unicode_literals 8 | 9 | dhaval_vrtta_data = [ 10 | ('anīcakam', 'LGLLLLLLLLLG'), 11 | ('līlā', 'LLLLGGLGL'), 12 | ('pratibhādarśanam', 'LLGGLLGGLLLLGG'), 13 | ('karṇapālikā', 'GLGLGGLGLG'), 14 | ('utkaṭapaṭṭikā', 'GGLLGLGLGLGLLLLLLGGLGGLG'), 15 | ('sindhurayā', 'GLLGGG'), 16 | ('vyāyogavatī', 'GGLLGLLLLLLG'), 17 | ('chidram', 'GGLLL'), 18 | ('parimalam', 'LLLLGGLLLLGLLGG'), 19 | # ('virāṭ', 'GGGLLGLGLG'), # In other list as śuddhavirāṭ 20 | ('vikuṇṭhakaṇṭhaḥ', 'GLGLGLGLGLGLGLGLGLGLGLGLGG'), 21 | ('vinandinī', 'LLGLLGLLGLLGLG'), 22 | ('rāmābaddham', 'GGGGLLLLGGLLGGLLLLGGLLG'), 23 | # ('jaladharamālā', 'GGGGLLLLGGGG'), # in other list 24 | ('abhīkam', 'LGGLGGG'), 25 | ('dūrāvalokaḥ', 'GGGGLGGLLLLLLGGGLGGLG'), 26 | ('purohitā', 'LGLGLGG'), 27 | ('prothā', 'GGGLLL'), 28 | ('nakhapadā', 'LLLGLGGL'), 29 | ('pārāvārāntastham', 'GGGGGGGGGLLGGLLLLGGGLLG'), 30 | ('vaḍiśabhedinī', 'LLLGLLLGLG'), 31 | ('karmaṭhaḥ', 'GLLGLLGLLGLLG'), 32 | ('vigāhitageham', 'LLLLLLLLLLGGGGGLLLLGLLGG'), 33 | ('kamalaparam', 'LLLLGGLLLLGGGLLG'), 34 | ('sācīkṛtavadanā', ['LLLLGGGLLGG', 'GGLLLLGLLLLG']), 35 | ('vaṃśottaṃsā', 'GGLLGGLLGGGGGG'), 36 | ('karṇāṭakam', 'GGLGLLLGLGLLLGLGLLLLLLLLLG'), 37 | ('maru', 'LGLGLLLL'), 38 | # ('ardharutam', ['GLLLLLLGGLLLL', 'GLLLLLLGLLGLL']), # Ends in laghu 39 | ('acalapaṅktiḥ', 'GLGLLLLLGG'), 40 | ('vṛndā', 'GGLGLGL'), 41 | ('lalitālabālam', 'LLGLGLLGGGG'), 42 | ('madhumallī', 'LLGGLLGLG'), 43 | ('pratīpavallī', 'LLGLLGGLLGLGLGGG'), 44 | ('nagamahitā', 'LLGGLLGLLLLG'), 45 | ('bhājanaśīlā', 'GGLLGGGLGGLGG'), 46 | ('prabhāvatī', 'GGLGLLLLGLGLG'), 47 | # # Covered by upajāti 48 | # ('ārdrā', ['LGLGGLLGLGG', 'GGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG']), 49 | ('viṣāṇāśritam', 'LGGLLLGLGGLLLGLGGLLLGLGGLG'), 50 | ('ardhakusumitā', 'GLLLLGLLLLLLG'), 51 | ('bhāsitasaraṇiḥ', 'GLLLLLLLLLLG'), 52 | ('ammethī', 'GGGGLGL'), 53 | ('citrapadā', 'GLLGLLGG'), 54 | ('śālabhañjikā', ['LLGLLLGLGLG', 'GLLGGLGLGLG']), 55 | ('abhrabhramaśīlā', 'GGLLGGLLGGLLG'), 56 | ('haraṇi', 'LLL'), 57 | ('prapātāvatāram', 'LGGLGGGLGLG'), 58 | ('lolatanu', 'LLGGLLL'), 59 | ('aṭṭāsinī', 'GGLGLLGLGLLGL'), 60 | ('darpamālā', 'LGGLGGGLGGLGG'), 61 | ('navasarā', 'GGGLLLG'), 62 | ('bhūriśikhā', 'LLGLLGGGGGGLLG'), 63 | ('dhavalakarī', 'LLLLLLGLLGGG'), 64 | ('atijani', 'GGGGLLLL'), 65 | ('śaralīḍhā', 'LLLLGLLGG'), 66 | ('mārdaṅgī1', ['LLGLLLLLGLLLGG', 'GGGLLLLGLLLLLLLLGG']), # different below 67 | ('proñchitā', 'LLGGLGL'), 68 | ('kāhī', 'LLGGGLL'), 69 | ('dvimilā', 'LLGLLGLLGLLGLLGLLGLLGLLG'), 70 | ('aparaprīṇitā', ['LLLLLLLLGGGLGGLG', 'LLLLLLGGLGGLG']), 71 | ('ḍhuṇḍhi', 'LLGGGL'), 72 | ('pramāthinī', ['LLLLGLLGLGLGG', 'LLGGLLGLGLGG']), 73 | ('taralanayanam', 'LLLLLLLLLLLL'), 74 | ('bhramarāvalikā', 'LLGLLGLLGLLGLLG'), 75 | ('mayūrī', 'LGGGLGL'), 76 | ('utpalamālikā', 'GLLGLGLLLGLLGLLGLGLG'), 77 | ('madhupāli', 'LLGLLGLLGLLGLL'), 78 | ('vipulapālikā', 'GLGLGLLLLGLG'), 79 | ('ardhakalā', 'LLGLLGLLG'), 80 | ('modakam', 'GLLGLLGLLGLL'), 81 | ('prasṛmaramarālikā', 'LLLLLGLGLGLG'), 82 | ('viralā', 'LLGLLLLGLGLG'), 83 | ('bālavikrīḍitam', 'GLLLLGLGLLLGLGGLG'), 84 | ('anāsavavāsitā', ['LLGGLLGLGLGLLLGG', 'LLLGLLLGLGLGLGG']), 85 | ('ṛju', 'LGLL'), 86 | ('karālī', 'GGLGGLGG'), 87 | ('meduradantam', 'GLLGLLGLLGLLGLLGLLGLLGLL'), 88 | ('kālambī', 'GGGLGLL'), 89 | ('gotragarīyaḥ', 'GLLGGLLLLGGLLGGLLLLGLLG'), 90 | ('puṭaḥ', 'LLLLLLGGGLGG'), 91 | ('balorjitā', 'LLLLGLGLGLGG'), 92 | ('doṣā', 'GGLLGLL'), 93 | ('anāsādi', 'GLGLGGL'), 94 | ('kośi', 'GLLLLLL'), 95 | ('vārddhi', 'LGLGL'), 96 | ('tuṅgā', 'LLLLLLGG'), 97 | ('kalpalatāpatākinī', 'GGGLLLLLLLLGLLGLGLG'), 98 | ('campakamālā', 'GLLGGGLLGG'), 99 | ('kurarīrutā', 'LLLLGLGLLLGLLG'), 100 | ('śiśumukhī', ['LLLGLLLGLLGLG', 'LLLGLLLLGLGLG']), 101 | ('atimohā', 'LLGGLLGG'), 102 | ('gaganodgatā', 'GLGLLLGLGLLGLG'), 103 | ('ākatanu', 'LGLGGLLL'), 104 | ('pravāhikā', 'LGLGGLGGLGGLG'), 105 | ('arajaskā', 'LGLLGG'), 106 | ('unnālam', 'GGLLLLLLGG'), 107 | ('bahulābhram', 'LLGGLLLLGGLLGGG'), 108 | ('vikatthanam', 'LGLLGLLLGLLG'), 109 | ('karṇinī', ['GLGLLLGLLGG', 'GLGLLLGLGLG']), 110 | ('vaidhātrī', ['LGLGGLLGLGLG', 'LGLGGLLGLGLG', 111 | 'GGLGGLLGLGLG', 'LGLGGLLGLGLG']), 112 | ('vaiśvadevī', 'GGGGGGLGGLGG'), 113 | ('śaṅkhadyuti', 'LLGGLL'), 114 | ('pramodapariṇītā', ['LLLLLLGLGLGLGG', 'LLLLGLLGLGLLLGG']), 115 | ('kuhī', 'LGLLLG'), 116 | ('niṣadham', 'GLLGLGLLG'), 117 | ('sopadhi', 'GLGGLL'), 118 | ('saṃpātaśīlā', ['GGLGGGGLGG', 'LLGLLLGGGLGG']), 119 | ('varīyaḥ', 'LGGLL'), 120 | ('kīralekhā', 'LLLGLGLLLGLGG'), 121 | ('prabhāsitā', ['GGGLLGLGLG', 'LLGLLGLGLG']), 122 | ('samit', 'LLLLGGLLLLG'), 123 | ('kīlālam', 'GLLGGGGGLL'), 124 | ('pravaralalitam', 'LGGGGGLLLLLGGLGG'), 125 | ('vīraṇamālā', 'GLLGGLLLLLLG'), 126 | ('anindagurvinduḥ', 'LLLLGGGGLGLGGG'), 127 | ('varivaśitā', 'LLGLLGLLLLLLG'), 128 | ('vinidrasindhuraḥ', 'GLGGLGGLGGLGLGLGLGLGLGLGLG'), 129 | ('lalitā', 'GGLGLLLGLGLG'), 130 | ('phulladāma', 'GGGGGLLLLLLGGLGGLGG'), 131 | ('aprītā', 'LLLGGGLL'), 132 | ('dhaureyam', 'GLLGLLLLGLLGLLLLLLLLGGGG'), 133 | ('mantrikā', 'GLGGGL'), 134 | ('kalpāhārī', 'LLLLLLLLLLLLGGGG'), 135 | ('bhujagahāriṇī', 'LLLGLGLLGLG'), 136 | ('śiprā', 'GGGGGGG'), 137 | ('hindīram', 'GGGGGLG'), 138 | ('śukavanitā', 'LLGLLGGLLGLLLLLLG'), 139 | ('māyāvinī', 'LLGGGLG'), 140 | # ('mattakokilam', 'GLGLLGLGLLGLGLLGLG'), # in curated 141 | ('puṣpaśakaṭikā', 'GLLLLGGGLGGLGG'), 142 | ('kuberakaṭikā', 'LLGLLGLGLLLGG'), 143 | ('narāvaliḥ', 'GGLGLLLLLLLLG'), 144 | ('vaṃśapatrapatitam', 'GLLGLGLLLGLLLLLLG'), 145 | ('narī', 'LGGLG'), 146 | ('śarakāṇḍaprakāṇḍam', 'LLGGLGLLLGLGGLGGLGGLG'), 147 | ('nandathu', 'GLLLGGL'), 148 | ('karṇalatā', 'LLGGLLGLLLLGLLG'), 149 | ('kanakamañjarī', 'LLLGLGGLGLG'), 150 | ('ṛcā', 'LGLLGGL'), 151 | ('mattamayūraḥ', 'GGGGGLLGGLLGG'), 152 | ('guṇasārikā', 'LGLLGLLGLLGLG'), 153 | ('saurabhaśobhāsāraḥ', 'GLLGGGGGLLLLLLGLLLLG'), 154 | ('kaṭhinī', 'LLLLLGLGLGGLG'), 155 | ('ūhinī', 'GLGLLGLGGLGLLGL'), 156 | # # Covered by upajāti 157 | # ('māyā', ['LGLGGLLGLGG', 'LGLGGLLGLGG', 'LGLGGLLGLGG', 'GGLGGLLGLGG']), 158 | ('vātormī', 'GGGGLLGGLGG'), 159 | ('nīranidhiḥ', 'LLLGGLLLLL'), 160 | ('madhu', 'LL'), 161 | ('sundarī', ['LLGGLLGLGLG', 'LLGLLGLGLG']), 162 | ('samānikā', 'GLGLGLGL'), 163 | ('gṛhiṇī', 'LLGGGGL'), 164 | ('vandāruḥ', 'GGGLLGGLL'), 165 | ('ardhāntarālāpi', 'GGLGGLGGLGGLGGLGGL'), 166 | ('kamalākarā', ['GLLGLLGLLGG', 'GLLLLLLGLLGG']), 167 | ('bhujaṅgī', 'LGGLGGLGGLG'), 168 | ('bhastrānistaraṇam', 'GGGLLGGLLLLLLGLGLGLLGG'), 169 | ('indravimānam', 'GLLGGLLLLGGGGLLLLLLLLGG'), 170 | ('drutapadam', 'LLLGLLLGLLGG'), 171 | # ('mandākrāntā', 'GGGGLLLLLGGLGGLGG'), # in curated 172 | ('cakitā', 'GLLLLGGGGGGLLLLG'), 173 | ('suvanamālikā', 'GGLLLGLGLLLG'), 174 | ('vajrālī', 'GGLLGGGGGGGGGGG'), 175 | ('kalanā', ['LLGLGLLLGLLGG', 'LLGLGLLLGLGLG']), 176 | ('bhāsamānabimbam', 'GLGLGLGLLLLGLGLGLLLLGLGG'), 177 | ('ayanapatākā', 'GGGLLLGGG'), 178 | ('haripadam', 'LLLLLLLG'), 179 | ('candravartma', 'GLGLLLGLLLLG'), 180 | ('bhasalamadam', 'GLLLLGLGLGGLG'), 181 | ('mihirā', 'LLLLLGLGGLGG'), 182 | ('hīralambi', 'GLLGLLGLGL'), 183 | # ('pṛthvī', 'LGLLLGLGLLLGLGGLG'), # in curated 184 | ('dolā', 'LLGG'), 185 | ('vidalā', 'LLLLLGGGLGLLG'), 186 | ('mukulitakalikāvalī', 'GLGLLLLLLGLG'), 187 | ('atiprativinītā', ['LLGGLLGLGLLLGG', 'LLLLGGLGLGLGG']), 188 | ('lalitapatākā', 'LLLLLGLGGLGGGG'), 189 | ('tilakā', 'LLGLLG'), 190 | # ('cūḍāpīḍam', 'GGGGLLLLLLGGGG'), # in curated? 191 | ('drutamukham', 'LLLLLLLLLLLLGGGGLGLGGG'), 192 | ('kulacāri', 'LGLGLLGL'), 193 | ('varhāturā', 'GGLGLLGGLG'), 194 | ('sākṣī', 'LLGLLGLGLGGG'), 195 | ('manoramā', 'LLLGLGLGLG'), 196 | ('rodhakam', 'LLLGLLGLLGG'), 197 | ('hāṭakaśāli', 'GGLLGL'), 198 | ('dantālikā', 'GGLGGGGLGGGGLGGL'), 199 | # ('mañjubhāṣiṇī', 'LLGLGLLLGLGLG'), # in curated 200 | ('jāhamukhī', 'GLLGLLGLLGLLGG'), 201 | ('nemadhāri', 'LGLGLLGLGL'), 202 | ('madanajavanikā', 'LLLLGGLLLLLLG'), 203 | ('niravadhigatiḥ', 'LLLLLGGLLLG'), 204 | ('kṛtakatikā', 'LLLLLLLLLLLG'), 205 | ('ṭaṅkaṇam', 'GLGLLLGLGLLLGLGLLLG'), 206 | ('dhūmrālī', 'LGGLGGGGGG'), 207 | ('maṇḍalam', 'GLLLG'), 208 | ('sainikam', 'LGLGLGLGLGL'), 209 | ('madanamālikā', 'LLLGLGLLLGLGGLG'), 210 | ('vidhuravirahitā', 'LLGGGLLGGGLLLLLLG'), 211 | ('upadārikā', 'GLGLGLLLGLG'), 212 | ('badhirā', 'LLGGLLGLGLGG'), 213 | ('hariluptā', ['LLGLLGLLGLG', 'LLGGLLGLLGLG']), 214 | ('viyadvāṇī1', ['LLGGLLGLGLGG', 'GGGLLGLGLGGG']), # different below 215 | # ('aparavaktram', ['LLLLLLGLGLG', 'LLLLGLLGLGLG']), # Aparavaktrā? 216 | ('avahitrā', ['GLLGLLGLLGG', 'LLGLLGLLGLL']), 217 | ('gaganagatikā', 'GLGLLGLGLLLLLG'), 218 | ('amṛtagatiḥ', 'LLLLGLLLLG'), 219 | ('tantrī', 'GGGLGG'), 220 | ('kalahetikā', 'LLGLGLLGLGLLLG'), 221 | ('valabhī', 'GLLGLLGLGLGG'), 222 | ('ketumatī', ['LLGLGLLLGG', 'GLLGLGLLLGG']), 223 | ('kinnaṭakaḥ', ['GGLLGLLGLLG', 'LLGLLGLLGLLG']), 224 | ('makaramukhī', 'LLLLLLLLLG'), 225 | ('mukhalā', 'LLLLGGLLG'), 226 | ('atiśāyinī', 'LLGLLGLGLGLLLGLGG'), 227 | ('karamālā', 'LLGGLLGGLLGG'), 228 | ('mahodhikā', 'LGLGLLG'), 229 | ('bhrūḥ', 'LGGGL'), 230 | ('upadhāyyā', 'GLLLLLLLGG'), 231 | ('balākā', 'LGG'), 232 | ('vilambalalitam', 'LGLLLGLGLLLGLGLLLGLGLLG'), 233 | ('virudarutam', 'GGGGLLLLGGLLGGLLG'), 234 | ('vāsantī', 'GGGGGLLLLGGGGG'), 235 | ('viraloddhatā', 'GGGLLGLGLLLG'), 236 | ('jatu', 'LLGLL'), 237 | ('naṭakaḥ', ['LLGLLGLLGLLG', 'GGLLGLLGLLG']), 238 | ('śalabhalolā', 'LGGLGGLGLLLGG'), 239 | ('ṣaṭpaderitam', 'LLLGLGLLLGLGLLLGLG'), 240 | ('alakālikā', 'GGLGLLGLGLLGLG'), 241 | ('rūpāmālī', 'GGGGGGGGG'), 242 | ('vimāninī1', ['GGGLLLLGLGLG', 'LLGGLLGLGLG']), # different below 243 | ('pathikāntā', 'GLLLLLLGLLGG'), 244 | ('śramitaśikhaṇḍī', 'GLLLLGGLLGG'), 245 | ('pramodatilakā', 'GGLGLLLGLLGLG'), 246 | ('karīritā', ['LLGGLLLGLGLG', 'LLGLLGLGLG']), 247 | ('śāradacandraḥ', 'GGLLGGLLGGLLGG'), 248 | ('svarṇābharaṇam', 'LLGLLGLLGLLGLLLLGGGLLG'), 249 | ('somaśruti', 'LGGGLL'), 250 | ('kroḍakrīḍam', 'GGGGLLLLLLLLGLGGLG'), 251 | ('naraśikhī', 'LLLGLLLGLLLGLLLG'), 252 | ('nīlagirikā', 'GLLLGLLLGLLG'), 253 | ('amitanagānikā', 'GLLLLGLGLLGLG'), 254 | # ('upacitrā', ['LLGLLGLLGLL', 'GLLGLLGLLGG']), #different in vrttaratnakara 255 | ('bhārākrāntā', 'GGGGLLLLLGLGLLGLG'), 256 | ('kupyam', 'GLLLLGLGLG'), 257 | ('ahīnatālī', ['GGGLLLLGLGLG', 'LLGGLLLLGLGLGLGG']), 258 | ('vasanaviśālā', 'LLLLLLLGGGGG'), 259 | # ('kalahaṃsaḥ', 'LLGLGLLLGLLGG'), # nandinī in vrttaratnakara 260 | ('pṛṣadvatī', 'GGLGLGGLGLGLG'), 261 | ('nirvādhikā', 'GGLGLLG'), 262 | ('anavīrā', 'LLGGLLLLG'), 263 | ('vipulāyitam', 'GGGLLLLGLGLLLLLLGLGLGLG'), 264 | ('ativāsitā', 'LLGLGGGLGLLG'), 265 | ('kṛtayuḥ', 'LLLLLLLL'), 266 | ('arditapādam', 'GLGLLLLGLLGG'), 267 | ('veśi', 'GLLLLLLL'), 268 | ('rañjakam', 'GLLLLGLLG'), 269 | ('tāvuri', 'GGLL'), 270 | ('digīśaḥ', 'LLGLGLGG'), 271 | ('vāṇinī', 'LLLLGLGLLLGLGLGG'), 272 | ('kiṇapā', 'GLLLGGG'), 273 | ('viśakalitā', 'GGGGLLLLGGLLLLG'), 274 | ('sukarṇapūram', 'LLLGLGLGLGLGG'), 275 | ('ānanamūlam', 'GLLGGLLGGLLGG'), 276 | ('alakā', 'LLLLLLLLLLLLLLLLLLLLLLLLG'), 277 | ('kurarikā', 'LLLGLGGG'), 278 | ('aśokānokaham', 'GGGGLLLLLGLLLLLGLGGGLGGLGG'), 279 | ('yamanakam', 'LLGLLLG'), 280 | ('īdṛṣam', 'GLGLGLGLGLGLGLGLGLGL'), 281 | ('ratākhyānakī', ['GGLGGLLGLGLG', 'LGLGGLLGLGLG', 282 | 'GGLGGLLGLGLG', 'GGLGGLLGLGLG']), 283 | ('udarkaracitā', 'LLGLLGLGLLLG'), 284 | ('alolā', 'GGGLLGGGGGLLGG'), 285 | ('parilekhaḥ', 'LGLLGLLGLLGG'), 286 | ('javanaśālinī', 'LLGLLGLGGLG'), 287 | ('vasantahāsaḥ', 'GGGGLLLLGLGG'), 288 | ('karmadā', 'GLGLLG'), 289 | ('sīdhuḥ', 'LLGGLLGLGLG'), 290 | ('cayanam', 'LGGLLLLL'), 291 | ('hariṇīplutā', ['LLLGLLGLLGLG', 'LLGLLGLLGLG']), # opposite below 292 | ('gallakam', 'LLLLLLLGGLG'), 293 | ('viṣṭambhaḥ', 'LLGLLGLLGGG'), 294 | ('prabhadrakam', 'LLLLGLGLLLGLGLG'), 295 | ('śambūkaḥ', 'LLGGGGG'), 296 | ('vāriśālā', 'LGLGGLGG'), 297 | ('anu', 'LLLLGGL'), 298 | ('arbhakamālā', 'GLLGGLLLLGGLLLLGGGLLGG'), 299 | ('śallakaplutam', 'LLGGLGLG'), 300 | ('asurāḍhyā', ['GGGLLGLGLGG', 'LLLLLLGLGLGG']), 301 | ('rucivarṇā', 'LGLLLGLGLLLGG'), 302 | ('antarvanitā', 'GGGLLGGGGGG'), 303 | ('kalamatallikā', 'LLLGLGLLLGLGLLLGLGGLG'), 304 | ('hali', 'LLLLL'), 305 | ('bhujaṅgasaṅgatā', 'LLGLGLGLG'), 306 | ('vāridhiyānam', 'GLLGGLLGL'), 307 | ('praharaṇakalikā', 'LLLLLLGLLLLLLG'), 308 | ('vimukhī', ['LLLLLLGLLLLGG', 'LLLLLLLLGLLGG']), 309 | ('haṭhinī', 'GGGLGLLG'), 310 | ('maulisrak', 'GGGLLGL'), 311 | ('kalādharaḥ', 'GLGGLGLGLGLGLG'), 312 | ('vaṃśalaḥ', 'GLLGGLLGLLGLLGLLG'), 313 | ('pāṃśu', 'LLLGL'), 314 | ('sandhyā', 'GGLLLLGG'), 315 | ('sāmapadā', 'GGGLLGLLLLG'), 316 | ('amaracamarī', 'LLLLLLLLLLLLLLLLLLLLLLG'), 317 | ('halamukhī', 'GLGLLLLLG'), 318 | ('pāli', 'LLGGL'), 319 | ('saṃśrayaśrīḥ', 'GGLGGLGGLGL'), 320 | ('lalitam1', 'LLLLLLGGGGLG'), # different in VR, see lalitam below 321 | ('paṅkajadhāriṇī', 'GGGLLGLGLLLGG'), 322 | ('padmāvarttaḥ', 'GGGGGGGGGG'), 323 | ('paridhārā', 'LLGGLGGG'), 324 | ('pramāṇikā', 'LGLGLGLG'), 325 | ('ulapā', 'GLLLLLG'), 326 | ('pārṣatasaraṇam', 'GLLLLLLGGGGGLLLLLLLLLLGG'), 327 | ('upavali', 'LLLLLL'), 328 | ('ākekaram', 'GGLLLLLLG'), 329 | ('viṭ', 'GLLGL'), 330 | ('jananidhivelā', 'LLLLGGLLGGGGLLG'), 331 | ('candrāpīḍam', 'GGGGGGGGGGGGGGGG'), 332 | # ('adritanayā', 'LLLLGLGLLLGLGLLLGLGLLLG'), # aśvalalita in vrttaratnakara 333 | ('amarāvatī', ['LGLGLGLGLGLGG', 'GLGLGLGLGLGL']), 334 | ('kalāpadīpakam', 'GLGLGLGLGLGLGLGLGLG'), 335 | ('vīravimānam', 'GLLGLLGLLGLLGLLGLLGG'), 336 | # # Covered by upajāti 337 | # ('viparītākhyānakī', ['LGLGGLLGLGG', 'GGLGGLLGLGG']), 338 | ('kṣaram', 'LGLLLLLL'), 339 | ('aruntudaḥ', ['LLGLLGLGLG', 'LLLLGLLGLGLG']), 340 | ('śaśikarī', 'LLGLLLGGL'), 341 | ('culakam', 'LLLLLLLLL'), 342 | ('kṛkapādi', 'LLLGLGLLGL'), 343 | ('kṣupam', 'LGLLL'), 344 | ('sammadamālikā', 'LLLLLGLLGLG'), 345 | ('padmāvatī', ['LLGLGLLLGLLGG', 'GGLGLLLGLLGG']), 346 | ('sari', 'LLLLLG'), 347 | ('nīrohā', 'LLGGLGGGGG'), 348 | ('valivadanam', 'LLLLGGGGGGLLLLGG'), 349 | ('kumārī', ['GGLGGLLGLGLG', 'LGLGGLLGLGLG', 350 | 'LGLGGLLGLGLG', 'LGLGGLLGLGLG']), 351 | ('garudavāritā', 'LGLLLGLGLLGLG'), 352 | ('drutamadhyā', ['GLLGLLGLLGG', 'LLLLGLLGLLGG']), 353 | ('jīmūtadhvānam', 'GGGGGGGGGGGGGGGGGGGGGGGGGG'), 354 | ('kaladhautapadam', 'LLGLLGLLGLLGLLGG'), 355 | ('ciraruciḥ', 'LGGLLLG'), 356 | ('satketuḥ', 'GGGLLLLLLLGLGLGLGG'), 357 | ('aniloddhatamukhī', 'LLLGLGGLGLLLG'), 358 | # ('sitastavakaḥ', 'GGLGLLLGGLGLLLGGLGLLLG'), # Aśvadhāṭī in curated 359 | ('ṛtam', 'LLLLLLLLGL'), 360 | ('agarim', 'LLLLLLLLLLL'), 361 | # ('nayamālinī', 'LLLLGLGLLLGG'), # navamālinī in vrttaratnakara 362 | ('mālyopastham', 'LLLLLLLLLLGGGGGG'), 363 | ('asudhā', ['LLGGLLGLGLG', 'GGGLLGLGLG']), 364 | ('kalaham', 'LLGGLLGGG'), 365 | ('priyā', 'LLGLG'), 366 | ('pikālikā', 'GLLLGLLGLGLG'), 367 | ('dvāravahā', 'GLGGGLLGGG'), 368 | ('vidyā', 'GGLLGLLG'), 369 | ('līḍhālarkaḥ', 'GGGGGLLLGLGG'), 370 | ('viśvavirāṭ', 'GGGLLGLGLGG'), 371 | ('māṇḍavakam', 'LLLGGLLG'), 372 | ('karmiṣṭhā', 'GLLLLGGGG'), 373 | ('suvihitā', 'LGGLLGLGLLLG'), 374 | ('varddhamānam', ['GGGLLGLGLGLLGG', 'LLGLLLLGLGLGG', 375 | 'LLLLLLLLGLLLLLLLLG', 'LLLLLLLLLLGLLGG']), 376 | ('prākārabandhaḥ', 'GGLGGLGGLGG'), 377 | ('śīrśavirahitā', 'GGLLGGGLLGLLLLG'), 378 | ('ūpikam', 'LGGGGLG'), 379 | ('kaṅkaṇakvāṇaḥ', 'GLGGLGGLGGLGGLGGLGGLGG'), 380 | ('ānatā', 'GGGLLLGLGGLGG'), 381 | ('titikṣā', 'GLLLLLLGGLLLLLLGG'), 382 | ('manahāsā', ['LGLGGLLGLGLG', 'GGLGGLLGLGLG', 383 | 'GGLGGLLGLGLG', 'LGLGGLLGLGLG']), 384 | ('kalali', 'LLLGG'), 385 | ('tumulakam', 'LLLLLLLLLLLLLLLLLL'), 386 | ('upacitaratikā', 'GLLLLLLGLLGLG'), 387 | ('vṛtumukhī', 'LLLGLLGG'), 388 | ('udaraśri', 'LLGLLGGGG'), 389 | ('sugandhiḥ', 'LLGLLLLGG'), 390 | ('taravārikā', 'LLLLLGLLGLGLLGLG'), 391 | ('mṛgī', 'GLG'), 392 | ('anaṅgapadam', ['GLLGLLGLLGLLG', 'LLGLLGLLGLLGG']), 393 | ('sāraṅgaḥ', 'GGLGGLGGLGGL'), 394 | ('śaṅkhacūḍā', ['GGLGGLLGLGLG', 'GGLGGLLGLGLG', 395 | 'LGLGGLLGLGLG', 'LGLGGLLGLGLG']), 396 | ('khelāḍhyam', 'GGGLLGGGG'), 397 | ('kṛtamaṇitā', 'GLLLLLLLLG'), 398 | ('harikāntā', 'LLGGLLGGLLG'), 399 | ('anilohā', 'LLGGLLGGLLGGLLGG'), 400 | # opposite above, hariṇaplutā in vrttaratnakara 401 | # ('hariṇīplutā', ['LLGLLGLLGLG', 'LLLGLLGLLGLG']), 402 | ('sārāvanadā', 'GGLLGLGG'), 403 | ('śarahatiḥ', 'LLLLLLLLLLLLLLL'), 404 | ('prabodhaphalitā', 'GLGLLLGLGLLLG'), 405 | ('vāsaki', 'LLLLGLL'), 406 | ('plavaṅgamaḥ', 'GLLGLLGGLGLLGLG'), 407 | # ('narācaḥ', 'LGLGLGLGLGLGLGLG'), # definitely wrong, same as Pañcacāmaram 408 | ('mālatī', 'LLLLGLLGLGLG'), 409 | ('kandaḥ', 'LGGLGGLGGLGGL'), 410 | ('puraṭi', 'LLLLGLG'), 411 | ('anṛtanarma', 'LLGGLLGL'), 412 | ('aśokalokaḥ', 'GGGGGGGGGGGGGGLGLGGGG'), 413 | ('mahimāvasāyi', 'LLGGLLGLGL'), 414 | ('akusumacaram', ['GLLLLLLGLLGG', 'GLLGLLGLLGG']), 415 | ('bhīmāvarttaḥ', 'GGGGLLLLLLLLLLGG'), 416 | ('karapallavodgatā', 'LGGLGGLLGLGLG'), 417 | ('pārāntacārī', 'LGGGGLGG'), 418 | ('cāru', 'GL'), 419 | ('karṇiśaraḥ', 'GLLGLLGLLGGLLG'), 420 | ('paripuṅkhitā', 'GLGLLGLGLGLG'), 421 | ('madhumatī', 'LLLLLLG'), 422 | ('citrā', 'GGGGGGGGGLGGLGG'), 423 | ('vipinatilakam', 'LLLLLGLLLGLGGLG'), 424 | ('jagatsamānikā', 'LLGLLGLGLGLGG'), 425 | ('induvaṃśā', 'GGLGGLLGLGLG'), 426 | ('kalpakāntā', 'GLGGGLGGLGGLGG'), 427 | ('nirmadhuvāri', ['GGLGLLGLGLLGL', 'LLGLGLLLGLGLG']), 428 | ('jarā', 'LGLLGLLGLG'), 429 | ('bhinnapadam', 'GLLGLLLGLG'), 430 | ('varṇabalākā', 'LLGLLGGLLGG'), 431 | ('sindhusauvīram', 'GLGGLGGLGGLGGLGGLG'), 432 | ('paravaktram', ['LLLLGLLGLGLG', 'LLLLLLGLGLG']), 433 | ('nāgāri', 'LLGLGGGL'), 434 | ('śiśirā', ['GGLGGLLGLGLG', 'LGLGGLLGLGLG']), 435 | ('saurabhavarddhinī', 'LLLLGGLLGLG'), 436 | ('maṅkuram', 'GGGLGL'), 437 | ('ketuḥ', ['GLLGLGLLLGG', 'LLGLGLLLGG']), 438 | ('prasṛmarakarā', 'LLLLLGLGGLG'), 439 | ('kaṭhodgatā', 'LLGLGLG'), 440 | ('ahari', 'LLLLLGL'), 441 | ('ujjhitakadanam', 'GLLLLLLGLLGLLGLLLLLLLLLLGG'), 442 | ('kuraṅgāvatāraḥ', 'LGGLGGLLGLLG'), 443 | ('niṣkalakaṇṭhī', 'GLLGGGLLGGGLLGGLLGGLLG'), 444 | ('prativinītā', ['LLLLGGLGLGLGG', 'LLGGLLGLGLLLGG']), 445 | ('krīḍacandram', 'LGGLGGLGGLGGLGGLGG'), 446 | ('avācīkṛtavadanā', ['GGLLLLGLLLLG', 'LLLLGGGLLGG']), 447 | ('arāli', 'LGLLGLLG'), 448 | ('kiṣku', 'GGLGGLGL'), 449 | ('kalavallivihaṅgaḥ', 'LGLGGLLGGLGG'), 450 | ('gopāvedī', 'LLLGGGGG'), 451 | ('kirmīram', 'GGGGLGG'), 452 | ('viśalyam', 'LGGLGGLGG'), 453 | ('śambaram', 'LLLGLLGLLGLGLLLGLLGLLGLG'), 454 | ('varaśaśi', 'GLGLLLL'), 455 | ('kalilā', 'LLGLLGLG'), 456 | ('avandhyopacāraḥ', 'LGGLGGLGGLGGLGGLGGLG'), 457 | ('kākalīkalakokilaḥ', 'GLGLLGLGLLGLGLLGLGLLGLGLLG'), 458 | ('paṅkāvaliḥ', 'GLLLLLLGGLLLL'), 459 | ('vaiyālī', ['LLLLLLGLGLG', 'GGGLLGLGLG']), 460 | ('ibhabhrāntā', 'GGGLGGG'), 461 | # ('sragviṇī', 'GLGGLGGLGGLG'), # curated 462 | # ('drutavilambitam', 'LLLGLLGLLGLG'), # curated 463 | ('mithunamālī', 'LLLLLLGGGGGG'), 464 | ('upakārikā', 'LLGLGLLGLGLLGL'), 465 | ('kusumitalatāvellitā', 'GGGGGLLLLLGGLGGLGG'), 466 | ('upasarasī', 'LLGLLLLGLLLLG'), 467 | ('vidyullekhā', 'GGGGGG'), 468 | ('cakram', 'GLLLLLLLLLLLLG'), 469 | ('ahiṃsā', 'GLGLGGG'), 470 | ('arkaśeṣā', 'GLGLGLGLGLGLGG'), 471 | ('narhi', 'LGGLGGL'), 472 | ('śaśivadanā', 'LLLLGG'), 473 | ('cārucāraṇam', 'GLGLLLLLGL'), 474 | ('pratardi', 'LGLGLGL'), 475 | ('kheṭakam', 'GLLLGLGGLG'), 476 | ('godhi', 'LLGLLGL'), 477 | ('mānākrāntā', 'GGGGGGGGGGGGGGGGG'), 478 | ('vāsavavanditā', ['GGGLLGLGLG', 'GGLLGLGLG']), 479 | ('vaṃśastham', 'LGLGGLLGLGLG'), 480 | ('bhujagaśiśubhṛtā', 'LLLLLLGGG'), 481 | ('panthā', 'LGGGGG'), 482 | ('amarandi', 'GGLGLLGL'), 483 | ('parīvāhaḥ', 'LLLGGLGGLGGLGG'), 484 | ('mālāvalayam', 'GGGGLLLLGGLLLLGG'), 485 | ('aviralaratikā', 'GLLLLLLGLGLG'), 486 | ('vīrā', 'GGGGLLLLG'), 487 | ('kaḍāram', 'LGGLLLLGGGG'), 488 | ('troṭakam', 'LLLLGLGLGGLLGLLG'), 489 | ('adhikārī', 'LLGGLLG'), 490 | ('ayamānam', 'LLGLLGLLGLLGLLGLLGLLGG'), 491 | ('satī', 'LLLG'), 492 | ('atulapulakam', 'LLLLLLLLLLLLLLLLLLLLLLLG'), 493 | # ('mattākrīḍam', 'GGGGGGGGLLLLLLLLLLLLLLG'), # yati in vrttaratnakara 494 | ('sāravarohā', 'GLLGGLLLLGGLLLLG'), 495 | ('kaucamāraḥ', 'LLGGGLGG'), 496 | ('samudrakāntā', ['GGLLGLGLGG', 'GGGLLGLGLGG']), 497 | ('bhīmābhogaḥ', 'GGGGGLGGLGGGGGGGLGGLGG'), 498 | ('tanumadhyā', 'GGLLGG'), 499 | # ('kalasvanavaṃśaḥ', 'GLLGLLGGLLG'), # mauktikamālā in vrttaratnakara 500 | ('varāsikā', ['LGLGGLLGLGLG', 'GGLGGLLGLGLG', 501 | 'GGLGGLLGLGLG', 'GGLGGLLGLGLG']), 502 | ('vidhunidhuvanam', 'GGGLLLLLLGGLLLLGGGG'), 503 | ('kūlam', 'GGLLLGGGGG'), 504 | ('madanamālā', 'LLLGLGLLLGG'), 505 | ('bhūridhāmā', 'LLGGLGG'), # called haṃsamālā in vrttaratnakara 506 | ('sāmikā', 'GLGGLGL'), 507 | ('śrutakīrttiḥ', 'LLLLGGGLLGG'), 508 | ('sūriṇī', 'GLGGG'), 509 | ('kāmalā', 'LLLLLLGGGLGGLG'), 510 | ('mitasakthi', 'LLLLLGLLGLGLLGL'), 511 | ('pātaśīlā', ['LLGLLLGGGLGG', 'GGLGGGGLGG']), 512 | ('vargavatī', ['GLLGLLGLLGG', 'LLGLLGLLGG']), 513 | ('lakṣaṇalīlā', 'GLLGGLGGGGG'), 514 | ('karañji', 'LGLLLLGL'), 515 | ('viśvaviśvāsaḥ', 'GGGLGGLGGLGGGLGGGGGGLGGLGG'), 516 | ('bhujaṅgaḥ', 'LGGLGGLGGLGGLGGLGGLGGLGG'), 517 | ('nandaḥ', 'GLGG'), 518 | ('lalanā', 'GLLGGGLLGLLG'), 519 | ('bahulayā', 'GLGLLLG'), 520 | ('dhamanikā', 'LLGLGLLLLG'), 521 | ('bhārāvatāraḥ', 'LLLGGLLGLLLLLLLGGLGG'), 522 | ('vārayātrikam', 'GLLGLGGLGLG'), 523 | ('paragatiḥ', 'GLGLLLLLGLLLG'), 524 | ('vidhāritā', 'LGLLGLLGLGLG'), 525 | ('sudhādharā', 'GLGLGLGGLGLGLG'), 526 | ('dārikā', 'LLGLGLLLGLG'), 527 | ('asitadhārā', 'LLGLLLLLGG'), 528 | # same as viyoginī, also different sundarī above 529 | # ('sundarī', ['LLGLLGLGLG', 'LLGGLLGLGLG']), 530 | ('bhāṣā', 'LGGGLGLL'), 531 | ('saṅkalpāsāraḥ', 'GGGGGGGGGGGGGG'), 532 | ('vindhyārūḍham', 'GGGGLGGGGGGLGG'), 533 | ('holā', 'LLLGGGG'), 534 | # ('śiśiraśikhā', ['LLLLLLGLGLG', 'LLLLGLLGLGLG']), # same as Aparavaktrā 535 | ('śākhoṭaki', 'LLLGGGLL'), 536 | ('bhasalavinoditā', 'LGLGLLLLLGLG'), 537 | ('niskā', 'GGGLLG'), 538 | ('abhīrukā', 'LGLGLLLLLLLLG'), 539 | ('apayodhā', 'LLGGLGGGGGG'), 540 | ('prabhāsitā2', ['LLGLLGLGLG', 'GGGLLGLGLG']), 541 | ('sarāvikā', 'LGLGLGLGLG'), 542 | ('saraghā', 'LLGGGLLG'), 543 | ('kuhū', 'LGLLGLLGL'), 544 | ('viṣamavyālī', 'LLLLLGGGGGGG'), 545 | ('indumā', ['LGLGGLLGLGLG', 'LGLGGLLGLGLG', 546 | 'GGLGGLLGLGLG', 'GGLGGLLGLGLG']), 547 | # ('sragdharā', 'GGGGLGGLLLLLLGGLGGLGG'), # in curated 548 | ('candrahāsakarā', 'GLGLLGLGLLGLG'), 549 | ('indhā', 'GGLGLL'), 550 | ('lāsyalīlālayaḥ', ['GGLLGGGLGGLGG', 'GLLLLGGGLGGLGG']), 551 | ('adhīrā', 'GLLGGGG'), 552 | ('jaloddhatagatiḥ', 'LGLLLGLGLLLG'), 553 | ('dhīradhvānam', 'GGGGGGGGGLLGGG'), 554 | # ('mālinī', 'LLLLLLGGGLGGLGG'), # in curated 555 | ('arbhakapaṅktiḥ', ['LLGGLLGLGLGG', 'GLLGLLGLGLGG']), 556 | ('anūpakam', ['LLLLGLLGLGLG', 'LLGLLGLGLG']), 557 | ('kusumavicitrā', 'LLLLGGLLLLGG'), 558 | ('kiśalayam', 'LLLGGGL'), 559 | ('kumudinīvikāśaḥ', 'LGLGGLLLGLGG'), 560 | ('svidā', 'LGLLLLG'), 561 | ('vāsakalīlā', 'GLLGGGLLGGGLLGGGLLGGGG'), 562 | ('uditam', 'LLGLLGLLGG'), 563 | ('sthālī', 'GGLGLG'), 564 | ('vāsaramaṇikā', 'GLLLLGLLGGLL'), 565 | ('bhūrivasu', 'LGGGLLL'), 566 | ('madanalalitā', 'GGGGLLLLLGGGLLLG'), 567 | ('asambādhā', 'GGGGGLLLLLLGGG'), 568 | ('madalekhā', 'GGGLLGG'), 569 | ('vaṃśalonnatā', 'GLGLGLGLGGGGGGGLGLGLGGGG'), 570 | ('yugadhāri', 'LLGLGGGG'), 571 | ('śalkaśakalam', 'GLLLGLLGLLG'), 572 | ('hāsikā', 'GGGLG'), 573 | ('mantharāyanam', 'LLLGLGLLLLLLGLLGLLGLLGG'), 574 | ('nārācikā', 'GGLGLGLG'), 575 | ('cakoraḥ', 'GLLGLLGLLGLLGLLGLLGLLGL'), 576 | ('masṛṇam', 'LLLLLLGGL'), 577 | ('sindhuk', 'GGLLLLLL'), 578 | ('elā', 'LLGLGLLLLLLLLGG'), 579 | ('prapātalikā', 'GLLLLGLGLGLLG'), 580 | ('rasadhārā', 'LLLLGGLLLLGGG'), 581 | ('ulapohā', ['GLLGLLGLGLGG', 'LLGGLLGLGLGG']), 582 | ('nirvindhyā', 'LGLLLGGGG'), 583 | # ('puṣpitāgrā', ['LLLLLLGLGLGG', 'LLLLGLLGLGLGG']), # in vrttaratnakara 584 | ('upohā', 'LGGLGLL'), 585 | ('ari', 'GLLLLLLG'), 586 | ('pākali', 'LLLGLGLL'), 587 | ('marmasphuram', 'GGLGLLLGLGGLG'), 588 | ('sarasīkam', ['GGLGLLLGLLGG', 'LLGGLLLGLLGG']), 589 | ('ādhidaivī', 'LGGGGGLGGLGG'), 590 | ('vīranīrājanā', 'LGGLGGLGGLGGGLGGLGGLGG'), 591 | ('adhīrakarīram', 'GGGLLLLLLGLLLLGLLLLGLLGG'), 592 | ('haṃsamālā', 'GLGGLGG'), 593 | ('sṛtamadhu', 'LLGGLLLL'), 594 | ('savyālī', 'GGGGGGGGGGGGG'), 595 | ('mārābhisaraṇam', 'GGLLLLGGGGLLLLGLGGG'), 596 | ('nirmuktamālā', 'GGGGLGGLLLLLLG'), 597 | ('akṣarāvalī', 'GLGLLGLGLG'), 598 | ('pañcaśākhī', 'LLLLLGLGLGG'), 599 | ('kumudamālā', 'LLLGGLLLGGLLLGGLLLGGLLLGG'), 600 | ('rasabhūma', 'LLGLGLLLGL'), 601 | ('upodgatā1', ['LLGGLLGLGLGG', 'LLGLLGLGLGG']), 602 | ('avoḍhā', 'GGGGLG'), 603 | # # Covered by upajāti 604 | # ('mālā', ['LGLGGLLGLGG', 'LGLGGLLGLGG', 'GGLGGLLGLGG', 'GGLGGLLGLGG']), 605 | ('somarājī', 'LGGLGG'), 606 | ('gūrṇikā', 'GLGGGLL'), 607 | ('paṅkavatī', 'GLLLLLLGLLGLL'), 608 | ('manmathaḥ', 'LLGLLGGLLGLLGG'), 609 | ('saudāmanadāma', 'LLGLLGLLGLLGLLLLGLLGGLLGL'), 610 | ('madhumārakam', 'LLGLGL'), 611 | ('caṇḍī', 'LLLLLLLLGLLGG'), 612 | ('kharviṇī', 'GLGGGGL'), 613 | ('bhujaṅgoddhatam', 'GGLGLLGLGGLGLLGGLGLLLG'), 614 | ('ārādhinī', 'GGLGGGGGGGG'), 615 | ('kanakamālikā', 'GLGLLLGLGLLLGLGLLLGLG'), 616 | ('ruciram', 'GLLLLGG'), 617 | ('arti', 'LGGLLL'), 618 | ('nameruḥ', 'GGLLGLGLGG'), 619 | ('nīlaśārdūlam', 'LLLLLLGGGLGGLGGLGG'), 620 | ('kalāpāntaritā', 'LGGLLGLGGG'), 621 | ('aupagavam', ['LLLGLGGLGLG', 'GLLGLGGLGLG']), 622 | ('virataprabhā', 'GLLGLLLLLGLG'), 623 | ('vīravaṭu', 'LLLGLLL'), 624 | ('kūlacāriṇī', 'GLGLGLGGGGG'), 625 | ('mattagajendraḥ', 'GLLGLLGLLGLLGLLGLLGLLGG'), 626 | ('vidyunmālā', 'GGGGGGGG'), 627 | ('pravahlikā', 'GLLLGLGLG'), 628 | ('śraddharā', 'GLGLGLLG'), 629 | ('sphoṭakṛīḍam', 'LLLLGGGGGGGGGGG'), 630 | ('mañjumālatī', 'GLGLGLLLGLGLG'), 631 | ('komalakalpakalikā', 'LLGLGGLLGLLLG'), 632 | ('lalāmalalitādharā', 'LGLGLGLGLGLG'), 633 | ('amandapādaḥ', 'GLLLLGLGLGG'), 634 | ('udayanamukhī', 'LLLLLGLLLLLG'), 635 | ('viśvapramā', ['GGLGGLGGLG', 'LGLGGLGGLG']), 636 | ('madanakam', 'LLLLLLLLG'), 637 | ('upagataśikhā', 'LLLLLGLGLLGLG'), 638 | ('kuṭhārikā', 'LGLGGLG'), 639 | ('avarodhavanitā', ['LLLGLLGLLGLGLG', 'LLGLLGLGLGLLLGG']), 640 | ('viśvamukhī', 'GLLGLLGLLG'), 641 | ('upasthitā', 'GGLLGLLGLGG'), 642 | ('śunakam', 'GLLGLG'), 643 | ('parabhānu', 'LGGLLGL'), 644 | ('vihāvā', 'LGGLGGLG'), 645 | ('virāmavāṭikā', 'LLLLGLGLGLLGLLLLGLGLGLLLLG'), 646 | ('upasaṃkulā', 'LLGLGLGGLG'), 647 | ('kanakitā', 'GLLGLLLLLLLLG'), 648 | ('upasarasīkam', ['LLGGLLLGLLGG', 'GGLGLLLGLLGG']), 649 | ('jāsari', 'GLLLGLL'), 650 | ('nūtanam', 'GLGLLLGLLGLLGLG'), 651 | # different upodgatā above, also this is Aupacchandasikam in curated. 652 | # ('upodgatā', ['LLGLLGLGLGG', 'LLGGLLGLGLGG']), 653 | # # Covered by upajāti 654 | # ('bhadrā', ['GGLGGLLGLGG', 'LGLGGLLGLGG']), 655 | ('strī', 'GG'), 656 | ('pathyā', 'LLGLGLLLGLGGLG'), 657 | ('sūrasūcakaḥ', 'GGGLLGLGLLLGLLGLLGLGGLGGLG'), 658 | # ('apavāhaḥ', 'GGGLLLLLLLLLLLLLLLLLLLLGGG'), # in vrttaratnakara 659 | ('saurabheyī', ['GGLGGLLGLGLG', 'LGLGGLLGLGLG', 660 | 'LGLGGLLGLGLG', 'GGLGGLLGLGLG']), 661 | ('sāvaṭu', 'LGLGLL'), 662 | ('kāntāram', 'LGGGGGLLLLLGGLGGL'), 663 | ('prapañcacāmaram', 'LLLLLLGLGLGLGLGLGLG'), 664 | ('tomaram', 'LLGLGLLGL'), 665 | ('kalādhāmam', 'GLLGLLLGLGGGG'), 666 | ('kṛtamālam', 'GGLLGLLGGGLLGG'), 667 | ('dharā', 'GGLG'), 668 | ('upalinī', 'LLLGLGLG'), 669 | ('caturīhā', 'LGLGLLGG'), 670 | ('saramāsaraṇiḥ', 'LLGLLGGGLGGLGG'), 671 | ('chāyā', 'LGGGGGLLLLLGGGLGGLG'), 672 | ('rasikarasālā', 'LLLLLLLLGLLGGLLGGLLLLLLGG'), 673 | ('jvalitā', 'LLGLLLLLLLLG'), 674 | ('kroḍāntikam', 'GGLGLLL'), 675 | ('virohi', 'LGLLLGL'), 676 | ('parimitavijayā', 'LLLLLLGLGLGG'), 677 | # different one above 678 | ('avarodhavanitā2', ['LLGLLGLGLGLLLGG', 'LLLGLLGLLGLGLG']), 679 | ('vṛntam', 'LLGGGGLL'), 680 | # ('hīrāṅgī', 'GGGLLLLGGG'), # paṇava in vrttaratnakara 681 | ('vipannakadanam', 'LLLGLGLLLGGGG'), 682 | ('sāndrapadam', 'GLLGGLLLLGL'), 683 | ('vanavāsinī', 'LLGLLGLGLGLLGLGLLLLLGL'), 684 | ('pikālī', 'GLGLGG'), 685 | ('vāmavadanā', 'GLLLGLGGLGGLG'), 686 | ('vikasitapadmāvalī', 'LLLLGGLGGGG'), 687 | ('vinatākṣī', 'LLGGLLLLLLLLG'), 688 | ('yuddhavirāṭ', ['GGGLLGLGLGG', 'GGLLGLGLGG']), 689 | ('dṛtiḥ', 'LLLLLGG'), 690 | ('kiṃśukāvalī', ['GGGLLLLGLGLGG', 'GGLLGLGLGG']), 691 | ('sairavī', 'GLGGGGG'), 692 | ('saṃlakṣyalīlā', 'LLLGLGLLLGLGLLLGGLGG'), 693 | ('kūrcalalitam', 'GLGGLGGLGGLLLG'), 694 | ('anṛju', 'GLLL'), 695 | # ('madirā', 'GLLGLLGLLGLLGLLGLLGLLG'), # in curated 696 | ('śikhilikhitā', 'GGGLLLLG'), 697 | ('saralāṅghri', 'GGLLLGL'), 698 | ('līlālekhaḥ', 'GGGGGGGGGGGGGGG'), 699 | ('śakuntakuntalaḥ', 'GGGGLGGLGLLLLLLGLGLGLGLGLG'), 700 | ('krīḍā', 'LGGG'), 701 | ('vātuli', 'LGGLGGLL'), 702 | ('kumāralīlā', 'GGGLLLLLLGLGLGG'), 703 | ('vāsavilāsavatī', 'GLLGLLGLLGGGG'), 704 | ('rūpāvaliḥ', 'GGLLLLLLLLLG'), 705 | ('kṣamāpāli', 'LGLGGL'), 706 | ('prajñāmūlam', 'GGGGLLLLLLGGG'), 707 | ('surahitā', ['LLLLLLLLGLLGG', 'GGLLLLLLLLLLG']), 708 | ('gahanā', 'GLLLLLGLLG'), 709 | ('bhekālokaḥ', 'GLLGGGGGGGGLLLLLLGGG'), 710 | ('vellitavelam', 'GLLGLLGLLGGGLLGLLLLLLLLG'), 711 | ('ambudāvalī', 'LLGLGGLLGLGLG'), 712 | ('luptā', ['LLGGLLGLLGLG', 'LLGLLGLLGLG']), 713 | ('vilambanīyā', 'LLLGLLLLGLGLGG'), 714 | ('kuśalakalāvatikā', 'GGGLLLLGLLG'), 715 | ('siṃhalekhā', 'GLGLGLGG'), 716 | ('kelicaram', 'LLLLGGLLLLL'), 717 | ('mṛgendramukham', 'LLLLGLLGLGLGG'), 718 | ('vīraviśrāmaḥ', 'LLLLLLGLGLLLGLGGG'), 719 | ('haṃsarutam', 'GGGLLLGG'), 720 | ('madāvadātā', 'LLGGLLGLGLGLGG'), 721 | ('sampākaḥ', 'GGGGGLL'), 722 | ('vīravikrāntaḥ', 'GGGLLLLGLGGLGGLGGLGGLGGLGG'), 723 | ('lakṣmī', 'GLGGLGGL'), 724 | ('nandanam', 'LLLLGLGLLLGLGLGGLG'), 725 | ('kuhakakuharam', 'LLLLLLGGGLGGLLLLLLGGGLGGLG'), 726 | ('vāravatī', 'LLGGLLGLLG'), 727 | ('ārbhavam', 'GLGLGL'), 728 | ('līlālolaḥ', 'GGGGLLLLGGGGG'), 729 | ('vaśamūlam', 'LLGGLLLLGLGLGG'), 730 | ('vayasyaḥ', 'LGGGLGG'), 731 | ('kharpari', 'LGLGGLL'), 732 | ('sambodhā', 'LGLGGLLLLLLGGG'), 733 | ('tāmarasam', 'LLLLGLLGLLGG'), 734 | # ('rucirā', 'LGLGLLLLGLGLG'), # in curated (but why?) 735 | ('pañjari', 'GLLGGGLL'), 736 | ('vilulitamañjarī', 'LLLLGLGGGGG'), 737 | ('arthaśikhā', 'GLLLLLLGLLG'), 738 | ('lodhraśikhā', 'GGGLLGLLGLLGG'), 739 | ('kiñjalki', 'GGLGL'), 740 | ('pataṅgapādaḥ', 'LGLGGLGGLGGLGGLGGL'), 741 | ('jāriṇī', ['LLLGGLGGLG', 'GLGGLGLLLGGLG']), 742 | ('viśambhari', 'LLLLLLLGGLLLLL'), 743 | ('akhaniḥ', 'LLLLGLLG'), 744 | ('jālapādaḥ', 'GGLGGGGLGGG'), 745 | ('kāṇḍamukhī', 'LGLGLLGLLG'), 746 | ('indraphalā', 'GLLGGGGG'), 747 | ('kalanāvatī', ['LLGLGLLLGLGLG', 'LLGLGLLLGLLGG']), 748 | ('kañjā', 'LGLGGG'), 749 | ('vṛddhavāmā', 'GGLGGLLGLGGLG'), 750 | ('bhārṅgī', 'LGLLLGGG'), 751 | ('kuradi', 'LGLLLLL'), 752 | ('īḍā', 'GGLLLLLG'), 753 | ('śroṇī', 'LGLGGGL'), 754 | ('paṭupaṭṭikā', 'LLGLGLLGLGG'), 755 | ('maśagā', 'LGGLLG'), 756 | ('vedhāḥ', 'GGLLGGG'), 757 | ('meghālokaḥ', 'LGGGGGGGG'), 758 | ('anucāyitā', 'LLLLLGLGLG'), 759 | ('pratisīrā', 'GGGGLLGG'), 760 | ('sutalam', 'LLGGLGLLGGLG'), 761 | ('harṣiṇī', 'GLGGLLL'), 762 | ('vaisārī', ['GGLLGLGLG', 'GGGLLGLGLG']), 763 | ('apramāthinī', ['LLGGLLGLGLGG', 'LLLLGLLGLGLGG']), 764 | ('puṭamardi', 'LLLLGL'), 765 | ('samayaprahitā', 'LLGLLGLGGLGG'), 766 | ('viśālāntikam', 'GGLGGLGGLG'), 767 | ('śṛkhalavalayitam', 'GLLLLLLLLGLLGGGLLLLLLLGLLG'), 768 | ('parimalalalitam', 'LLLLLLGGLGG'), 769 | ('mandari', 'GLL'), 770 | ('kamalaśikhā', 'LLLLGGGGGGLLLLGLLGLLG'), 771 | ('sthūlā', 'GGLLLGG'), 772 | ('ahilā', 'GGLLLGLGLG'), 773 | # ('prabhā', 'LLLLLLGLGGLG'), # in curated 774 | # ('upasthitam', 'LGLLLGGGLGG'), # in vrttaratnakara 775 | ('śarabhūriṇī', 'GLGLLGLGLLGLGLLGLGLLGLGGG'), 776 | ('vaisāruḥ', 'GGLLLGGGG'), 777 | ('pratari', 'GLGLLL'), 778 | ('vārttāhārī', 'LLLLGLLGGGG'), 779 | ('nābhasam', 'LGLLGLLLGLG'), 780 | ('vīrāntā', 'LGLLLGGGGG'), 781 | ('kumbhakam', 'LLLLLLGLGGLGGLGGLGGLGGLGGL'), 782 | ('nimagnakīlā', 'LGLGGLLGLGGL'), 783 | ('vāri', 'LGGL'), 784 | ('saubhagakalā', 'GLLLGLLLGLG'), 785 | # same as viparītākhyānakī, also covered by upajāti 786 | # ('haṃsī', ['LGLGGLLGLGG', 'GGLGGLLGLGG']), # same as viparītākhyānakī 787 | ('śeṣāpīḍam', 'GGGGLLLLGLL'), 788 | ('viplutaśikhā', 'GLLLGLGLGGLG'), 789 | ('sudhā', ['GGGLLGLGLG', 'LLGGLLGLGLG']), 790 | ('ābhāsamānam', 'LGGLGGLGGLGGGGLGGLGGLGGLGG'), 791 | ('mallapallīprakāśam', 'LGGLGGLGGLGGLGGLGGLGGLGGL'), 792 | ('hīnatālī', ['LLGGLLLLGLGLGLGG', 'GGGLLLLGLGLG']), 793 | ('karadhā', ['GGGLLGLGLG', 'LLLLLLGLGLG']), 794 | ('vipākavatī', 'LLLGLLLGLLGLLG'), 795 | ('varkaritā', 'GGGGLLG'), 796 | ('gītikā', 'LLGLGLLGLGLLGLGLLGLG'), 797 | ('visasi', 'LLGLLL'), 798 | ('baddhā', ['GGGGLLLLLLG', 'LLGLLGLLLLLLG']), 799 | ('āśāpādaḥ', 'GGGGLLLLGLG'), 800 | ('suvadanā', 'GGGGLGGLLLLLLGGGLLLG'), 801 | ('kuśakam', 'GLGLLLLL'), 802 | ('ujjvalā', 'LLLLLLGLLGLG'), 803 | ('kāmākṣī', ['LLGLLGLLLLLLG', 'GGGGLLLLLLG']), 804 | ('acalanayanam', 'LLLLLLLLLLLLLLLLL'), 805 | ('pravādapadā', 'LLGLGLGLLG'), 806 | ('bhramaravilasitā', 'GGGGLLLLLLG'), # in vrttaratnakara too 807 | # ('ākhyānakī', ['GGLGGLLGLGG', 'LGLGGLLGLGG']), = bhadrā above 808 | ('manthānakam', 'GGLGGL'), 809 | ('bhujalatā', 'LLLLLGGGLLG'), 810 | ('mayūkhasaraṇiḥ', 'GLLLLGLGLLLGG'), 811 | ('unnarma', 'GLLGLLLLGLLGGL'), 812 | ('kālavarma', 'LLLGLLLGLGL'), 813 | ('phaladharam', 'LLLLLLGLLG'), 814 | ('suri', 'LLLLGGG'), 815 | # ('svāgatā', 'GLGLLLGLLGG'), # in curated 816 | ('bhāsitabharaṇam', 'GLLLLGGGGGGG'), 817 | ('bhasalaśalākā', 'GGGGLLLLGGGGLLLLGGGGLLLLGG'), 818 | ('krūrāśanam', 'GGLLLLGGLLLLLLGGG'), 819 | ('pāṭalikā', ['LLLLGGLLLLGG', 'GLLGLLGLLGG']), 820 | ('vaśaṃvadaḥ', 'LLGLLGLLGLLGLLGLLGLLGLLGLL'), 821 | # different in VR, present as samudrakāntā above 822 | # ('bhadravirāṭ', ['GGLLGLGLGG', 'GGGLLGLGLGG']), 823 | ('nimnāśayā', 'GGLGGGG'), 824 | ('vilambitamadhyā', 'GGGLLGLLGGG'), 825 | ('acaṭu', 'LLLLLLL'), 826 | ('kṛtakavali', 'LLLLLLLLLL'), 827 | ('dorlīlā', 'LLGLLGLGGGGG'), 828 | ('kāmaśālā', 'GLGGLGGLGGLGGL'), 829 | ('valgā', 'GGLGGLGGL'), 830 | ('kaṃsari', 'GGGGLL'), 831 | ('madākrāntā', ['LLGLLGLGLGLGG', 'GGGLLGLGLGLGGG']), 832 | ('sarasī', 'LLLLGLGLLLGLLGLLGLGLG'), 833 | ('pūrṇā', 'GGLLGLG'), 834 | ('bhāratī', 'GGGGGGGGGGG'), 835 | ('mṛgendu', 'LGL'), 836 | ('sarojāvālī', 'LGGLGGGLGGLG'), 837 | ('sukhaśailam', 'GGGGLLGGLLGG'), 838 | ('kumāralalitā', 'LGLLLGG'), 839 | ('kamanī', 'LLGLGG'), 840 | ('anantadāmā', 'LLLLLLLLGLGLGG'), 841 | ('kilikitā1', ['GLGLLLGLGLG', 'LLLGLLLGLGLG']), 842 | ('varajāpi', 'GLLLLGL'), 843 | ('tanvī', 'GLLGGLLLLLLGGLLGLLLLLLGG'), 844 | ('gajagatiḥ', 'LLLGLLLG'), 845 | ('vireki', 'GLGLLLGLGL'), 846 | ('sāhūti', 'GGGGGL'), 847 | ('pariṇāhī', 'GGGGLLLLGGLLGG'), 848 | ('vidhuravitānam', 'LLLLLLGLLLLGG'), 849 | ('gaṅgodakam', 'GLGGLGGLGGLGGLGGLGGLGGLG'), 850 | ('korakitā', ['GLLGLLGLLGG', 'LLLLGGLLLLGG']), 851 | ('indraḥ', 'LGLLGLLGGG'), 852 | ('upadhānam', 'LGLLLLLGLLGG'), 853 | ('pāñcālāṅghriḥ', 'LLLLGGGG'), 854 | ('bhujaṅgajuṣī', 'GLGLLGGLGLLG'), 855 | ('citibhṛtam', 'LLLLLLLGLG'), 856 | ('maṇimālā', 'GGLLGGGGLLGG'), 857 | ('viyogavatī', 'LGLLGLLLLLLG'), 858 | ('indravadanā', 'GLLLGLLLGLLLGG'), 859 | ('lulitam', 'LLGLLGLLGL'), 860 | ('māṇavakam', 'GLLGGLLG'), 861 | ('upāḍhyam1', ['GLLGLLGLGLGG', 'LLLLLGLGLGG']), 862 | ('niśipālam', 'GLLLGLLLGLLLGLG'), 863 | ('viṣvagvitānam', 'GGLGLLLGLLLLGGLGGLGG'), 864 | ('saurabhakam', ['LLGLGLLLGL', 865 | 'LLLLLGLGLG', 866 | 'GLGLLLGLLG', 867 | 'LLGLGLLLGLGLG']), 868 | ('śraddharāntā', 'GLGGLGGLGGLGG'), 869 | ('hemahāsaḥ', 'GLGGLGGLGG'), 870 | ('aupagavītam', ['GLLGLGGLGLG', 'LLLGLGGLGLG']), 871 | ('amanā', 'LLGLLGLL'), 872 | ('pulakāñcitam', 'GLLLLGLLLLGGLLLLLLGLLGG'), 873 | ('vīvadhaḥ', 'LLLLGLLLGLG'), 874 | ('ulkābhāsaḥ', 'GGGGGLLLGGGGG'), 875 | ('kirātaḥ', 'LLLLGLGGLGGLG'), 876 | ('amānikā', 'LGLGLGGL'), 877 | ('dadhi', 'GLLGLLGLL'), 878 | ('gaṇadehā', 'LLGGGGLLGG'), 879 | ('vainasam', 'GLGLG'), 880 | ('alālāpi', 'LLGLGGL'), 881 | ('prasarā', 'GGGLLGLLGG'), 882 | ('bhūriśobhā', 'GGGGGGLLLLLLGGLGGLGG'), 883 | ('vabhrūḥ', 'GGLGGG'), 884 | ('kumbhāri', 'GGGGL'), 885 | ('arjitaphalikā', 'GLLLLGGLGLLG'), 886 | ('samāhitam', 'LLLLGLLGLLGLLGLLGLLGLLGG'), 887 | ('parabhṛtam', 'LLLGGLG'), 888 | ('pārthivam', 'LGLLLGLGLLLGLLLGLG'), 889 | ('visraṃsi', 'LLLLLGGGLL'), 890 | # # Covered by upajāti 891 | # ('śālā', ['GGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG', 'GGLGGLLGLGG']), 892 | ('hemarūpam', 'GLGGLGLG'), 893 | ('jaladarasitā', 'LLLLLGLGGLGGLG'), 894 | ('mālatikā', 'LGLLGL'), 895 | ('antarvikāsavāsakaḥ', 'GGLGLGLGLGLG'), 896 | ('phalinī', 'LLLLGGGLLG'), 897 | ('vasupadamañjarī', 'LLLLGLGLLLGLLGLGLG'), 898 | # ('praharṣiṇī', 'GGGLLLLGLGLGG'), 899 | ('candralekhā2', 'GGGGLLLLLLGGLGGLGG'), # different in VR 900 | ('vāṭikāvikāśaḥ', 'GLLLLLLGGLGLGG'), 901 | ('madanayā', 'LLLLLLGGLLG'), 902 | ('karabhoddhatā', ['GLLGGLGLGLG', 'LLGLLLGLGLG']), 903 | ('vikalavakulavallī', 'LLLLLLGGLGGL'), 904 | ('mālādharaḥ', 'LLLLLGLGLLLGLGGLG'), 905 | ('kāṃsīkam', 'GGGLLLLGG'), 906 | ('upacitram', 'LLGLLGLLGLG'), 907 | ('subhadrikā', 'LLLLLLGLGLG'), 908 | ('vitānitā', 'LLLLLLLLLGLGLG'), 909 | ('kāmanibhā', 'GGGLLGGGLL'), 910 | ('indravajrā', 'GGLGGLLGLGG'), 911 | ('kuḍaṅgikā', 'LGLGLGLGLGLGLG'), 912 | # ('toṭakam', 'LLGLLGLLGLLG'), # in curated 913 | ('paṇavaḥ', 'GGGLLLLGLG'), 914 | ('anukūlā', 'GLLGGLLLLGG'), 915 | ('vijohā', 'GLGGLG'), 916 | ('krīḍāyatanam', 'LLGLLGLLGGGLLG'), 917 | ('prapannapānīyam', 'GGLLGGGGLGLGGG'), 918 | ('ālepanam', ['LLLGGLGGLGGLG', 'LLLGLLLGGLGGLG']), 919 | ('dhṛtahālā', 'GGGGLLGGG'), 920 | ('parivṛḍham', 'LLLGGLGGLGGLG'), 921 | ('dhīrāvarttaḥ', ['GGGGGLLGGLLGG', 'GGGGLLLLGGGGG']), 922 | ('grāvāstaraṇam', 'GGGGLLLLGGLLGGGGLLG'), 923 | ('upameyā', ['LGLGGLLGLGLG', 'GGLGGLLGLGLG']), 924 | ('kṛṣṇagatikā', 'GLLLGLGG'), 925 | ('rādhikā', 'LLGGLLGLLGLG'), 926 | ('śiśubharaṇam', 'LLLLLLLLLLLLLLGG'), 927 | ('cārugatiḥ', 'LLLLLLLLGGGGLLLLGLGLGLGLGG'), 928 | ('kāmacāri', 'GGLGLLGLGL'), 929 | ('kanakaketakī', 'GGLLLGLGLLGLG'), 930 | ('sarasamukhī', 'GGLLLLLLGL'), 931 | ('salekhā', 'LLLLLLGGGLLLLLLGG'), 932 | ('bhadrakam', 'GLLGLGLLLLLGLLLGLGLLLG'), 933 | ('devalam', 'GGGLGGL'), 934 | ('vivaravilasitam', 'GGLLLLLLGGGG'), 935 | ('līlācandram', 'GGGGGGGGLLGGLLG'), 936 | # # Covered by upajāti 937 | # ('vāṇī', ['GGLGGLLGLGG', 'LGLGGLLGLGG', 'GGLGGLLGLGG', 'GGLGGLLGLGG']), 938 | ('kaṭhināsthi', 'GLLLLLLGL'), 939 | ('añcalavatī', 'GLLLGLLGLGLLLG'), 940 | ('ahatiḥ', 'LGGLLLL'), 941 | ('vātyā', 'GLLLGGGG'), 942 | ('aśokapuṣpam', 'LLLLLLGLGLGLG'), 943 | # ('krośapadā', 'GLLGGGLLGGLLLLLLLLLLLLLLG'), # krauñcapadā in VR 944 | ('padmāvatī2', ['GGLGLLLGLLGG', 'LLGLGLLLGLLGG']), # different above 945 | ('vaṃśāropī', 'LGGGLLGGGG'), 946 | ('vidyādhāraḥ', 'GGGGGGGGGGGG'), 947 | ('nāsābharaṇam', 'GGLLGGGLLGGLLG'), 948 | ('halodgatā', 'LLLLGLGLG'), 949 | ('uddhatikarī', 'GLLLGGGGGGG'), 950 | ('hetiḥ', 'LLLLGLLGLGLLGL'), 951 | ('karṇasphoṭam', 'LLLLGGGGLLLLGGGGL'), 952 | ('bhaurikam', 'GLGGLGGLG'), 953 | ('kokapadam', 'GLLGGGLLGGLLLLLLLLLLLLGG'), 954 | ('sahajā', 'LLGLLGLGLG'), 955 | ('lalitāgamanam', 'LLGLLGLGGGG'), 956 | ('kalpadhāri', 'GLGGLGGLGLGLGLGL'), 957 | ('kāmarūpam', 'GGGGLGGLLLLLGGLGG'), 958 | ('celāñcalam', 'GGLGLLLLGLGLGG'), 959 | ('gambhāri', 'GLGGLGGLGGL'), 960 | # # Covered by upajāti 961 | # ('buddhiḥ', ['GGLGGLLGLGG', 'LGLGGLLGLGG', 'LGLGGLLGLGG', 'LGLGGLLGLGG']), 962 | ('viśadacchāyaḥ', 'LLGGGLLGGG'), 963 | ('kalki', 'GLGLL'), 964 | ('kaṇikā', 'GGLLG'), 965 | ('amati', 'GLLLLL'), 966 | ('cañcarīkāvalī', 'LGGGGGGLGGLGG'), 967 | ('hrīḥ', 'GLGGL'), 968 | ('arditam', 'GLLGLLGLLGLLGLLGLLLLLLGG'), 969 | ('kalpamukhī', 'GLLGGLG'), 970 | ('drutalambinī', 'LLGLLGLGLLGLG'), 971 | ('bimbam', 'LLLLLGLGG'), 972 | # # Covered by upajāti 973 | # ('rāmā', ['GGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG', 'LGLGGLLGLGG']), 974 | ('lasadasu', 'LLLLLGLG'), 975 | ('vyāhāri', 'GLLGGGL'), 976 | ('dhīrāvarttaḥ2', ['GGGGLLLLGGGGG', 'GGGGGLLGGLLGG']), # different above 977 | ('kalāpatiprabhā', 'GLGLGLGLGLGLG'), 978 | ('camūrubhīruḥ', ['GLGLLLLGLGLG', 'LLGLLLLGLGLGG']), 979 | ('suṣamā', 'GGLLGGGLLG'), 980 | ('hrīṇahaiyaṅgavīnam', 'GLGGLGGLGGLGGLGGLGGLGGLGG'), 981 | ('aḍamaruḥ', 'LLLLLLLLLLLLL'), 982 | ('kulādhārī', 'LGGGLGGG'), 983 | ('aparājitā', 'LLLLLLGLGLLGLG'), 984 | ('keram', 'GLGGLLGLLG'), 985 | ('mauktikadāma', 'LGLLGLLGLLGL'), 986 | ('mahonmukhī', 'GGGLGLG'), 987 | ('saṃhatikā', 'LLGLGLLGLG'), 988 | ('asudhārā', 'LGLGLGGLGLGG'), 989 | ('vinayavilāsaḥ', 'LLLLGGLLLLGGLLLLGGLLLLGGGG'), 990 | ('subhadrāvataraṇiḥ', 'GGGGGLGGLLLG'), 991 | ('akoṣakṛṣṭā', ['LLGGLLGLGLGLGG', 'GGLLGLGLGG']), 992 | ('ayamitam', 'LLLGLL'), 993 | ('sārasanāvaliḥ', 'LLLGLLLGLLGLG'), 994 | ('śantanu', 'GLLGGLL'), 995 | ('kārpikā', 'GLGLGLL'), 996 | ('amālīnam', 'LGGLGGGGGGG'), 997 | ('sumohitā', 'LGLGGGG'), 998 | ('cittacintāmaṇiḥ', 'GLGGLGGLGLLLLGLGGLGGLGGLG'), 999 | ('vāntabhāraḥ', 'LLLGGLGG'), 1000 | ('paddhari', 'LGGGGLL'), 1001 | ('arilā', 'LLGGLLGLLGLL'), 1002 | ('mattebhavikrīḍitam', 'LLGGLLGLGLLLGGGLGGLG'), 1003 | ('mattālī', 'GGGGGLLGGGGG'), 1004 | ('amatiḥ', 'GGGLLLL'), 1005 | ('kāmukalekhā', 'GLLGGGLLGGL'), 1006 | ('mṛṣṭapādā', 'GLGGGLG'), 1007 | ('piculam', 'LLGLLGLGLGL'), 1008 | ('abhikhyā', 'LLGGGG'), 1009 | ('bhūrighaṭakam', 'GGGLLLGGGGG'), 1010 | # ('rathoddhatā', 'GLGLLLGLGLG'), # in curated 1011 | ('śaṅkāvalī', 'GGLGLLGLGLLLLLG'), 1012 | ('kāsāram', 'GGGGGGGGLLLLGGLLG'), 1013 | ('vāṇīvāṇaḥ', 'GGGGLLLLGGLLGGLLGGGG'), 1014 | ('kumāragatiḥ', 'LGLLLLGLLLLG'), 1015 | ('paricāravatī', 'GGLGLLGLLG'), 1016 | ('vāhāntaritam', 'GGLLLLGLLGLLLLLLG'), 1017 | ('sūtaśikhā', 'GGLLGGLLGGLLLLGG'), 1018 | ('āpaṇikā', 'LGLGGLLGLLGLG'), 1019 | ('vallavīvilāsaḥ', 'GLGLGGLGGGG'), 1020 | ('kulyāvarttam', 'GGGGGGLLGGLLGGLL'), 1021 | ('manthari', 'GGGLGGLL'), 1022 | ('madanoddhurā', 'GLLGLLGLG'), 1023 | ('bhadrikā', 'GLGLLLGLG'), 1024 | ('jhillīlīlā', 'LLLLGGGGGGGGLGLGGGG'), 1025 | ('paraprīṇitā', ['LLLLLLGGLGGLG', 'LLLLLLLLGGGLGGLG']), 1026 | ('paurasari', 'GLLGLLL'), 1027 | ('śārdūlalalitam', 'GGGLLGLGLLLGGGLLLG'), 1028 | ('kalpamīlitā', 'GLGGLGGLGGLGLG'), 1029 | ('amoghamālikā', 'LGLGLGLGGGG'), 1030 | ('nīpavanīyakam', 'GLLLLLLLLLLGGLLLLGLLGLLGG'), 1031 | ('saṅgamavatī', 'GLLLGLLLLLLG'), 1032 | ('abhidhātrī', 'LLGLLGLLGLGLGLGG'), 1033 | ('alparutam', ['GLLLLLLGLLGLL', 'GLLLLLLGGLLLL']), 1034 | # # Covered by upajāti 1035 | # ('premā', ['LGLGGLLGLGG', 'LGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG']), 1036 | ('tanimā', 'LLLLLLLLGG'), 1037 | ('śobhā', 'LGGGGGLLLLLLGGLGGLGG'), 1038 | ('valīkendu', 'LLGGLGGL'), 1039 | ('aśaniḥ', 'LLLLLLGGLLLLL'), 1040 | ('mahanīyā', 'LGGLLGG'), 1041 | ('kalanāyikā', 'LGLGGLLLLLGLG'), 1042 | ('upodari', 'LGLLGLL'), 1043 | ('mālavikā', 'GGLLGLLLGLG'), 1044 | ('bodhāturā', 'LGGGGGLGGG'), 1045 | ('mudiram', 'LLGLLGLLGLLGLLGLLGLLGLLGG'), 1046 | ('paṭu', 'LLLL'), 1047 | ('vidyadālī', 'LGGLGGLGGLGGLGGLGGLGG'), 1048 | ('saurabhi', 'GLLLLG'), 1049 | ('vegavatī2', ['LLGLLGLLGG', 'GLLGLLGLLGG']), # different in VR 1050 | ('rudrālī', 'LLLLLGGG'), 1051 | ('daṇḍī', 'GGLLLLGGLLLLGGLLLG'), 1052 | ('keśavatī', 'LGGGLLG'), 1053 | ('āsavavāsitā', ['LLLGLLLGLGLGLGG', 'LLGGLLGLGLGLLLGG']), 1054 | ('krośitakuśalā', 'GLLLLGLLGGG'), 1055 | ('kīṭamālā', 'LLGLGLGGL'), 1056 | ('vindu', 'LGGGGL'), 1057 | ('ramaṇā', ['LGLGGLLGLGLG', 'GGLGGLLGLGLG', 1058 | 'LGLGGLLGLGLG', 'LGLGGLLGLGLG']), 1059 | ('anirayā', ['LLLGLLLLGLGLG', 'LLLGLLLGLLGLG']), 1060 | ('anāmayam', 'LGLLGLLGLLGLLGLLGLLGLLGL'), 1061 | # ('kāntā', ['GGGLLGLGLGG', 'GGLLGLGLGG']), # same as yuddhavirāṭ 1062 | ('nirmedhā', 'LLLGGLGGGG'), 1063 | ('surasā', 'GGGGLGGLLLLLLGGLLLG'), 1064 | ('kāmā', 'GGLLLLLGG'), 1065 | ('kāladhvānam', 'GGGGGGLLLLGGGG'), 1066 | ('valvajam', 'GLLGLLGGLLLLLLGGG'), 1067 | ('alipadam', ['GLGGLGLLLGGLG', 'LLLGGLGGLG']), 1068 | ('nālī', 'LGGGG'), 1069 | ('pāñcāli', 'GGL'), 1070 | ('upāḍhyam2', ['LLLLLGLGLGG', 'GLLGLLGLGLGG']), 1071 | ('varatrā', 'GLLLGLLGLLGG'), 1072 | ('lalitam', ['LLGLGLLLGL', 'LLLLLGLGLG', 'LLLLLLLLGLLG', 'LLGLGLLLGLGLG']), 1073 | ('valīmukhī', 'LGLGLG'), 1074 | # # Covered by upajāti 1075 | # ('ṛddhiḥ', ['LGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG', 'LGLGGLLGLGG']), 1076 | ('avanijā', 'LGLLGLGLG'), 1077 | ('ākhrṭam', 'GLGLGLLL'), 1078 | ('damanakam', 'LLLLLLLLLLG'), 1079 | ('samayavatī', ['GGLLLLGGLLG', 'LLGGGGLLLLG']), 1080 | ('akhaṇḍamaṇḍanam', 'LGLGLGGLGLGLG'), 1081 | ('vyākośakośalam', 'GGLGLLLGGGLLLLGLLGLLGLGLG'), 1082 | # # Covered by upajāti 1083 | # ('bālā', ['GGLGGLLGLGG', 'GGLGGLLGLGG', 'GGLGGLLGLGG', 'LGLGGLLGLGG']), 1084 | ('khaṭakā', 'LGLLGLLGLLG'), 1085 | ('harit', 'LLLLLGGL'), 1086 | ('ghaṭikā', ['GGLLLGLGLG', 'LLGLLGLGLG']), 1087 | ('viralam', 'GLLLLGGLLG'), 1088 | ('śritakamalā', 'GLLGLLLLGGG'), 1089 | ('śravaṇābharaṇam', 'LLLLGLLGLLGLLGLLGLLGLLG'), 1090 | ('kalahakaram', 'LLLLLLLLLLLLGLLG'), 1091 | ('vāsavavāsinī', ['LLLLGLGLLLGLLGLG', 'GGLLGLGLLLGLLGLG']), 1092 | ('ratirekha', 'GGLLGGGLLGLLGG'), 1093 | ('vimalā', 'LLGLLGLGLGG'), 1094 | ('staradhi', 'LGLGLLL'), 1095 | ('chalitakam', 'LLLGGLGLLG'), 1096 | ('anālepanam', ['LLLGLLLGGLGGLG', 'LLLGGLGGLGGLG']), 1097 | ('lāsyalīlā', ['GLLLLGGGLGGLGG', 'GGLLGGGLGGLGG']), 1098 | ('atikali', 'GGLLLL'), 1099 | ('taḍidambaram', 'GLLGLLGLLGLLGLLGLLGLL'), 1100 | ('ārabhaṭī', 'GLLGLLLLLLGLLGGG'), 1101 | ('maulimālikā', 'GLGLGGGG'), 1102 | ('dhāri', 'GLGL'), 1103 | ('viśālāmbhojālī', 'GGLLLGLGGGGG'), 1104 | ('karaśayā', 'LLLGLLGLG'), 1105 | ('citram', 'GLGLGLGLGLGLGLGL'), 1106 | ('udāttahāsaḥ', 'LGLGGLGLLLGLG'), 1107 | ('siktamaṇimālā', 'GLLLGGGGLLGG'), 1108 | ('vikacavatī', 'LLLLGGGLL'), 1109 | ('undari', 'GLLLGLG'), 1110 | ('vibhā', 'LLLLGGGGLLGGG'), 1111 | ('talpakatallajam', 'GLLGLLGLLGLLGLLLGLGGG'), 1112 | ('nandi', 'GLLGLL'), 1113 | ('dāmaghaṭitā', 'LLLLLLGLLLG'), 1114 | ('babhrulakṣmīḥ', 'GLGGLGGGLGGLGG'), 1115 | ('amarāvatī', ['GLGLGLGLGLGL', 'LGLGLGLGLGLGG']), 1116 | # In curated 1117 | # ('udgatā', ['LLGLGLLLGL', 'LLLLLGLGLG', 'GLLLLLLGLLG', 'LLGLGLLLGLGLG']), 1118 | ('guñjā', 'GGLLGGL'), 1119 | ('kṣut', 'GLLLL'), 1120 | ('śivikā', 'GLLGLLGLLGLLGLLGLLGLLGLLG'), 1121 | ('lumbākṣī', 'LLGLLGLLLGGG'), 1122 | ('maṇihaṃsaḥ', 'LLGLGLLGLGLLGLG'), 1123 | ('mārdaṅgī2', ['GGGLLLLGLLLLLLLLGG', 'LLGLLLLLGLLLGG']), # different above 1124 | ('rambhā', 'GGLLLLGGG'), 1125 | # ('bhujaṅgaprayātam', 'LGGLGGLGGLGG'), # in curated 1126 | ('prahāṇaḥ', 'LGGGGGG'), 1127 | ('rasadhāri', 'LLGLGGG'), 1128 | ('śīlāturā', ['LGLGGLLGLGLG', 'LGLGGLLGLGLG', 1129 | 'LGLGGLLGLGLG', 'GGLGGLLGLGLG']), 1130 | ('mattā', 'GGGGLLLLGG'), 1131 | ('kiraṇakīrttiḥ', 'GGLLGLGGLGLLLLLLLGG'), 1132 | ('rasikaparicitā', 'LLGGGLLLLLLG'), 1133 | ('niryatpārāvāraḥ', 'GGGGGLGGLGGLGG'), 1134 | ('saṃbhṛtaśaradhiḥ', 'GLLLLLLGGGLLLLLLGGLLGGL'), 1135 | ('hoḍapadā', 'GLLGLGG'), 1136 | ('bhīmārjanam', 'GGLGLGG'), 1137 | ('śāyinī', 'LLLLLGLGLGLLLGLGG'), 1138 | ('mauralikam', 'GLLGLLG'), 1139 | ('lāsyakārī', 'GLGGLGGLGGLGGLG'), 1140 | ('bhāvinīvilasitam', 'GLGLLLGLGLLLGLGLLLGLGLLLG'), 1141 | ('varddhiṣṇu', 'GGLGGGL'), 1142 | ('mayūrasāriṇī', 'GLGLGLGLGG'), 1143 | ('valā', 'GLLG'), 1144 | ('sarojavanikā', 'LGLLLGLGLGG'), 1145 | ('meghadhvanipūraḥ', 'GGLLGGGGGGG'), 1146 | ('viśeṣakabalitam', 'LLLLLLGGGGGGLGLLGLLGLLLLG'), 1147 | ('dhanadhari', 'LLGLLLL'), 1148 | ('siṃhapuccham', 'LGGLGGLGGLGGLGG'), 1149 | ('haravanitā', 'LLLLLLLLLLLLG'), 1150 | ('dārudehā', 'GLGGLGGLGGG'), 1151 | ('īhā', ['LLLLGLLGLLGG', 'GLLGLLGLLGG']), 1152 | ('pramodaḥ', 'LLLLLLGLGGLGG'), 1153 | ('vāsinī', ['GGLLGLGLLLGLLGLG', 'LLLLGLGLLLGLLGLG']), 1154 | ('moṭanakam', 'GGLLGLLGLLG'), 1155 | # ('pramitākṣarā', 'LLGLGLLLGLLG'), # In curated 1156 | ('paritoṣā', 'LLGLLLLGLLGG'), 1157 | ('nirudam', 'LLGLLLLL'), 1158 | ('atailam', ['LGLGGLGGLG', 'GGLGGLGGLG']), 1159 | ('arpitamadanā', 'GLLLLGLLLLGG'), 1160 | ('vanitāvilokaḥ', 'GGLGGLLLGLGG'), 1161 | ('sārddhapadā', 'GLGLGGLLGLGLG'), 1162 | ('dīpakam', 'GLLGGLLLLGGLLGG'), 1163 | ('guṇavatī', 'LLLGGG'), 1164 | ('rucimukhī', ['LLLLLLLLGLLGG', 'LLLLLLGLLLLGG']), 1165 | ('sulūḥ', 'LLLLG'), 1166 | ('mañjīrā', 'GGGGGGGLLGGGLLGGGG'), 1167 | ('vidrumadolā', 'LLLLGGGGLLGG'), 1168 | ('mānavatī', 'LGLLGLLGLLGLLGLLGLLGLLG'), 1169 | ('vimāninī2', ['LLGGLLGLGLG', 'GGGLLLLGLGLG']), # different above 1170 | ('paridhānīyam', 'LLLLLLGLLGGLLGLLGGLLGGG'), 1171 | ('muhurā', 'LLGLGLL'), 1172 | ('śarameyā', 'LLGGLLLGLLGG'), 1173 | ('mahī', 'LG'), 1174 | # ('pramālikā', ['LLGGLLGLGLGG', 'LLGLLGLGLGG']), # same as upodgatā above 1175 | ('praguṇam', 'LLGGG'), 1176 | ('vāsantikā', ['GGLGGLLGLGLG', 'GGLGGLLGLGLG', 1177 | 'GGLGGLLGLGLG', 'LGLGGLLGLGLG']), 1178 | ('śaśikalā', 'LLLLLLLLLLLLLLG'), 1179 | ('līlāratnam', 'GGGGGGLLGGGG'), 1180 | ('gahvaram', 'GLGGLGGLGLG'), 1181 | ('abhrabramaṇam', 'GGLLLLGGGLLGLLLLLLLLLLLLG'), 1182 | # ('priyaṃvadaḥ', 'LLLGLLLGLGLG'), # priyaṃvadā in VR 1183 | ('snu', 'L'), 1184 | ('vilulitavanamālā', 'LLLLLLGGGLLLLLLGGG'), 1185 | ('parviṇī', 'LLLLLLGLGLLLGLGGLG'), 1186 | ('atiraṃhaḥ', 'LGLLGLLGLGLGG'), 1187 | ('upasthitapracupitam', ['GGGLLGLGLGLLGG', 'LLGLLLLGLGLGG', 1188 | 'LLLLLLLLG', 'LLLLLLLLLLGLLGG']), 1189 | ('vīṇādaṇḍam', 'LGLLLGLGGGGG'), 1190 | ('lolalolambalīlam', 'GLGGLGGLGGLGGLGGLGG'), 1191 | ('svaravarṣiṇī', 'LLGLGLLGLGGG'), 1192 | ('svanakarī', 'LLLGLLG'), 1193 | ('ravonmukhī', 'GGLLGLGLG'), 1194 | ('śāntasurabhiḥ', 'GLLLLLGLGLLGLLG'), 1195 | ('suvṛttiḥ', 'LLGLLLLLLGG'), 1196 | ('naragā', 'LLLLGGLLGG'), 1197 | ('upendravajrā', 'LGLGGLLGLGG'), 1198 | ('virājikarā', 'LGLLGGGG'), 1199 | # # Covered by upajāti 1200 | # ('kīrtiḥ', ['LGLGGLLGLGG', 'GGLGGLLGLGG', 1201 | # 'GGLGGLLGLGG', 'GGLGGLLGLGG']), 1202 | ('cārvaṭakam', 'GGGGLLGLLGGGGGG'), 1203 | ('murajikā', 'LLLGGLL'), 1204 | ('saṃsṛtaśobhāsāraḥ', 'LLGGGLLGGGG'), 1205 | ('nāndīmukhī', 'LLLLLLGGLGGLGG'), 1206 | ('aśvagatiḥ', 'GLLGLLGLLGLLGLLLLG'), 1207 | ('vṛttahāri', 'LGGLGL'), 1208 | ('viratimahatī', 'GGLLLLLLLLGG'), 1209 | ('īhāmṛgī', 'GGLGLLGGLGG'), 1210 | ('nīrāñjaliḥ', 'GGLLLLGGLG'), 1211 | ('hīrakahāradharam', 'GLLGLLGLLGLLGLLGLL'), 1212 | ('nirasikā', 'LLLGLG'), 1213 | ('sphuṭaghaṭitā', 'LLLLGGLLL'), 1214 | ('mālīnam', 'GGGLL'), 1215 | ('kāru', 'LLGL'), 1216 | ('priyajīvitam', 'GLLGLLGLLGLLGLLGLLGLLGLLGG'), 1217 | ('pañcaśikhā', 'LLGLLGGG'), 1218 | ('uditavijohā', 'GGLGGLLLLGG'), 1219 | ('sammadākrāntā', ['GGGLLGLGLGLGGG', 'LLGLLGLGLGLGG']), 1220 | # ('dodhakam', 'GLLGLLGLLGG'), # in VR 1221 | ('dhṛṣṭapadam', 'GLLGLLLGLLGG'), 1222 | ('kurucarī', 'GLGGLLLG'), 1223 | ('śephālī', 'LGGGGGGGGG'), 1224 | ('anibhṛtam', 'LLLGGL'), 1225 | ('chalitakapadam', 'GGLLLLLGLLGG'), 1226 | ('vakrāvalokaḥ', 'LLLLLLGGGGLGGLGG'), 1227 | ('sambuddhiḥ', 'LLGGGLLGG'), 1228 | ('śampā', 'GGLLLLGGGGGG'), 1229 | ('anirbhāraḥ', 'LGGGGGGG'), 1230 | ('vahirvali', 'LGLLGLG'), 1231 | ('śambhuḥ', 'LLGGGLLGGGLLGGGGGGG'), 1232 | ('svinnaśarīram', 'GLLGGLGGLGGLG'), 1233 | ('bhūrimadhu', 'GGGGLLL'), 1234 | ('nirgalitamekhalā', 'LLLLLLGLGLLLGLLLGLG'), 1235 | ('hāriṇī', 'GGGGLLLLLLGGLGGLG'), 1236 | ('abhirāmā', 'LLGGLLGGLLLLG'), 1237 | ('śaragītiḥ', 'GLGLLGG'), 1238 | # ('śrīḥ', 'G'), # in VR 1239 | ('mātrā', 'GGGLLLLLLGG'), 1240 | ('bhogāvalī', 'GGLGLLGLGLLGLLLLLLLGLG'), 1241 | # ('vasantamālikā', ['LLGLLGLGLGG', 'LLGGLLGLGLGG']), # in curated 1242 | ('jihmāśayā', 'GGLGLLLGLLG'), 1243 | ('rājarājī', 'GGLGGLG'), 1244 | ('kanakakāminī', 'LGLGGLLLGLG'), 1245 | ('mayūvadanā', 'GLLLGLLGLGLLGLG'), 1246 | # ('śikhariṇī', 'LGGGGGLLLLLGGLLLG'), # in curated 1247 | ('ānaddham', 'GLGLLLLLGGGLGGG'), 1248 | ('mahoddhatā', 'LGGLGLG'), 1249 | ('madhuvāri', ['LLGLGLLLGLGLG', 'GGLGLLGLGLLGL']), 1250 | ('sukhakārikā', 'LLGLGLLGLGGGL'), 1251 | ('kāmoddhatā', 'GGLGGLL'), 1252 | ('kilikitā2', ['LLLGLLLGLGLG', 'GLGLLLGLGLG']), 1253 | ('mṛdukīlā', 'LLGGLG'), 1254 | ('ramaṇaḥ', 'LLG'), 1255 | ('kareṇuḥ', 'GLGGGG'), 1256 | ('camūruḥ', ['LLGLLLLGLGLGG', 'GLGLLLLGLGLG']), 1257 | ('khagatiḥ', 'GLLGLLGLLGLLGLLG'), 1258 | ('bhogāvaliḥ', 'GGLLLLLLLLGGLLGG'), 1259 | # different in VR, also present in curated as Candrikā, Utpalinī 1260 | # ('candrikā2', 'LLLLLLGGLGGLG'), 1261 | ('nārācam', 'LLLLLLGLGGLGGLGGLG'), 1262 | ('śilīmukhojjṛmbhitam', 'GGGLLGLGLLLLLGLGGLG'), 1263 | ('kanyā', 'GGGG'), 1264 | ('vasumatī', 'GGLLLG'), 1265 | ('kalitakamalavilāsaḥ', 'LLLLLLGGGGG'), 1266 | ('nīrāntikam', 'GGLGLLLGLLGG'), 1267 | ('sārikā', ['GLGLLLGLGLG', 'GLGLLLGLLGG']), 1268 | ('manolā', 'LGGLLGGG'), 1269 | ('lalitalalāma', 'LLLLGLGGLGGLGGLGGLLLG'), 1270 | ('vijayaparicayā', 'LLLLLLGGLLGG'), 1271 | # ('mṛdumālatī', ['LLLLGLLGLGLG', 'LLLLLLGLGLG']), # above as paravaktram 1272 | ('mandākṣamandaram', 'LLLLLLGGGGGGLGLGLGGGG'), 1273 | ('parikhāyatanam', 'LLGLLGLLGGLLLLGG'), 1274 | ('śarat', 'LLLGLLGLLG'), 1275 | ('yaśaskarī', 'LGLGLGGG'), 1276 | ('viśikhalatā', 'LLLLGLGLGGLG'), 1277 | ('surāḍhyā', ['LLLLLLGLGLGG', 'GGGLLGLGLGG']), 1278 | ('bhāskaram', 'GLLLLLLGLLGGGLLLLLLLLLLGG'), 1279 | ('nīhārī', 'GGGGGGL'), 1280 | ('rāḍhi', 'GLLGGL'), 1281 | ('ālolaghaṭikā', ['LLGLLGLGLG', 'GGLLLGLGLG']), 1282 | ('kalā', 'LGLG'), 1283 | ('lavalīlatā', 'GLLGLGLLLGLLG'), 1284 | ('kāraviṇī', 'GLLLGLGLLLGLLG'), 1285 | ('hīram', 'GGLLLLG'), 1286 | ('bimbālakṣyam', 'GGGGLGGGLGGLGG'), 1287 | ('pārāvāraḥ', 'GGLLLLLLLLGGGG'), 1288 | ('praphullakadalī', 'LGLLLGGGGGG'), 1289 | ('ayavatī', ['LLGGGGLLLLG', 'GGLLLLGGLLG']), 1290 | ('mīnapadī', 'GLLGLGL'), 1291 | ('surayānavatī', 'LLGLLGGLLG'), 1292 | ('kumbhodhnī', 'GGGGLLLGLLGG'), 1293 | ('muśaki', 'GGLLLLL'), 1294 | ('bhūmadhārī', 'LGGLGGGG'), 1295 | # # Covered by upajāti 1296 | # ('jāyā', ['GGLGGLLGLGG', 'LGLGGLLGLGG', 1297 | # 'LGLGGLLGLGG', 'GGLGGLLGLGG']), 1298 | ('vāṇībhūṣā', 'GGGGGGGGLLLLGGG'), 1299 | ('virodhinī', 'LLLGLLLLGLGLG'), 1300 | ('bhujaṅgabhṛtā', ['LLGLLGLLGLLGG', 1301 | 'GLLGLLGLLGLLG']), 1302 | ('śambaradhārī', 'GLLGGLLGG'), 1303 | ('camarīcaram', 'LLLLLLGLGLLLGLG'), 1304 | ('vihāriṇī', 'LLGLGLGGLGG'), 1305 | ('māyāsārī', 'LLLLGGGGG'), 1306 | ('pramodapadam', ['LLLLGLLGLGLLLGG', 1307 | 'LLLLLLGLGLGLGG']), 1308 | ('sudāyi', 'LGLLLL'), 1309 | ('kiṃśukāstaraṇam', 'GLGLLGLGGGGG'), 1310 | ('phalguḥ', 'LLGGLLLLGGLLLLGGL'), 1311 | ('pārāvataḥ', 'GGLGGLGGLGGLG'), 1312 | ('atisurahitā', ['GGLLLLLLLLLLG', 'LLLLLLLLGLLGG']), 1313 | ('sammadavadanā', 'GLLGLLGLLLLG'), 1314 | ('viśālaprabham', 'LGLGGLGGLG'), 1315 | ('vanitābharaṇam', 'GLLGLLLLGLLG'), 1316 | ('malayasurabhiḥ', 'GGGLLLLLLGGG'), 1317 | ('galitanālā', 'LGLGLLLGGGLG'), 1318 | ('saurakāntā', 'GLGGLLG'), 1319 | # ('bhujaṅgavijṛmbhitam', 'GGGGGGGGLLLLLLLLLLGLGLLGLG'), # in VR 1320 | ('akahari', 'LLLLLLLLLLLLLL'), 1321 | ('ardhakṣāmā', 'GGGGGLLGG'), 1322 | ('kāsārakrāntā', 'GGGGGLLGLLGG'), 1323 | ('tārakam', 'LLGLLGLLGLLGG'), 1324 | ('uditadineśaḥ', 'LLGLLLLGGGG'), 1325 | ('pratāritā', 'LLGLLLGLGLG'), 1326 | # ('nardaṭakam', 'LLLLGLGLLLGLLGLLG'), # in curated 1327 | ('lolam', 'GGLGG'), 1328 | ('dṛptadehā', 'LGGGLGGGLGGLGG'), 1329 | ('dhaunikam', 'GLLLLLLLG'), 1330 | ('pratimā', 'LLGLLGLLGLLGLLGLLGLLG'), 1331 | ('parāmodaḥ', 'LGGLLGLLGLGLLLLGGG'), 1332 | ('dhoritam', 'GLLLLLGLGGLGLLG'), 1333 | ('kharakarā', 'LLLGLGG'), 1334 | ('garuḍarutam', 'LLLLGLGLLLGLGGLG'), 1335 | ('karabhit', 'LLGLLGG'), 1336 | ('sāriṇī', 'GLGLLLGLGLLLGLG'), 1337 | ('acaladhṛtiḥ', 'LLLLLLLLLLLLLLLL'), 1338 | ('sumukhī', 'LLLLGLLGLLG'), 1339 | ('śukāvalī', ['GGLLGLGLGG', 'GGGLLLLGLGLGG']), 1340 | ('ītiḥ', 'GLLLGG'), 1341 | ('nibhālitā', 'LLGGGLGLG'), 1342 | ('śarakalpā', 'LLLLLLLLGLLLLGG'), 1343 | # ('rathapadam', 'LLLLLLLLGGG'), # vṛntā in VR 1344 | ('kacchapī', 'LGGGLG'), 1345 | ('bṛhaccharāvatī', ['LLGGLLLLLLGLGLG', 1346 | 'LLLLLLGLGLGG']), 1347 | # ('padyā', 'LGLGGGG'), # sumohitā above 1348 | # ('śārdūlavikrīḍitam', 'GGGLLGLGLLLGGGLGGLG'), # in curated 1349 | ('priyatilakā', 'GLLGLLLLG'), 1350 | ('sahelikā', 'LGLGLLGLG'), 1351 | ('vilāsavāsaḥ', 'GLLLLGGLLGLLLLGLGLGLLGG'), 1352 | ('mugdham', 'GGGL'), 1353 | ('kaṇṭhī', 'LGLGG'), 1354 | ('cāmaram', 'GLGLGLG'), 1355 | ('kaṃsāsāri', 'LGGGGGL'), 1356 | ('methikā', 'GLGLLGL'), 1357 | # ('paṅktiḥ', 'GLLGG'), # paṅkti in VR 1358 | ('hemamihikā', 'GLLLGLLGLGLLGL'), 1359 | ('śuddhāntam', 'LLLLLLLLGGGG'), 1360 | ('vilāsavāpī', ['GGLLGLGLGG', 'LLGGLLGLGLGLGG']), 1361 | ('navanīlatā', ['LLGLLGLGLG', 'LLGGLLLGLGLG']), 1362 | ('upalekhā', 'LLGGLLLLLGLG'), 1363 | ('kālasāroddhataḥ', 'LGLGGLLGLLLGLGGLG'), 1364 | ('carapadam', 'LLLGGLGGLG'), 1365 | ('maṇimukhī', 'LLLGLGL'), 1366 | ('śilā', 'LGLLG'), 1367 | # ('ṛṣabhagajavilasitam', 'GLLGLGLLLLLLLLLG'), # ṛṣabhagajavilasita in VR 1368 | ('puṣṭidā', ['GGLGGLLGLGLG', 'GGLGGLLGLGLG', 1369 | 'LGLGGLLGLGLG', 'GGLGGLLGLGLG']), 1370 | ('sukhelā', 'LLGLGLGLGG'), 1371 | ('añcitāgrā', ['LLLLGLLGLGLGG', 'LLLLLLGLGLGG']), 1372 | ('virahavirahasyam', 'GGGLLLLLLGGLLGGLLLLLLLLGG'), 1373 | # ('meghavisphūrjitā', 'LGGGGGLLLLLGGLGGLGG'), # meghavisphurjita in VR 1374 | ('kākiṇikā', 'LGLLGLGLLLGLLG'), 1375 | ('hariṇaplutam', 'GGGLLGLGLLGLGLLGLG'), 1376 | ('kandavinodaḥ', 'GLLGGGLLGGG'), 1377 | ('māṇavikāvikāṣaḥ', 'GGLGLLGLLGLGG'), 1378 | # ('vasantatilakā', 'GGLGLLLGLLGLGG'), # in curated 1379 | ('śarāvatī', ['LLLLLLGLGLGG', 'LLGGLLLLLLGLGLG']), 1380 | ('krīḍitakaṭakā', 'GLLLLGLLGGGGGGG'), 1381 | # ('senikā', 'GLGLGLGLGLG'), # śyenikā in VR 1382 | ('surākṣī', 'LLLLGGLGGG'), 1383 | ('kaṅkaṇakvāṇavāṇī', 'GGGGLGGLGGLGGLGGLGGLGG'), 1384 | ('varmitā', 'GLGLGLLGLG'), 1385 | # ('śālinī', 'GGGGGLGGLGG'), # in curated 1386 | ('viyadvāṇī2', ['GGGLLGLGLGGG', 'LLGGLLGLGLGG']), # different above 1387 | ('kusumbhinī', 'LGLGLLLLGLGLGG'), 1388 | ('baladhārī', 'LLGGLLLLGG'), 1389 | ('pratīhāraḥ', 'GLGGLGGLGGLGGLGGL'), 1390 | ('prapātaḥ', 'LGGLGGLGGLGGLG'), 1391 | ('upahitacaṇḍī', 'LLGGLLLLGGG'), 1392 | ('maṇimadhyam', 'GLLGGGLLG'), 1393 | ('madhyādhārā', 'GGGGLLGGGG'), 1394 | # ('tūṇakam', 'GLGLGLGLGLGLGLG'), # Cārucāmaram in curated 1395 | ('tanukilakiñcitam', 'GGGGGGGGGLLLLGLLLLGGLLGGGG'), 1396 | ('acalaviratiḥ', 'LLLLLLLLLLLLLLLLLLLLLG'), 1397 | ('vanitāvinodi', 'LLLGLLGLGL'), 1398 | ('dhavalam', 'LLLLLLLLLLLLLLLLLLG'), 1399 | ('paripoṣakam', 'LLGLLGLLGLLGLLGLLG'), 1400 | ('nīlā', 'GGLLLLGLGLG'), 1401 | ('khaurali', 'LLLLGGGGLL'), 1402 | ] 1403 | -------------------------------------------------------------------------------- /chandas/svat/data/dhaval_vrttaratnakara.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """List of metres from Vrtta-ratnakara, input by Dr. Dhaval Patel.""" 3 | 4 | from __future__ import absolute_import, division, print_function, unicode_literals 5 | 6 | data_vrttaratnakara = [ 7 | ('śrī', 'G'), 8 | ('strī', 'GG'), 9 | ('nārī', 'GGG'), 10 | ('mṛgī', 'GLG'), 11 | ('kanyā', 'GGGG'), 12 | ('paṅkti', 'GLLGG'), 13 | ('tanumadhyā', 'GGLLGG'), 14 | ('śaśivadanā', 'LLLLGG'), 15 | ('vasumatī', 'GGLLLG'), 16 | ('madhumatī', 'LLLLLLG'), 17 | ('madalekhā', 'GGGLLGG'), 18 | ('kumāralalitā', 'LGLLLGG'), 19 | # ('haṃsamālā', 'LLGGLGG'), # called bhūridhāmā in other list 20 | ('vidyunmālā', 'GGGG — GGGG'), 21 | # ('chitrapadā', 'GLLGLLGG'), # Shouldn't this be citrapadā? 22 | # ('māṇavaka', 'GLLGGLLG'), # in DD 23 | # ('haṃsaruta', 'GGGLLLGG'), # in other list too 24 | # ('samānikā', 'GLGLGLGL'), # Ends in laghu, not adding for now 25 | ('pramāṇikā', 'LGLGLGLG'), 26 | ('campakamālā', 'GLLGGGLLGG'), 27 | # ('nārācaka', 'GGLGLGLG'), # nārācikā in big list 28 | ('halamukhī', 'GLGLLLLLG'), 29 | ('bhujagaśiśubhṛtā', 'LLLLLLG — GG'), 30 | ('śuddhavirāṭ', 'GGGLLGLGLG'), 31 | ('paṇava', 'GGGLL — LLGGG'), 32 | ('mayūrasāriṇī', 'GLGLGLGLGG'), 33 | # ('rukmavatī', 'GLLGGGLLGG'), # Same as campakamālā above 34 | ('mattā', 'GGGG — LLLLGG'), 35 | ('manoramā', 'LLLGLGLGLG'), # TODO(shreevatsa): Could be mistake for Viyogini 36 | # ('upasthitā', 'GG — LLGLLGLG'), # Additional 'G' in big list 37 | ('indravajrā', 'GGLGGLLGLGG'), # covered by upajāti 38 | ('upendravajrā', 'LGLGGLLGLGG'), # covered by upajāti 39 | # ('sāndrapada', 'GLLGGLLLLGG'), # ends with G in DD, also anukūlā there 40 | ('sumukhī', 'LLLLG — LLGLLG'), 41 | ('dodhaka', 'GLLGLLGLLGG'), 42 | # ('śālinī', 'GGGG — GLGGLGG'), # in curated 43 | ('vātormī', 'GGGG — LLGGLGG'), 44 | ('bhramaravilasitā', 'GGGG — LLLLLLG'), 45 | # ('śrī', 'GLLGG — LLLLGG'), # Another same name above 46 | # ('rathoddhatā', 'GLGLLLGLGLG'), # in curated 47 | # ('svāgatā', 'GLGLLLGLLGG'), # in curated 48 | ('vṛntā', 'LLLL — LLLLGGG'), 49 | # ('bhadrikā', 'LLLLLLGLGLG'), # subhadrikā in DD 50 | ('śyenikā', 'GLGLGLGLGLG'), 51 | # These two are the same! 52 | # ('upasthita', 'LGLLLGGGLGG'), # same as śikhaṇḍita below 53 | # ('śikhaṇḍita', 'LGLLLGGGLGG'), # same as upasthita above 54 | ('śikhaṇḍita / upasthita', 'LGLLLGGGLGG'), # added 55 | ('mauktikamālā / kalasvanavaṃśaḥ', 'GLLGLLGGLLG'), # name from other list 56 | ('candravartma', 'GLGLLLGLLLLG'), 57 | # ('vaṃśastha', 'LGLGGLLGLGLG'), # in curated 58 | ('indravaṃśā', 'GGLGGLLGLGLG'), 59 | # ('toṭaka', 'LLGLLGLLGLLG'), # in curated 60 | # ('drutavilambita', 'LLLGLLGLLGLG'), # in curated 61 | # ('puṭa', 'LLLLLLGGGLGG'), # in data_dhaval with better name 62 | # ('pramuditavadanā', 'LLLLLLGLGGLG'), # Same as prabhā below 63 | # ('mauktidadāma', 'LGLLGLLGLLGL'), # Ends in laghu, not adding for now 64 | ('kusumavicitrā', 'LLLLGG — LLLLGG'), 65 | ('jaloddhatagati', 'LGLLLGLGLLLG'), # Used by Bharavi: BhKir_5.27 66 | # ('bhujaṅgaprayāta', 'LGGLGGLGGLGG'), # in curated 67 | # ('sragviṇī', 'GLGGLGGLGGLG'), # in curated 68 | ('priyaṃvadā', 'LLLGLLLGLGLG'), # = priyaṃvadaḥ in DD 69 | ('maṇimālā', 'GGLLGGGGLLGG'), 70 | ('lalitā', 'GGLGLLLGLGLG'), 71 | # ('pramitākṣarā', 'LLGLGLLLGLLG'), # in curated 72 | ('ujjvalā', 'LLLLLLGLLGLG'), 73 | ('vaiśvadevī', 'GGGGG — GLGGLGG'), 74 | ('jaladharamālā', 'GGGG — LLLLGGGG'), 75 | ('navamālinī / nayamālinī', 'LLLL — GLGLLLGG'), # nayamālinī in other list 76 | # ('prabhā', 'LLLLLLGLGGLG'), # = pramuditavadanā above, also in curated. 77 | ('mālatī', 'LLLLGLLGLGLG'), 78 | # ('pañcacāmara', 'LGLGLGLGLGLG'), # shouldn't this have more syllables? 79 | # ('tāmarasa', 'LLLLGLLGLLGG'), # in DD list too 80 | # ('kṣamā', 'LLLLLLGGLGGLG'), # In curated (kept there for more names) 81 | # ('praharṣiṇī', 'GGGLLLLGLGLGG'), # in curated 82 | # ('rucirā', 'LGLGLLLLGLGLG'), # in curated (kept there for more names) 83 | # ('mattamayūra', 'GGGG — GLLGGLLGG'), # better name 84 | # ('mañjubhāṣiṇī', 'LLGLGLLLGLGLG'), # in curated 85 | ('kalahaṃsaḥ / nandinī', 'LLGLGLLLGLLGG'), # kalahaṃsaḥ in other list 86 | ('candrikā1', 'LLLL — LLGGLGLGG'), # different in DD 87 | ('asambādhā', 'GGGGG — LLLLLLGGG'), 88 | ('aparājitā', 'LLLLLLG — LGLLGLG'), 89 | ('praharaṇakalikā', 'LLLLLLG — LLLLLLG'), 90 | # ('vasantatilakā', 'GGLGLLLGLLGLGG'), # in curated 91 | # ('induvadanā', 'GLLLGLLLGLLLGG'), # indravadanā in DD 92 | ('alolā', 'GGGLLGG — GGGLLGG'), 93 | # These three below are the same! 94 | ('śaśikalā', 'LLLLLLL — LLLLLLLG'), 95 | # ('mālā', 'LLLLLL — LLLLLLLLG'), 96 | # ('maṇiguṇanikara', 'LLLLLLLL — LLLLLLG'), 97 | # ('malinī', 'LLLLLLGG — GLGGLGG'), # Already in curated 98 | # ('prabhadraka', 'LLLLGLGLLLGLGLG'), # better name 99 | ('elā', 'LLGLG — LLLLLLLLGG'), 100 | ('candralekhā', 'GGGGLGG — GGLGGLGG'), 101 | ('ṛṣabhagajavilasita', 'GLLGLG — LLLLLLLLLG'), 102 | ('vāṇinī', 'LLLLGLGLLLGLGLGG'), 103 | # ('śikhariṇī', 'LGGGGG — LLLLLGGLLLG'), # in curated 104 | # ('pṛthvī', 'LGLLLGLG — LLLGLGGLG'), # in curated 105 | ('vaṃśapatrapatitam', 'GLLGLGLLLGLL — LLLLG'), # 'm' from DD 106 | # ('hariṇī', 'LLLLLG — GGGG — LGLLGLG'), # in curated 107 | # ('mandākrāntā', 'GGGG — LLLLLG — GLGGLGG'), # in curated 108 | # ('narkuṭaka', 'LLLLGLGLLLGLLGLLG'), # same as kokilaka below 109 | # ('kokilaka', 'LLLLGLG — LLLGLL — GLLG'), # in curated 110 | ('kusumitalatāvellitā', 'GGGGG — LLLLLG — GLGGLGG'), 111 | ('meghavisphurjita', 'LGGGGG — LLLLLG — GLGGLGG'), # meghavisphūrjitā in DD 112 | # ('śārdulavikrīḍita', 'GGGLLGLGLLLG — GGLGGLG'), # in curated 113 | ('suvadanā', 'GGGGLGG — LLLLLLG — GGLLLG'), 114 | # ('vṛtta', 'GLGLGLGLGLGLGLGLGLGL'), # ends in laghu, not adding for now 115 | # ('sragdharā', 'GGGGLGG — LLLLLLG — GLGGLGG'), # in curated 116 | ('madraka', 'GLLGLGLLLG — LGLLLGLGLLLG'), 117 | ('aśvalalita', 'LLLLGLGLLLG — LGLLLGLGLLLG'), # adritanayā in other list 118 | ('mattākrīḍam', 'GGGGGGGG—LLLLL—LLLLLLLLLG'), # last 'm' from other list 119 | ('tanvī', 'GLLGG — LLLLLLG — GLLGLLLLLLGG'), 120 | ('krauñcapadā', 'GLLGG — GLLGGLLL — LLLLLLL —LLLLG'), 121 | ('bhujaṅgavijṛmbhita', 'GGGGGGGG — LLLLLLLLLLG —LGLLGLG'), 122 | ('apavāha', 'GGGLLLLLL — LLLLLL — LLLLLL — LLGGG'), 123 | ('caṇḍavṛṣṭiprayātadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLG'), 124 | ('arṇadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLG'), 125 | ('arṇavadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 126 | ('vyāladaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 127 | ('jīmūtadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 128 | ('līlākaradaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 129 | ('uddāmadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 130 | ('śaṅkhadaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 131 | ('samudradaṇḍaka', 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 132 | ('bhujaṅgadaṇḍaka', 133 | 'LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG'), 134 | ('pracitakadaṇḍaka', 'LLLLLLLGGLGGLGGLGGLGGLGGLGG'), 135 | ('upacitrā', ['LLGLLGLLGLG', 'GLLGLLGLLGG']), # even pada same as dodhaka 136 | ('drutamadhyā', ['GLLGLLGLLGG', 'LLLLGLLGLLGG']), # odd same as dodhaka 137 | ('vegavatī1', ['LLGLLGLLGLLGG', 'GLLGLLGLLGG']), # different in DD 138 | ('bhadravirāṭ', ['GGLLGLGLGG', 'GGGLLGLGLG']), # different in DD 139 | ('ketumatī', ['LLGLGLLLGG', 'GLLGLGLLLGG']), 140 | # ('ākhyānikī', ['GGLGGLLGLGG', 'LGLGGLLGLGG']), # covered by upajāti 141 | # ('viparītākhyānikī', ['LGLGGLLGLGG', 'GGLGGLLGLGG']), # covered by upajāti 142 | ('hariṇaplutā', ['LLGLLGLLGLG', 'LLLGLLGLLGLG']), # TODO(shreevatsa): could be mistake for Drutavilambita 143 | # ('aparavaktra', ['LLLLLLGLGLG', 'LLLLGLLGLGLG']), # in curated 144 | # ('puṣpitāgrā', ['LLLLLLGLGLGG', 'LLLLGLLGLGLGG']), # in curated 145 | ('yavātparāmatīya', ['GLGLGLGLGLGL', 'LGLGLGLGLGLG']), 146 | # What is this? 147 | # ('padacaturūrdhva', ['........', 148 | # '............', 149 | # '................', 150 | # '....................']), 151 | ('āpīḍa', ['LLLLLLGG', 152 | 'LLLLLLLLLLGG', 153 | 'LLLLLLLLLLLLLLGG', 154 | 'LLLLLLLLLLLLLLLLLLGG']), 155 | ('kalikā', ['LLLLLLLLLLGG', 156 | 'LLLLLLGG', 157 | 'LLLLLLLLLLLLLGG', 158 | 'LLLLLLLLLLLLLLLLLLGG']), 159 | # TODO(shreevatsa): These two conflict with each other. 160 | # ('lavalī', ['LLLLLLLLLLGG', 161 | # 'LLLLLLLLLLLLLLGG', 162 | # 'LLLLLLGG', 163 | # 'LLLLLLLLLLLLLLLLLLGG']), 164 | # ('amṛtadhārā', ['LLLLLLLLLLGG', 165 | # 'LLLLLLLLLLLLLLGG', 166 | # 'LLLLLLLLLLLLLLLLLLGG', 167 | # 'LLLLLLGG']), 168 | # ('udgatā', ['LLGLGLLLGL', # already in curated 169 | # 'LLLLLGLGLG', 170 | # 'GLLLLLLGLLG', 171 | # 'LLGLGLLLGLGLG']), 172 | # # Same in DD 173 | # ('saurabhaka', ['LLGLGLLLGL', 174 | # 'LLLLLGLGLG', 175 | # 'GLGLLLGLLG', 176 | # 'LLGLGLLLGLGLG']), 177 | # ('lalita', ['LLGLGLLLGL', # better in DD 178 | # 'LLLLLGLGLG', 179 | # 'LLLLLLLLGLLG', 180 | # 'LLGLGLLLGLGLG']), 181 | # ('upasthitapracupita', ['GGGLLGLGLGLLGG', # better name in DD 182 | # 'LLGLLLLGLGLGG', 183 | # 'LLLLLLLLG', 184 | # 'LLLLLLLLLLGLLGG']), 185 | # TODO(shreevatsa): These two conflict with each other. 186 | # ('vardhamāna', ['GGGLLGLGLGLLGG', 187 | # 'LLGLLLLGLGLGG', 188 | # 'LLLLLGLLL', 189 | # 'LLLLLLLLLLGLLGG']), 190 | # ('śuddhavirāḍārṣabha', ['GGGLLGLGLGLLGG', 191 | # 'LLGLLLLGLGLGG', 192 | # 'GGLLGLGLG', 193 | # 'LLLLLLLLLLGLLGG']), 194 | ] 195 | -------------------------------------------------------------------------------- /chandas/svat/data/ganesh.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": ["Metres listed by Shatavadhani Dr. R. Ganesh as the most notable ones.", 3 | " See https://www.youtube.com/playlist?list=PLABJEFgj0PWVXr2ERGu2xtoSXrNdBs5xS", 4 | " Also: ~6:09 to 20:40 in https://www.youtube.com/watch?v=XZ_UeTV0NWg" 5 | ], 6 | "metres": [ 7 | ["Anuṣṭup (Śloka)", { 8 | "regex": "TODO01", 9 | "comment": "This is the most popular metre in Sanskrit literature.", 10 | "videos": ["https://www.youtube.com/watch?v=bnsA9XWBXPI&list=PLABJEFgj0PWVXr2ERGu2xtoSXrNdBs5xS&index=1"], 11 | "examples": ["cetaso 'stu prasādāya / satām prācetaso muniḥ // pṛthivyām padya-nirmāṇa-/vidyāyāḥ prathamam padam //", 12 | "namas-tuṅga-śiraś-cumbi-/candra-cāmara-cārave // trailokya-nagarārambha-/mūla-stambhāya śambhave //", 13 | "sujanaṃ vyajanam manye / cāru-vaṃśa-samudbhavam // ātmānaṃ tu paribhrāmya / para-tāpa-nivārakam //" 14 | ] 15 | }], 16 | ["Āryā", { 17 | "regex": ["22 4 22", "4 22 121 22 .", "22 4 22", "4 22 1 22 ."], 18 | "comment": "The four pādas have 12, 18, 12, and 15 mātrās respectively.", 19 | "examples": ["āparitoṣād viduṣāṃ / na sādhu manye prayogavijñānaṃ // balavadapi śikṣitānām / ātmany apratyayaṃ cetaḥ", 20 | "nītijñā niyatijñā / vādajñā api bhavanti vedajñāḥ // brahmajñā api labhyā // svājñāna-jñānino viralāḥ" 21 | ] 22 | }], 23 | ["Gīti", { 24 | "regex": ["22 4 22", "4 22 121 22 ."], 25 | "comment": "The four pādas have 12, 18, 12, and 18 mātrās respectively.", 26 | "examples": ["nindatu vā nandatu vā / mandamanīṣā niśamya kṛtim etām // harṣaṃ vā marṣaṃ vā / sarṣapamātram api naiva vindema", 27 | "kalamañjula-vāganumita-/ galapañjara-gataśukagrahautkaṇṭhyāt // amba radanāmbaraṃ te / bimbaphalaṃ śambarāriṇā nyastam" 28 | ] 29 | }], 30 | ["Upagīti", { 31 | "regex": ["22 4 22", "4 22 L 22 ."], 32 | "comment": "The four pādas have 12, 15, 12, and 15 mātrās respectively." 33 | }], 34 | ["Udgīti", { 35 | "regex": ["22 4 22", "4 22 L 22 .", "22 4 22", "4 22 121 22."], 36 | "comment": "The four pādas have 12, 18, 12, and 15 mātrās respectively." 37 | }], 38 | ["Āryāgīti", { 39 | "regex": ["22 4 22", "4 22 121 22 (4|2L)"], 40 | "comment": "The four pādas have 12, 20, 12, and 20 mātrās respectively." 41 | }], 42 | ["Upajāti", { 43 | "pattern": ".GLGGLLGLG.", 44 | "comment": "There is sometimes a 'slight yati' after 5 syllables." 45 | }], 46 | ["Vaṃśastha (Vaṃśasthavila)", "LGLGGLLGLGLG"], 47 | ["Indravaṃśā", "GGLGGLLGLGLG"], 48 | 49 | ["Rathoddhatā", "GLGLLLGLGLG"], 50 | ["Svāgatā", "GLGLLLGLLGG"], 51 | ["Drutavilambitam", "LLLGLLGLLGLG"], 52 | ["Mañjubhāṣiṇī", "LLGLGLLLGLGLG"], 53 | ["Śālinī", { 54 | "pattern": "GGGG—GLGGLGG", 55 | "video": "k0c_1eVIWHI" 56 | }], 57 | ["Praharṣiṇī", "GGGLLLLGLGLGG"], 58 | 59 | ["Bhujaṅgaprayātam", "LGG LGG LGG LGG"], 60 | ["Toṭakam", "LLG LLG LLG LLG"], 61 | ["Sragviṇī", "GLG GLG GLG GLG"], 62 | 63 | ["Pramitākṣarā", "LLGLGLLLGLLG"], 64 | ["Vasantatilakā", "GGLGLLLGLLGLGG"], 65 | ["Mālinī", "LLLLLLGG—GLGGLGG"], 66 | 67 | ["Cārucāmaram", "GL GL GL GL GL GL GL G"], 68 | ["Pañcacāmaram", "LG LG LG LG LG LG LG LG"], 69 | 70 | ["Mandākrāntā", "GGGG—LLLLLG—GLGGLGG"], 71 | ["Śikhariṇī", "LGGGGG–LLLLLGG—LLLG"], 72 | ["Hariṇī", "LLLLLG—GGGG—LGLLGLG"], 73 | ["Pṛthvī", "LGLLLGLG—LLLGLGGLG"], 74 | 75 | ["Kokilakam (Nardaṭakam)", "L L L L G L G L L L G — L L G L L G"], 76 | ["Mallikāmālā (Matta-kokilā)", "GL GLL GL GLL GL GLL GL G"], 77 | 78 | ["Śārdūlavikrīḍitam", "GGGLLGLGLLLG—GGLGGLG"], 79 | ["Sragdharā", "GGGGLGG—LLLLLLG—GLGGLGG"], 80 | ["Viyoginī", ["LLG LLGLGLG", 81 | "LLGGLLGLGLG"]], 82 | ["Aupacchandasikam", ["LLG LLGLGLGG", 83 | "LLGGLLGLGLGG"]], 84 | ["Aparavaktrā", ["LLLLLLG—LGLG", 85 | "LLLLG—LLGLGLG"]], 86 | ["Puṣpitāgrā", ["LLLL LLGLGLGG", 87 | "LLLLGLLGLGLGG"]], 88 | ["Udgatā", ["LL G L G L LL GL", 89 | "LL LL L G L G LG", 90 | " G LL L LL L G LLG", 91 | "LL G L G L LL GLGLG"]], 92 | ["Aśvadhāṭī", "GGLGLLL–GGLGLLL–GGLGLLLG"], 93 | ["Śivatāṇḍava", "LGLL LGLL LGLL LGLL LGLL LGLL LG"] 94 | ] 95 | } 96 | -------------------------------------------------------------------------------- /chandas/svat/data/ganesh.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Metres listed by Shatavadhani Dr. R. Ganesh as the most notable ones. 3 | 4 | See https://www.youtube.com/playlist?list=PLABJEFgj0PWVXr2ERGu2xtoSXrNdBs5xS 5 | and [TODO(shreevatsa): Vitasta video].""" 6 | 7 | from __future__ import absolute_import, division, print_function, unicode_literals 8 | 9 | data = [# TODO(shreevatsa): AnushtupShloka 10 | # TODO(shreevatsa): Arya 11 | # TODO(shreevatsa): Mention the "slight yati" after 5 syllables. 12 | ('Upajāti', '.GLGGLLGLG.'), 13 | # TODO(shreevatsa): Vamshastha 14 | # TODO(shreevatsa): Indravamsha 15 | ('Rathoddhatā', 'GLGLLLGLGLG'), 16 | ('Svāgatā', 'GLGLLLGLLGG'), 17 | ('Drutavilambitam', 'LLLGLLGLLGLG'), 18 | ('Mañjubhāṣiṇī', 'LLGLGLLLGLGLG'), 19 | ('Śālinī', 'GGGG—GLGGLGG'), 20 | ('Praharṣiṇī', 'GGGLLLLGLGLGG'), 21 | 22 | ('Bhujaṅgaprayātam', 'LGG LGG LGG LGG'), 23 | ('Toṭakam', 'LLG LLG LLG LLG'), 24 | ('Sragviṇī', 'GLG GLG GLG GLG'), 25 | 26 | ('Pramitākṣarā', 'LLGLGLLLGLLG'), 27 | ('Vasantatilakā', 'GGLGLLLGLLGLGG'), 28 | ('Mālinī', 'LLLLLLGG—GLGGLGG'), 29 | 30 | ('Cārucāmaram', 'GL GL GL GL GL GL GL G'), 31 | ('Pañcacāmaram', 'LG LG LG LG LG LG LG LG'), 32 | 33 | ('Mandākrāntā', 'GGGG—LLLLLG—GLGGLGG'), 34 | ('Śikhariṇī', 'LGGGGG–LLLLLGG—LLLG'), 35 | ('Hariṇī', 'LLLLLG—GGGG—LGLLGLG'), 36 | ('Pṛthvī', 'LGLLLGLG—LLLGLGGLG'), 37 | 38 | ('Kokilakam (Nardaṭakam)', 'L L L L G L G L L L G — L L G L L G'), 39 | ('Mallikāmālā (Matta-kokilā)', 'GL GLL GL GLL GL GLL GL G'), 40 | 41 | ('Śārdūlavikrīḍitam', 'GGGLLGLGLLLG—GGLGGLG'), 42 | ('Sragdharā', 'GGGGLGG—LLLLLLG—GLGGLGG'), 43 | ('Viyoginī', ['LLGLLGLGLG','LLGGLLGLGLG']), 44 | # TODO(shreevatsa): Aupacchandasika: but without the alternative names? 45 | # ('Aupacchandasikam (Vasantamālikā) (Upodgatā)', ['LLG LLGLGLGG', 46 | # 'LLGGLLGLGLGG']), 47 | ('Aparavaktrā', ['LLLLLLG—LGLG', 48 | 'LLLLG—LLGLGLG']), 49 | ('Puṣpitāgrā', ['LLLL LLGLGLGG', 50 | 'LLLLGLLGLGLGG']), 51 | ('Udgatā', ['LL G L G L LL GL', 52 | 'LL LL L G L G LG', 53 | ' G LL L LL L G LLG', 54 | 'LL G L G L LL GLGLG']), 55 | # TODO(shreevatsa): Check where this alternative name came from. 56 | ('Aśvadhāṭī (Sitastavakaḥ)', 'GGLGLLL–GGLGLLL–GGLGLLLG'), 57 | ('Śivatāṇḍava', 'LGLL LGLL LGLL LGLL LGLL LGLL LG'), 58 | ] 59 | -------------------------------------------------------------------------------- /chandas/svat/data/metrical_data.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Data structures that store matching metres for known patterns.""" 3 | 4 | from __future__ import absolute_import, division, unicode_literals 5 | 6 | import logging 7 | import os 8 | 9 | try: unicode 10 | except NameError: unicode = str 11 | 12 | import itertools 13 | import re 14 | import unicodedata 15 | 16 | 17 | """ 18 | What is a metre? When are two metres the same? 19 | 20 | Shorturl for a (fully-specified) vṛtta metre 21 | - The "short url" form of each pattern in the list, separated by '.'s 22 | - A '-1' etc. appended, in case of multiple metres? No, don't bother. They can all share the same url. 23 | 24 | Shorturl for other (mātrā and regex-based) metre: 25 | - m- (because there aren't so many of them, we'll hand-curate it. This includes Anushtup, the Arya family, etc.) 26 | 27 | A metre has: 28 | - an id 29 | - a shorturl 30 | - a name or names (this is not one-to-one with the metres) 31 | - a pattern (concatenation of the patterns/regexes for its four(always?) padas) 32 | - some (sets of) yati-sthanas (see: https://github.com/shreevatsa/sanskrit/issues/68) 33 | - additional data: e.g. video link, further description, examples, and so on. 34 | 35 | So we can use, to identify or distinguish metres, not the name (ideally) and 36 | instead either the pattern, or pattern+yatis. 37 | In other words: the *minimum* requirement for two metres to be the same is that 38 | they have the same pattern. Otherwise they are not the same metre, even if they 39 | have the same name. 40 | 41 | A more precise procedure: 42 | - Maintain a "perfect index": index of perfect patterns (without G->L variants) or regexes: P1P2P3P4 -> [ids] 43 | - Each time a metre is encounted from a data source, compute its pattern. 44 | - Check whether any existing metre has the same pattern (loop through perfect_index[p]). 45 | - If (pattern and) yatis match, combine the names (and additional data). 46 | - If (pattern and) names match, combine the yatis (and additional data). 47 | - Else, do nothing (we will add it as a new metre). 48 | - Else, add it as a new metre. 49 | 50 | Adding a new metre: 51 | - Append it (will all its data) to a list. Note index (call it `id`). 52 | - Populate indexes: perfect, full, ardha1-2, pada1-4: they all map pattern -> [ids] 53 | """ 54 | 55 | def to_short_url(pattern): 56 | assert re.match(r'^[LG]*$', pattern), pattern 57 | h = hex(int('1' + pattern.replace('L', '0').replace('G', '1'), 2)) 58 | assert h.startswith('0x') 59 | if h.endswith('L'): h = h[:-1] 60 | return h[2:] 61 | 62 | def from_short_url(shorturl): 63 | assert shorturl[0] != '0', shorturl 64 | b = bin(int(shorturl, 16)) 65 | assert b.startswith('0b1') 66 | return b[3:].replace('0', 'L').replace('1', 'G') 67 | 68 | 69 | known_full_patterns = {} 70 | known_full_regexes = [] 71 | 72 | known_half_patterns = {} 73 | known_half_regexes = [] 74 | 75 | known_pada_patterns = {} 76 | known_pada_regexes = [] 77 | 78 | pattern_for_metre = {} 79 | all_data = {} 80 | 81 | video_for_metre = {} 82 | 83 | def jsonToPy(filename): 84 | """Reads JSON from a file, and puts it into a similar data structure as before.""" 85 | ret = [] 86 | import json 87 | data = json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)), filename))) 88 | assert data.keys() <= {'comment', 'metres'} 89 | for metre_name, metre_value in data['metres']: 90 | if isinstance(metre_value, dict): 91 | # assert metre_value.keys() <= {'pattern', 'comment', 'instance'}, metre_value.keys() 92 | if 'pattern' not in metre_value.keys(): 93 | # logging.debug('Skipping this: ', metre_value.keys(), ' in ', metre_value) 94 | continue 95 | metre_value = metre_value['pattern'] 96 | if isinstance(metre_value, unicode) and metre_value.startswith('TODO'): 97 | continue 98 | ret.append((metre_name, metre_value)) 99 | return ret 100 | 101 | 102 | def GetPattern(metre): 103 | return pattern_for_metre.get(metre) 104 | 105 | 106 | def _RemoveChars(input_string, chars): 107 | """Wrapper function because string.translate != unicode.translate.""" 108 | # logging.debug('input_string is ', input_string.encode('utf-8')) 109 | for char in chars: 110 | input_string = input_string.replace(char, '') 111 | return input_string 112 | 113 | 114 | def _CleanUpPattern(pattern): 115 | pattern = _RemoveChars(pattern, [unicodedata.lookup('SPACE'), unicodedata.lookup('EM DASH'), unicodedata.lookup('EN DASH')]) 116 | assert re.match(r'^[LG.]*$', pattern), pattern 117 | return pattern 118 | 119 | 120 | def _CleanUpSimpleRegex(regex): 121 | regex = _RemoveChars(regex, [unicodedata.lookup('SPACE'), unicodedata.lookup('EM DASH'), unicodedata.lookup('EN DASH')]) 122 | # TODO(shreevatsa): Make this work. Why does this regex have to be simple? 123 | # regex = regex.replace('4', '(LLLL|GLL|LGL|LLG|GG)') 124 | regex = regex.replace('4', '') 125 | assert re.match(r'^[LG.]*$', regex), regex 126 | return regex 127 | 128 | 129 | def _AddPatternForMetre(metre_name, pada_patterns): 130 | if metre_name in pattern_for_metre: 131 | if pattern_for_metre[metre_name] != pada_patterns: 132 | # logging.debug('Mismatch for %s' % metre_name) 133 | # logging.debug(pattern_for_metre[metre_name]) 134 | # logging.debug(' vs ') 135 | # logging.debug(pada_patterns) 136 | # assert False 137 | pass 138 | # logging.debug('Not overwriting as already present: %s' % metre_name) 139 | return 140 | pattern_for_metre[metre_name] = pada_patterns 141 | 142 | 143 | def _AddFullPattern(full_pattern, metre_name): 144 | if full_pattern in known_full_patterns: 145 | # TODO(shreevatsa): Figure out what exactly to do in this case 146 | # logging.debug('Error: full pattern already present') 147 | # logging.debug(metre_name) 148 | # logging.debug(full_pattern) 149 | # logging.debug(known_full_patterns[full_pattern]) 150 | return False 151 | assert full_pattern not in known_full_patterns 152 | known_full_patterns[full_pattern] = {metre_name: True} 153 | return True 154 | 155 | def _AddHalfPattern(half_pattern, metre_name, which_halves): 156 | known_half_patterns.setdefault(half_pattern, {}).setdefault(metre_name, set()).update(which_halves) 157 | 158 | def _AddPadaPattern(pada_pattern, metre_name, which_padas): 159 | known_pada_patterns.setdefault(pada_pattern, {}).setdefault(metre_name, set()).update(which_padas) 160 | 161 | def _AddSamavrttaPattern(metre_name, each_pada_pattern): 162 | """Given a sama-vṛtta metre's pattern, add it to the data structures.""" 163 | clean = _CleanUpPattern(each_pada_pattern) 164 | # assert re.match(r'^[LG]*G$', clean), (each_pada_pattern, metre_name) 165 | _AddPatternForMetre(metre_name, [clean] * 4) 166 | 167 | patterns = [clean[:-1] + 'G', clean[:-1] + 'L'] 168 | for (a, b, c, d) in itertools.product(patterns, repeat=4): _AddFullPattern(a + b + c + d, metre_name) 169 | for (a, b) in itertools.product(patterns, repeat=2): _AddHalfPattern(a + b, metre_name, {1, 2}) 170 | for a in patterns: _AddPadaPattern(a, metre_name, {1, 2, 3, 4}) 171 | 172 | 173 | def _AddArdhasamavrttaPattern(metre_name, odd_and_even_pada_patterns): 174 | """Given an ardha-sama-vṛtta's pattern, add it.""" 175 | (odd_pada_pattern, even_pada_pattern) = odd_and_even_pada_patterns 176 | clean_odd = _CleanUpPattern(odd_pada_pattern) 177 | assert re.match(r'^[LG]*$', clean_odd) 178 | clean_even = _CleanUpPattern(even_pada_pattern) 179 | # if clean_even.endswith('L'): 180 | # logging.debug('Not adding %s for now, as %s ends with laghu' % (metre_name, clean_even)) 181 | # return 182 | # assert re.match(r'^[LG]*G$', clean_even), (metre_name, clean_even) 183 | _AddPatternForMetre(metre_name, [clean_odd, clean_even] * 2) 184 | 185 | patterns_odd = [clean_odd[:-1] + 'G', clean_odd[:-1] + 'L'] 186 | patterns_even = [clean_even[:-1] + 'G', clean_even[:-1] + 'L'] 187 | for (a, b, c, d) in itertools.product(patterns_odd, patterns_even, repeat=2): _AddFullPattern(a + b + c + d, metre_name) 188 | for (a, b) in itertools.product(patterns_odd, patterns_even): _AddHalfPattern(a + b, metre_name, {1, 2}) 189 | for a in patterns_odd: _AddPadaPattern(a, metre_name, {1, 3}) 190 | for b in patterns_even: _AddPadaPattern(b, metre_name, {2, 4}) 191 | 192 | 193 | def _AddVishamavrttaPattern(metre_name, pada_patterns): 194 | """Given the four pāda-s of a viṣama-vṛtta, add the metre.""" 195 | assert len(pada_patterns) == 4 196 | pada_patterns = [_CleanUpPattern(p) for p in pada_patterns] 197 | for p in pada_patterns: assert re.match(r'^[LG.]*$', p) 198 | (pa, pb, pc, pd) = pada_patterns 199 | # assert pb.endswith('G') 200 | # assert pd.endswith('G') 201 | _AddPatternForMetre(metre_name, [pa, pb, pc, pd]) 202 | 203 | patterns_a = [pa] 204 | patterns_b = [pb[:-1] + 'G', pb[:-1] + 'L'] 205 | patterns_c = [pc] 206 | patterns_d = [pd[:-1] + 'G', pd[:-1] + 'L'] 207 | for (a, b, c, d) in itertools.product(patterns_a, patterns_b, patterns_c, patterns_d): _AddFullPattern(a + b + c + d, metre_name) 208 | for (a, b) in itertools.product(patterns_a, patterns_b): _AddHalfPattern(a + b, metre_name, {1}) 209 | for (c, d) in itertools.product(patterns_c, patterns_d): _AddHalfPattern(c + d, metre_name, {2}) 210 | for a in patterns_a: _AddPadaPattern(a, metre_name, {1}) 211 | for b in patterns_b: _AddPadaPattern(b, metre_name, {2}) 212 | for c in patterns_c: _AddPadaPattern(c, metre_name, {3}) 213 | for d in patterns_d: _AddPadaPattern(d, metre_name, {4}) 214 | 215 | 216 | def _AddFullRegex(full_verse_regex, metre_name): 217 | known_full_regexes.append((re.compile('^' + full_verse_regex + '$'), {metre_name : True})) 218 | 219 | 220 | def _AddHalfRegex(half_verse_regex, metre_name, which_halves): 221 | known_half_regexes.append((re.compile('^' + half_verse_regex + '$'), {metre_name: which_halves})) 222 | 223 | 224 | def _AddPadaRegex(pada_regex, metre_name, which_padas): 225 | known_pada_regexes.append((re.compile('^' + pada_regex + '$'), {metre_name: which_padas})) 226 | 227 | 228 | def _AddSamavrttaRegex(metre_name, pada_regex): 229 | """Add a sama-vṛtta's regex (full, half, pāda). No variants.""" 230 | pada_regex = _CleanUpSimpleRegex(pada_regex) 231 | _AddFullRegex(''.join('(%s)' % s for s in [pada_regex] * 4), metre_name) 232 | _AddHalfRegex(''.join('(%s)' % s for s in [pada_regex] * 2), metre_name, {1, 2}) 233 | _AddPadaRegex(pada_regex, metre_name, {1, 2, 3, 4}) 234 | 235 | 236 | def _AddMetreRegex(metre_name, pada_regexes, simple=True): 237 | """Given regexes for the four padas of a metre, add it.""" 238 | assert len(pada_regexes) == 4, (metre_name, pada_regexes) 239 | if simple: 240 | pada_regexes = [_CleanUpSimpleRegex(s) for s in pada_regexes] 241 | full_verse_regex = ''.join('(%s)' % s for s in pada_regexes) 242 | _AddFullRegex(full_verse_regex, metre_name) 243 | 244 | 245 | def _AddAnustup(): 246 | """Add Anuṣṭup to the list of regexes.""" 247 | metre_name = 'Anuṣṭup (Śloka)' 248 | regex_ac = '....LGG.' 249 | regex_bd = '....LGL.' 250 | half_regex = regex_ac + regex_bd 251 | 252 | _AddFullRegex(half_regex * 2, metre_name) 253 | _AddHalfRegex(half_regex, metre_name, {1, 2}) 254 | _AddPadaRegex(regex_ac, metre_name, {1, 3}) 255 | _AddPadaRegex(regex_bd, metre_name, {2, 4}) 256 | 257 | 258 | def _AddAnustupExamples(): 259 | """Examples of variation from standard Anuṣṭup.""" 260 | # "jayanti te sukṛtino..." 261 | _AddMetreRegex('Anuṣṭup (Śloka)', 262 | ['LGLGLLLG', '....LGL.', '....LGG.', '....LGL.']) 263 | # "sati pradīpe saty agnau..." Proof: K48.130 (p. 51) 264 | _AddMetreRegex('Anuṣṭup (Śloka)', 265 | ['LGLGGGGG', '....LGL.', '....LGG.', '....LGL.']) 266 | # "guruṇā stana-bhāreṇa [...] śanaiś-carābhyāṃ pādābhyāṃ" K48.132 (52) 267 | _AddMetreRegex('Anuṣṭup (Śloka)', 268 | ['....LGG.', '....LGL.', 'LGLGGGGG', '....LGL.']) 269 | # "tāvad evāmṛtamayī..." K48.125 (49) 270 | _AddMetreRegex('Anuṣṭup (Śloka)', 271 | ['GLGGLLLG', '....LGL.', '....LGG.', '....LGL.']) 272 | # Covers a lot of cases 273 | _AddMetreRegex('Anuṣṭup (Śloka)', 274 | ['........', '....LGL.', '....LGG.', '....LGL.']) 275 | _AddMetreRegex('Anuṣṭup (Śloka)', 276 | ['....LGG.', '....LGL.', '........', '....LGL.']) 277 | _AddMetreRegex('Anuṣṭup (Śloka)', 278 | ['........', '....LGL.', '........', '....LGL.']) 279 | 280 | 281 | def _MatraCount(pattern): 282 | assert re.match('^[LG]*$', pattern) 283 | return sum(2 if c == 'G' else 1 for c in pattern) 284 | 285 | 286 | def _PatternsOfLength(n): 287 | if n in _patterns_memo: 288 | return _patterns_memo[n] 289 | _patterns_memo[n] = [p + 'L' for p in _PatternsOfLength(n - 1)] 290 | _patterns_memo[n] += [p + 'G' for p in _PatternsOfLength(n - 2)] 291 | return _patterns_memo[n] 292 | _patterns_memo = {0: [''], 1: ['L']} 293 | 294 | 295 | def _LoosePatternsOfLength(n): 296 | if n in _loose_patterns_memo: 297 | return _loose_patterns_memo[n] 298 | _loose_patterns_memo[n] = (_PatternsOfLength(n) + 299 | [p for p in _PatternsOfLength(n - 1) 300 | if p.endswith('L')]) 301 | return _loose_patterns_memo[n] 302 | _loose_patterns_memo = {0: [''], 1: ['L']} 303 | 304 | 305 | def _AddAryaFamilyRegex(): 306 | """Add regexes for the Āryā family of metres.""" 307 | odd_ganas = ['GG', 'LLG', 'GLL', 'LLLL'] 308 | even_ganas = odd_ganas + ['LGL'] 309 | odd_gana_re = '(%s)' % '|'.join(odd_ganas) 310 | even_gana_re = '(%s)' % '|'.join(even_ganas) 311 | pada_12_re = odd_gana_re + even_gana_re + odd_gana_re 312 | pada_15_re = even_gana_re + odd_gana_re + 'L' + odd_gana_re + '(L|G)' 313 | pada_18_re = even_gana_re + odd_gana_re + '(LLLL|LGL)' + odd_gana_re + '(L|G)' 314 | pada_20_re = (even_gana_re + odd_gana_re + '(LLLL|LGL)' + odd_gana_re + 315 | '(%s)' % '|'.join(even_ganas + ['GL', 'LLL'])) 316 | _AddMetreRegex('Āryā', 317 | [pada_12_re, pada_18_re, pada_12_re, pada_15_re], simple=False) 318 | _AddMetreRegex('Gīti', 319 | [pada_12_re, pada_18_re, pada_12_re, pada_18_re], simple=False) 320 | _AddMetreRegex('Upagīti', 321 | [pada_12_re, pada_15_re, pada_12_re, pada_15_re], simple=False) 322 | _AddMetreRegex('Udgīti', 323 | [pada_12_re, pada_15_re, pada_12_re, pada_18_re], simple=False) 324 | _AddMetreRegex('Āryāgīti', 325 | [pada_12_re, pada_20_re, pada_12_re, pada_20_re], simple=False) 326 | _AddMetreRegex('Āryā (loose schema)', 327 | ['|'.join(_LoosePatternsOfLength(12)), 328 | '|'.join(_LoosePatternsOfLength(18)), 329 | '|'.join(_LoosePatternsOfLength(12)), 330 | '|'.join(_LoosePatternsOfLength(15))], 331 | simple=False) 332 | 333 | 334 | def _AddGiti(pada_patterns): 335 | """Add an example of Gīti, with proper morae checking.""" 336 | assert len(pada_patterns) == 4 337 | expected = [12, 18, 12, 18] 338 | for i in range(4): 339 | allow_loose_ending = False 340 | if i % 2 and pada_patterns[i].endswith('L'): 341 | allow_loose_ending = True 342 | expected[i] -= 1 343 | assert _MatraCount(pada_patterns[i]) == expected[i], (i, pada_patterns[i], _MatraCount(pada_patterns[i]), expected[i]) 344 | if allow_loose_ending: 345 | pada_patterns[i] = pada_patterns[i][:-1] + '.' 346 | # TODO(shreevatsa): Should we just add (up to) 4 patterns instead? 347 | _AddMetreRegex('Gīti', pada_patterns, simple=False) 348 | 349 | 350 | def InitializeData(): 351 | """Add all known metres to the data structures.""" 352 | _AddAnustup() 353 | _AddAnustupExamples() 354 | 355 | sources = sum((jsonToPy(filename) 356 | for filename in ['ganesh.json', 'curated.json', 'vrttaratnakara.json', 'mishra.json']), 357 | []) 358 | 359 | _AddAryaFamilyRegex() 360 | vrtta_data = sources 361 | 362 | assert not all_data 363 | for (name, description) in vrtta_data: 364 | samatva = None 365 | regex_or_pattern = None 366 | if isinstance(description, list): 367 | assert len(description) in [2, 4] 368 | samatva = 'ardhasama' if len(description) == 2 else 'viṣama' 369 | regex_or_pattern = 'pattern' 370 | else: 371 | samatva = 'sama' 372 | if re.match(r'^[LG]*$', _RemoveChars(description, ' —–')): 373 | regex_or_pattern = 'pattern' 374 | else: 375 | regex_or_pattern = 'regex' 376 | 377 | assert samatva in ['sama', 'ardhasama', 'viṣama'] 378 | assert regex_or_pattern in ['regex', 'pattern'] 379 | all_data[name] = (samatva, regex_or_pattern, description) 380 | 381 | if samatva == 'sama' and regex_or_pattern == 'regex': 382 | _AddSamavrttaRegex(name, description) 383 | elif samatva == 'sama' and regex_or_pattern == 'pattern': 384 | _AddSamavrttaPattern(name, description) 385 | elif samatva == 'ardhasama' and regex_or_pattern == 'pattern': 386 | _AddArdhasamavrttaPattern(name, description) 387 | elif samatva == 'viṣama' and regex_or_pattern == 'pattern': 388 | _AddVishamavrttaPattern(name, description) 389 | else: 390 | assert False, name 391 | 392 | 393 | def HtmlDescription(name): 394 | if name not in all_data: 395 | return '[No description currently for %s]' % name 396 | (samatva, regex_or_pattern, description) = all_data[name] 397 | if regex_or_pattern == 'regex': 398 | return '[%s is given by the regex %s]' % (name, description) 399 | assert regex_or_pattern == 'pattern' 400 | if samatva == 'sama': 401 | if name == 'Śālinī': 402 | return ('%s is a sama-vṛtta. It contains 4 pādas, each of which' + 403 | ' has the pattern %s.
As there are 44 syllables in a verse (11 per line), this metre belongs to the Triṣṭubh family.') % (name, description) 404 | return ('%s is a sama-vṛtta. It contains 4 pādas, each of which' + 405 | ' has the pattern %s.') % (name, description) 406 | elif samatva == 'ardhasama': 407 | assert isinstance(description, list) 408 | assert len(description) == 2 409 | return ('%s is an ardha-sama-vṛtta. It contains 4 pādas, in which' + 410 | ' the odd pādas have pattern:
' + 411 | '%s
' 412 | ' and the even pādas have pattern:
' + 413 | '%s') % (name, description[0], description[1]) 414 | else: 415 | assert samatva == 'viṣama' 416 | assert isinstance(description, list) 417 | assert len(description) == 4 418 | return ('%s is a viṣama-vṛtta. It contains 4 pādas, which have' + 419 | ' respectively the patterns:
' + 420 | '%s
' + 421 | '%s
' + 422 | '%s
' + 423 | '%s') % (name, description[0], description[1], 424 | description[2], description[3]) 425 | 426 | def FurtherHtmlDescription(name): 427 | videos = { 428 | 'Śālinī': 'k0c_1eVIWHI', 429 | 'pṛthvī': 'aWHxHvKmEIw', 430 | 'Puṣpitāgrā': '5TQUcuf2flw', 431 | 'Vasantatilakā': 'I8g4BGdza_M', 432 | } 433 | if name in videos: 434 | return ('

You can listen to some words about %s and its recitation below:

' % name + 435 | '' % videos[name]) 436 | return '' 437 | -------------------------------------------------------------------------------- /chandas/svat/data/vrttaratnakara.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": ["List of metres from Vrtta-ratnakara, input by Dr. Dhaval Patel.", 3 | " A partial (3/6 chapters) English translation of the Vṛtta-ratnākara is available: ", 4 | "https://books.google.com/books?id=TZNlAAAAcAAJ&pg=PA45 ", 5 | "https://books.google.com/books?id=TZNlAAAAcAAJ&pg=PA91 ", 6 | "https://books.google.com/books?id=TZNlAAAAcAAJ&pg=PA140 " 7 | ], 8 | "metres": [ 9 | ["śrī", "G"], 10 | ["strī", "GG"], 11 | ["nārī", "GGG"], 12 | ["mṛgī", "GLG"], 13 | ["kanyā", "GGGG"], 14 | ["paṅkti", "GLLGG"], 15 | ["tanumadhyā", "GGLLGG"], 16 | ["śaśivadanā", "LLLLGG"], 17 | ["vasumatī", "GGLLLG"], 18 | ["madhumatī", "LLLLLLG"], 19 | ["madalekhā", "GGGLLGG"], 20 | ["kumāralalitā", "LGLLLGG"], 21 | ["haṃsamālā", "LLGGLGG"], 22 | ["vidyunmālā", "GGGG — GGGG"], 23 | ["citrapadā", "GLLGLLGG"], 24 | ["māṇavaka", "GLLGGLLG"], 25 | ["haṃsaruta", "GGGLLLGG"], 26 | ["samānikā", "GLGLGLGL"], 27 | ["pramāṇikā", "LGLGLGLG"], 28 | ["campakamālā", "GLLGGGLLGG"], 29 | ["nārācaka", "GGLGLGLG"], 30 | ["halamukhī", "GLGLLLLLG"], 31 | ["bhujagaśiśubhṛtā", "LLLLLLG — GG"], 32 | ["śuddhavirāṭ", "GGGLLGLGLG"], 33 | ["paṇava", "GGGLL — LLGGG"], 34 | ["mayūrasāriṇī", "GLGLGLGLGG"], 35 | ["rukmavatī", "GLLGGGLLGG"], 36 | ["mattā", "GGGG — LLLLGG"], 37 | ["manoramā", "LLLGLGLGLG"], 38 | ["upasthitā", "GG — LLGLLGLG"], 39 | ["indravajrā", "GGLGGLLGLGG"], 40 | ["upendravajrā", "LGLGGLLGLGG"], 41 | ["sāndrapada", "GLLGGLLLLGG"], 42 | ["sumukhī", "LLLLG — LLGLLG"], 43 | ["dodhaka", "GLLGLLGLLGG"], 44 | ["śālinī", "GGGG — GLGGLGG"], 45 | ["vātormī", "GGGG — LLGGLGG"], 46 | ["bhramaravilasitaṃ", "GGGG — LLLLLLG"], 47 | ["śrī", "GLLGG — LLLLGG"], 48 | ["rathoddhatā", "GLGLLLGLGLG"], 49 | ["svāgatā", "GLGLLLGLLGG"], 50 | ["vṛntā", "LLLL — LLLLGGG"], 51 | ["bhadrikā", "LLLLLLGLGLG"], 52 | ["śyenikā", "GLGLGLGLGLG"], 53 | ["upasthita", "LGLLLGGGLGG"], 54 | ["śikhaṇḍita", "LGLLLGGGLGG"], 55 | ["mauktikamālā", "GLLGLLGGLLG"], 56 | ["candravartma", "GLGLLLGLLLLG"], 57 | ["vaṃśastha", "LGLGGLLGLGLG"], 58 | ["indravaṃśā", "GGLGGLLGLGLG"], 59 | ["toṭaka", "LLGLLGLLGLLG"], 60 | ["drutavilambita", "LLLGLLGLLGLG"], 61 | ["puṭa", "LLLLLLGGGLGG"], 62 | ["pramuditavadanā", "LLLLLLGLGGLG"], 63 | ["mauktidadāma", "LGLLGLLGLLGL"], 64 | ["kusumavicitrā", "LLLLGG — LLLLGG"], 65 | ["jaloddhatagati", "LGLLLGLGLLLG"], 66 | ["bhujaṅgaprayāta", "LGGLGGLGGLGG"], 67 | ["sragviṇī", "GLGGLGGLGGLG"], 68 | ["priyaṃvadā", "LLLGLLLGLGLG"], 69 | ["maṇimālā", "GGLLGGGGLLGG"], 70 | ["lalitā", "GGLGLLLGLGLG"], 71 | ["pramitākṣarā", "LLGLGLLLGLLG"], 72 | ["ujjvalā", "LLLLLLGLLGLG"], 73 | ["vaiśvadevī", "GGGGG — GLGGLGG"], 74 | ["jaladharamālā", "GGGG — LLLLGGGG"], 75 | ["navamālinī", "LLLL — GLGLLLGG"], 76 | ["prabhā", "LLLLLLGLGGLG"], 77 | ["mālatī", "LLLLGLLGLGLG"], 78 | ["pañcacāmara", "LGLGLGLGLGLG"], 79 | ["tāmarasa", "LLLLGLLGLLGG"], 80 | ["kṣamā", "LLLLLLGGLGGLG"], 81 | ["praharṣiṇī", "GGGLLLLGLGLGG"], 82 | ["rucirā", "LGLGLLLLGLGLG"], 83 | ["mattamayūra", "GGGG — GLLGGLLGG"], 84 | ["mañjubhāṣiṇī", "LLGLGLLLGLGLG"], 85 | ["nandinī", "LLGLGLLLGLLGG"], 86 | ["candrikā", "LLLL — LLGGLGLGG"], 87 | ["asambādhā", "GGGGG — LLLLLLGGG"], 88 | ["aparājitā", "LLLLLLG — LGLLGLG"], 89 | ["praharaṇakalikā", "LLLLLLG — LLLLLLG"], 90 | ["vasantatilakā", "GGLGLLLGLLGLGG"], 91 | ["induvadanā", "GLLLGLLLGLLLGG"], 92 | ["alolā", "GGGLLGG — GGGLLGG"], 93 | ["śaśikalā", "LLLLLLL — LLLLLLLG"], 94 | ["mālā", "LLLLLL — LLLLLLLLG"], 95 | ["maṇiguṇanikara", "LLLLLLLL — LLLLLLG"], 96 | ["malinī", "LLLLLLGG — GLGGLGG"], 97 | ["prabhadraka", "LLLLGLGLLLGLGLG"], 98 | ["elā", "LLGLG — LLLLLLLLGG"], 99 | ["candralekhā", "GGGGLGG — GGLGGLGG"], 100 | ["ṛṣabhagajavilasita", "GLLGLG — LLLLLLLLLG"], 101 | ["vāṇinī", "LLLLGLGLLLGLGLGG"], 102 | ["śikhariṇī", "LGGGGG — LLLLLGGLLLG"], 103 | ["pṛthvī", "LGLLLGLG — LLLGLGGLG"], 104 | ["vaṃśapatrapatitam", "GLLGLGLLLGLL — LLLLG"], 105 | ["hariṇī", "LLLLLG — GGGG — LGLLGLG"], 106 | ["mandākrāntā", "GGGG — LLLLLG — GLGGLGG"], 107 | ["narkuṭaka", "LLLLGLGLLLGLLGLLG"], 108 | ["kokilaka", "LLLLGLG — LLLGLL — GLLG"], 109 | ["kusumitalatāvellitā", "GGGGG — LLLLLG — GLGGLGG"], 110 | ["meghavisphurjita", "LGGGGG — LLLLLG — GLGGLGG"], 111 | ["śārdulavikrīḍita", "GGGLLGLGLLLG — GGLGGLG"], 112 | ["suvadanā", "GGGGLGG — LLLLLLG — GGLLLG"], 113 | ["vṛtta", "GLGLGLGLGLGLGLGLGLGL"], 114 | ["sragdharā", "GGGGLGG — LLLLLLG — GLGGLGG"], 115 | ["madraka", "GLLGLGLLLG — LGLLLGLGLLLG"], 116 | ["aśvalalita", "LLLLGLGLLLG — LGLLLGLGLLLG"], 117 | ["mattākrīḍa", "GGGGGGGG—LLLLL—LLLLLLLLLG"], 118 | ["tanvī", "GLLGG — LLLLLLG — GLLGLLLLLLGG"], 119 | ["krauñcapadā", "GLLGG — GLLGGLLL — LLLLLLL —LLLLG"], 120 | ["bhujaṅgavijṛmbhita", "GGGGGGGG — LLLLLLLLLLG —LGLLGLG"], 121 | ["apavāha", "GGGLLLLLL — LLLLLL — LLLLLL — LLGGG"], 122 | ["caṇḍavṛṣṭiprayātadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLG"], 123 | ["arṇadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLG"], 124 | ["arṇavadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 125 | ["vyāladaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 126 | ["jīmūtadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 127 | ["līlākaradaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 128 | ["uddāmadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 129 | ["śaṅkhadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 130 | ["samudradaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 131 | ["bhujaṅgadaṇḍaka", "LLLLLLGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLGGLG"], 132 | ["pracitakadaṇḍaka", "LLLLLLLGGLGGLGGLGGLGGLGGLGG"], 133 | ["upacitrā", ["LLGLLGLLGLG", "GLLGLLGLLGG"]], 134 | ["drutamadhyā", ["GLLGLLGLLGG", "LLLLGLLGLLGG"]], 135 | ["vegavatī", ["LLGLLGLLGLLGG", "GLLGLLGLLGG"]], 136 | ["bhadravirāṭ", ["GGLLGLGLGG", "GGGLLGLGLG"]], 137 | ["ketumatī", ["LLGLGLLLGG", "GLLGLGLLLGG"]], 138 | ["ākhyānikī", ["GGLGGLLGLGG", "LGLGGLLGLGG"]], 139 | ["viparītākhyānikī", ["LGLGGLLGLGG", "GGLGGLLGLGG"]], 140 | ["hariṇaplutā", ["LLGLLGLLGLG", "LLLGLLGLLGLG"]], 141 | ["aparavaktra", ["LLLLLLGLGLG", "LLLLGLLGLGLG"]], 142 | ["puṣpitāgrā", ["LLLLLLGLGLGG", "LLLLGLLGLGLGG"]], 143 | ["yavātparāmatīya", ["GLGLGLGLGLGL", "LGLGLGLGLGLG"]], 144 | ["padacaturūrdhva", ["........", 145 | "............", 146 | "................", 147 | "...................."]], 148 | ["āpīḍa", ["LLLLLLGG", 149 | "LLLLLLLLLLGG", 150 | "LLLLLLLLLLLLLLGG", 151 | "LLLLLLLLLLLLLLLLLLGG"]], 152 | ["kalikā", ["LLLLLLLLLLGG", 153 | "LLLLLLGG", 154 | "LLLLLLLLLLLLLGG", 155 | "LLLLLLLLLLLLLLLLLLGG"]], 156 | 157 | ["lavalī", ["LLLLLLLLLLGG", 158 | "LLLLLLLLLLLLLLGG", 159 | "LLLLLLGG", 160 | "LLLLLLLLLLLLLLLLLLGG"]], 161 | ["amṛtadhārā", ["LLLLLLLLLLGG", 162 | "LLLLLLLLLLLLLLGG", 163 | "LLLLLLLLLLLLLLLLLLGG", 164 | "LLLLLLGG"]], 165 | ["udgatā", ["LLGLGLLLGL", 166 | "LLLLLGLGLG", 167 | "GLLLLLLGLLG", 168 | "LLGLGLLLGLGLG"]], 169 | 170 | ["saurabhaka", ["LLGLGLLLGL", 171 | "LLLLLGLGLG", 172 | "GLGLLLGLLG", 173 | "LLGLGLLLGLGLG"]], 174 | ["lalita", ["LLGLGLLLGL", 175 | "LLLLLGLGLG", 176 | "LLLLLLLLGLLG", 177 | "LLGLGLLLGLGLG"]], 178 | ["upasthitapracupita", ["GGGLLGLGLGLLGG", 179 | "LLGLLLLGLGLGG", 180 | "LLLLLLLLG", 181 | "LLLLLLLLLLGLLGG"]], 182 | 183 | ["vardhamāna", ["GGGLLGLGLGLLGG", 184 | "LLGLLLLGLGLGG", 185 | "LLLLLGLLL", 186 | "LLLLLLLLLLGLLGG"]], 187 | ["śuddhavirāḍārṣabha", ["GGGLLGLGLGLLGG", 188 | "LLGLLLLGLGLGG", 189 | "GGLLGLGLG", 190 | "LLLLLLLLLLGLLGG"]] 191 | ] 192 | } 193 | -------------------------------------------------------------------------------- /chandas/svat/identify/README.org: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8; -*- 2 | 3 | * The problem 4 | 5 | If we had a 1-1 mapping from vṛtta names to patterns, and if input always perfectly matched one of them, the problem is very simple indeed. 6 | We merely have to take the exact pattern from the input, look it up in a definitive table that maps patterns to metre names, and return the metre. 7 | 8 | In practice, our problem is *not* that simple. 9 | 10 | We have to deal with: 11 | - data in which the same name may be given to multiple metres, or the same pattern can have multiple names (so much so that nothing is definitive, we can only say "source X calls this Y") 12 | - allowed variation (pādānta-laghu, etc.) 13 | - input that is frequently off (typos, etc.) 14 | - incorrect line breaks in input 15 | - mātrā metres 16 | 17 | * Overview of our approach 18 | 19 | Given a list of "pattern lines", like 20 | 21 | #+BEGIN_EXAMPLE 22 | ['GGGLGLG', 23 | 'GLGGGGGLGLGGLGL', 24 | 'GGGGGLGG', 25 | 'LGGGGGGLLGGLGL'] 26 | #+END_EXAMPLE 27 | 28 | we can divide it into several "parts": 29 | 30 | - the whole verse 31 | - halves of the verse, by number of syllables 32 | - quarters of the verse, by number of syllables 33 | - halves of the verse, by lines 34 | - quarters of the verse, by lines 35 | - individual lines in the verse 36 | 37 | (These can overlap.) 38 | 39 | We try matching each part against our "database" of known (corresponding or other) parts of metres. 40 | 41 | * Data 42 | 43 | The data contains *patterns* and *regexes*. 44 | 45 | A "pattern" is a sequence over the alphabet {L, G}. 46 | A "regex" is any regular expression for matching patterns. 47 | 48 | Pattern data: 49 | Dict of 50 | pattern -> List of (metre_info, part_type) 51 | 52 | Regex data: 53 | List of 54 | regex -> List of (metre_info, part_type) 55 | 56 | A metre_info is a tuple (metre_name, provenance (source where that name comes from), [list of deviations]). 57 | 58 | Pattern data can be looked up by pattern, regex data needs to be iterated over. 59 | 60 | ** Part types 61 | 62 | A part_type can be any of: 63 | - Whole verse 64 | - Half-{1,2,[1,2]}-by-{syllables,lines} 65 | - Quarter-{some subset of {1,2,3,4}}-by-{syllables,lines} 66 | 67 | In other words, we can characterize a part_type by a triple (X, Y, Z) where 68 | X <- {whole, half, quarter} (Say 0, 1, 2 respectively.) 69 | Y is a subset of [1..2^X] 70 | Z <- {syllables, lines} 71 | 72 | * Matching 73 | 74 | We take the input and break it into all possible parts (A, B, C, P) where 75 | A <- {whole, half, quarter} 76 | B <- [1..2^X] (it is the index) 77 | C <- {syllables, lines} 78 | P is the actual pattern corresponding to (A, B, C) 79 | 80 | We then compare this (A, B, C, P) against each possible datum ((pattern/regex) -> (X, Y, Z)). 81 | 82 | A "match" is when P matches the (pattern/regex). 83 | An "anuloma match" is when A = X, C = Z, and B <- Y. 84 | A "pratiloma match" is when not all of these hold. 85 | 86 | ** Optimization and optimality 87 | 88 | It is more efficient to look for "anuloma matches" first. 89 | 90 | TODO: Among pratiloma matches, it would be good to find out which ones are more common (in a given input corpus I guess). 91 | 92 | ** How many verses is the input? 93 | 94 | Based on A v/s X, we can have several categories out of the 3x3 possibilities for (A, X). 95 | -> Assuming input is whole verse (X/A = 1): 96 | A = whole, X = whole 97 | A = half, X = half 98 | A = quarter, X = quarter 99 | -> Assuming input is half a verse (X/A = 1/2): 100 | A = whole, X = half 101 | A = half, X = X = quarter 102 | -> Assuming input is a quarter verse (X/A = 1/4): 103 | A = whole, X = quarter 104 | -> Assuming input is two verses (X/A = 2): 105 | A = half, X = whole 106 | A = quarter, X = half 107 | -> Assuming input is four verses (X/A = 4): 108 | A = quarter, X = whole 109 | (All 9 possibilities have been covered.) 110 | 111 | This can be an option: treat input as {quarter, half, whole, 2, 4} of a verse. 112 | 113 | ** Scoring 114 | 115 | Fix a metre_name. We want to give a closeness score for that metre. 116 | 117 | A perfect score would be if A = X = whole, C = Z, B <- Y 118 | 119 | Else, for each X/A category, and for each C (syllables/lines), 120 | 121 | whole > 2 half > 1 half > 4 quarters > 3 quarters > 2 quarters > 1 quarter. 122 | 123 | But what about B being not in Y, e.g. first half matches second half, or second quarter matches third? 124 | 125 | Ad-hoc: 126 | B being in Y has score 1.0. 127 | B not in Y has score 0.9. 128 | 129 | * Result 130 | 131 | For each X/A category, 132 | the results are (score, metre_name, match_description) tuples, ordered by score. 133 | 134 | * Generating data 135 | -------------------------------------------------------------------------------- /chandas/svat/identify/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/chandas/svat/identify/__init__.py -------------------------------------------------------------------------------- /chandas/svat/identify/identifier.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Module to identify metre(s) from scanned verse. 3 | 4 | The input is a list of "pattern" lines, where a "pattern" is a sequence over the 5 | alphabet {'L', 'G'}. The output is a list of metre names (strings). 6 | """ 7 | 8 | from __future__ import absolute_import, division, print_function, unicode_literals 9 | 10 | import collections 11 | import logging 12 | import re 13 | 14 | class OrderedSet(collections.OrderedDict): 15 | def add(self, x): 16 | self[x] = None 17 | 18 | 19 | class Identifier(object): 20 | """An object used to make a single metre-identification call.""" 21 | 22 | def __init__(self, metrical_data): 23 | self._Reset() 24 | self.metrical_data = metrical_data 25 | logging.info('Identifier is initialized. It knows %d full regexes, %d full patterns, %d half regexes, %d half patterns, %d pada regexes, %d pada patterns', 26 | len(self.metrical_data.known_full_regexes), len(self.metrical_data.known_full_patterns), 27 | len(self.metrical_data.known_half_regexes), len(self.metrical_data.known_half_patterns), 28 | len(self.metrical_data.known_pada_regexes), len(self.metrical_data.known_pada_patterns)) 29 | 30 | def _Reset(self): 31 | """Clear all parameters, for use again.""" 32 | self.global_debug = [] 33 | self.parts_debug = [] 34 | 35 | def IdentifyFromPatternLines(self, pattern_lines, input_type='full'): 36 | self._Reset() 37 | # Too many lines => probably multiple verses. 38 | if len(pattern_lines) > 12: 39 | self.global_debug.append('Error: too many lines in verse. Perhaps these are multiple verses?') 40 | return {} 41 | 42 | ret = {} # { 'exact': {..}, 'partial': {...}, 'accidental': {..} } 43 | 44 | for (part_type, part_patterns) in _Parts(pattern_lines): 45 | for pattern in part_patterns: 46 | self.parts_debug.append(' %s pattern %s (%d syllables, %d mātras)' % (part_type, pattern, len(pattern), _MatraCount(pattern))) 47 | last_debug_line_length = len(self.parts_debug[-1]) 48 | matches_for_part = self._MatchesFor(pattern, input_type, part_type, last_debug_line_length) 49 | # Loop over full, half, pada 50 | for (metre_name, value) in matches_for_part.get('full', {}).items(): 51 | assert value == True 52 | match_type = _MatchTypeFull(input_type, part_type) 53 | self.parts_debug.append(' %s %s match for: %s %s' % (' ' * last_debug_line_length, match_type, metre_name, value)) 54 | ret.setdefault(match_type, OrderedSet()).add(metre_name) 55 | for (metre_name, value) in matches_for_part.get('half', {}).items(): 56 | match_type = _MatchTypeHalf(input_type, part_type, value) 57 | self.parts_debug.append(' %s %s match for: %s %s' % (' ' * last_debug_line_length, match_type, metre_name, value)) 58 | ret.setdefault(match_type, OrderedSet()).add(metre_name) 59 | for (metre_name, value) in matches_for_part.get('pada', {}).items(): 60 | match_type = _MatchTypePada(input_type, part_type, value) 61 | self.parts_debug.append(' %s %s match for: %s %s' % (' ' * last_debug_line_length, match_type, metre_name, value)) 62 | ret.setdefault(match_type, OrderedSet()).add(metre_name) 63 | # Done looping over all part types. 64 | return ret 65 | 66 | def _MatchesFor(self, pattern, input_type, part_type, debug_indentation_depth): 67 | ret = { 68 | 'full': _MatchesIn(pattern, self.metrical_data.known_full_patterns, self.metrical_data.known_full_regexes), 69 | 'half': _MatchesIn(pattern, self.metrical_data.known_half_patterns, self.metrical_data.known_half_regexes), 70 | 'pada': _MatchesIn(pattern, self.metrical_data.known_pada_patterns, self.metrical_data.known_pada_regexes) 71 | } 72 | assert type(ret.get('full', {})) == dict 73 | assert type(ret.get('half', {})) == dict 74 | assert type(ret.get('pada', {})) == dict 75 | return ret 76 | 77 | 78 | def _MatchesIn(pattern, known_patterns, known_regexes): 79 | if pattern in known_patterns: 80 | assert type(known_patterns[pattern]) == dict 81 | return known_patterns[pattern] 82 | for (regex, matches) in known_regexes: 83 | if regex.match(pattern): 84 | assert type(matches) == dict 85 | return matches 86 | return {} 87 | 88 | 89 | def _MatchTypeFull(input_type, part_type): 90 | if input_type == 'full' and part_type == 'full': 91 | return 'exact' 92 | else: 93 | return 'accidental' 94 | 95 | 96 | def _MatchTypeHalf(input_type, part_type, value): 97 | if (input_type == 'full' and (part_type == 'half_1' and 1 in value or 98 | part_type == 'half_2' and 2 in value) or 99 | input_type == 'half' and part_type == 'full'): 100 | return 'partial' 101 | else: 102 | return 'accidental' 103 | 104 | 105 | def _MatchTypePada(input_type, part_type, value): 106 | if (input_type == 'full' and (part_type == 'pada_1' and 1 in value or 107 | part_type == 'pada_2' and 2 in value or 108 | part_type == 'pada_3' and 3 in value or 109 | part_type == 'pada_4' and 4 in value) or 110 | (input_type == 'half' and (part_type == 'half_1' and (1 in value or 3 in value) or 111 | part_type == 'half_2' and (2 in value or 4 in value))) or 112 | input_type == 'pada' and part_type == 'full'): 113 | return 'partial' 114 | else: 115 | return 'accidental' 116 | 117 | 118 | def _SplitHalves(full_pattern): 119 | """Attempt splits at halves.""" 120 | splits = [] 121 | n = len(full_pattern) 122 | if n % 2 == 0: 123 | m = n // 2 124 | splits.append([full_pattern[:m], full_pattern[m:]]) 125 | else: 126 | for m in [(n-1)//2, (n+1)//2]: 127 | splits.append([full_pattern[:m], full_pattern[m:]]) 128 | return splits 129 | 130 | 131 | def _SplitQuarters(full_pattern): 132 | """Attempt splits at quarters.""" 133 | def Cumulative(ns): 134 | """Prefix sums. Example: [5, 4, 3] -> [5, 9, 12].""" 135 | # return [sum(ns[:i+1]) for i in range(len(ns))] 136 | s = 0 137 | out = [] 138 | for n in ns: 139 | s += n 140 | out.append(s) 141 | return out 142 | 143 | splits = [] 144 | mss = [] 145 | n = len(full_pattern) 146 | if n % 4 == 0: 147 | m = n // 4 148 | mss.append(Cumulative([m, m, m])) 149 | elif n % 4 == 1: 150 | # The extra syllable could be in any of the four _pāda_s 151 | m = (n - 1) // 4 152 | mss.append(Cumulative([m + 1, m, m])) 153 | mss.append(Cumulative([m, m + 1, m])) 154 | mss.append(Cumulative([m, m, m + 1])) 155 | mss.append(Cumulative([m, m, m])) 156 | elif n % 4 == 2: 157 | # Either we have two extra syllables... 158 | m = (n - 2) // 4 159 | mss.append(Cumulative([m + 1, m + 1, m])) 160 | mss.append(Cumulative([m + 1, m, m + 1])) 161 | mss.append(Cumulative([m + 1, m, m])) 162 | mss.append(Cumulative([m, m + 1, m + 1])) 163 | mss.append(Cumulative([m, m + 1, m])) 164 | mss.append(Cumulative([m, m, m + 1])) 165 | # ... or we're missing two 166 | m = (n + 2) // 4 167 | mss.append(Cumulative([m - 1, m - 1, m])) 168 | mss.append(Cumulative([m - 1, m, m - 1])) 169 | mss.append(Cumulative([m - 1, m, m])) 170 | mss.append(Cumulative([m, m - 1, m - 1])) 171 | mss.append(Cumulative([m, m - 1, m])) 172 | mss.append(Cumulative([m, m, m - 1])) 173 | else: 174 | assert n % 4 == 3 175 | m = (n + 1) // 4 176 | # The missing syllable could be in any of the four _pāda_s 177 | mss.append(Cumulative([m - 1, m, m])) 178 | mss.append(Cumulative([m, m - 1, m])) 179 | mss.append(Cumulative([m, m, m - 1])) 180 | mss.append(Cumulative([m, m, m])) 181 | for ms in mss: 182 | splits.append([full_pattern[:ms[0]], 183 | full_pattern[ms[0]:ms[1]], 184 | full_pattern[ms[1]:ms[2]], 185 | full_pattern[ms[2]:]]) 186 | return splits 187 | 188 | 189 | def _IsPattern(pattern): 190 | return re.match('^[LG]+$', pattern) 191 | 192 | 193 | # TODO(shreevatsa): Distinguish between exact (unique) and approximate halves/padas. 194 | def _Parts(pattern_lines): 195 | """ { 196 | 'full': [...], 197 | 'half_1': [...], 198 | 'half_2': [...], 199 | 'pada_1': [...], 200 | 'pada_2': [...], 201 | 'pada_3': [...], 202 | 'pada_4': [...], 203 | 'lines': [...] (can overlap with pada_n / half_n) 204 | }.items() (ordered) 205 | """ 206 | pattern_lines = [line for line in pattern_lines if _IsPattern(line)] 207 | full_pattern = ''.join(pattern_lines) 208 | ret = {} 209 | def add(x, e): ret.setdefault(x, set()).add(e) 210 | ret['full'] = [full_pattern] 211 | for (ab, cd) in _SplitHalves(full_pattern): 212 | add('half_1', ab) 213 | add('half_2', cd) 214 | for (a, b, c, d) in _SplitQuarters(full_pattern): 215 | add('pada_1', a) 216 | add('pada_2', b) 217 | add('pada_3', c) 218 | add('pada_4', d) 219 | # Add groups of lines to 'half_*' and 'pada_*' 220 | n = len(pattern_lines) 221 | if n % 2 == 0: 222 | half_1 = ''.join(pattern_lines[ : n//2]) 223 | add('half_1', half_1) 224 | for (a, b) in _SplitHalves(half_1): 225 | add('pada_1', a) 226 | add('pada_2', b) 227 | half_2 = ''.join(pattern_lines[n//2 : ]) 228 | add('half_2', half_2) 229 | for (c, d) in _SplitHalves(half_2): 230 | add('pada_3', c) 231 | add('pada_4', d) 232 | if n % 4 == 0: 233 | add('pada_1', ''.join(pattern_lines[: n//4])) 234 | add('pada_2', ''.join(pattern_lines[n//4 : n//2])) 235 | add('pada_3', ''.join(pattern_lines[n//2 : 3*n//4])) 236 | add('pada_4', ''.join(pattern_lines[3*n//4 : ])) 237 | if n not in [1, 2, 4]: 238 | # When n is 1, 2, or 4, each line already accounted for as full/half/pada. 239 | ret['lines'] = pattern_lines 240 | return [ 241 | ('full', ret.get('full', set())), 242 | ('half_1', ret.get('half_1', set())), 243 | ('half_2', ret.get('half_2', set())), 244 | ('pada_1', ret.get('pada_1', set())), 245 | ('pada_2', ret.get('pada_2', set())), 246 | ('pada_3', ret.get('pada_3', set())), 247 | ('pada_3', ret.get('pada_4', set())), 248 | ('lines', ret.get('lines', set())) 249 | ] 250 | 251 | def _MatraCount(pattern): 252 | return sum(2 if c == 'G' else 1 for c in pattern) 253 | -------------------------------------------------------------------------------- /chandas/svat/read/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/chandas/svat/read/__init__.py -------------------------------------------------------------------------------- /chandas/svat/read/filters.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """Cleanup transformations: simple functions which take text and return text.""" 4 | 5 | from __future__ import absolute_import, division, print_function, unicode_literals 6 | try: unicode 7 | except NameError: unicode = str 8 | 9 | from collections import Counter 10 | from functools import wraps 11 | import logging 12 | import re 13 | import unicodedata 14 | 15 | def _match(regex, text): 16 | return re.match('^' + regex + '$', text) 17 | 18 | 19 | def process_crlf(text): 20 | """Removes occurences of the chr(13) character.""" 21 | text = text.replace('\r\n', '\n') 22 | text = text.replace('\r', '\n') 23 | assert '\r' not in text 24 | return text 25 | 26 | 27 | def process_html_line_breaks(text): 28 | """Turns
and
into line breaks.""" 29 | # Not using flags=re.IGNORECASE:

rare, so prefer being conservative. 30 | text = text.replace('
\n', '\n') 31 | text = text.replace('
\n', '\n') 32 | text = text.replace('
', '\n') 33 | text = text.replace('
', '\n') 34 | return text 35 | 36 | 37 | def process_html_spaces(text): 38 | """Replaces each   with a space.""" 39 | return text.replace(' ', ' ') 40 | 41 | 42 | def process_html(text): 43 | """Runs two filters.""" 44 | text = process_html_spaces(text) 45 | text = process_html_line_breaks(text) 46 | return text 47 | 48 | 49 | def remove_verse_numbers(text): 50 | """Strips everything after ॥, ।।, // or || in each line.""" 51 | # return re.subn(r'[/|]{2}[ \d.a-zA-z}_*\-]*[/|]{2}$', '', line) 52 | lines = [] 53 | for line in text.split('\n'): 54 | for marker in ['॥', '।।', '//', '||']: 55 | # If verse number was removed, can separate from next verse by blank line. 56 | (line, count) = re.subn(re.escape(marker) + '.*', '\n', line) 57 | # Don't expect text to have more than one verse-end marker. Break at first. 58 | if count: 59 | break 60 | lines.append(line) 61 | return '\n'.join(lines) 62 | 63 | 64 | def debug_rejected_characters(orig_line, rejects): 65 | """Debug output about rejected characters, with their unicode codepoints and names.""" 66 | def _unicode_notation(char): 67 | """The U+92ef etc. notation for a character.""" 68 | assert isinstance(char, unicode) 69 | return '[U+%04x]' % ord(char) 70 | assert isinstance(orig_line, unicode) 71 | if not rejects: 72 | return 73 | line_read_as = ''.join(_unicode_notation(c) if c in rejects else c for c in orig_line) 74 | rejects = [(c, _unicode_notation(c), unicodedata.name(c, 'Unknown')) for c in rejects] 75 | rejects = ', '.join('%s (%s %s)' % reject for reject in rejects) 76 | logging.debug('Unknown characters are ignored: %s\nin line:\n%s', rejects, line_read_as) 77 | 78 | 79 | def normalize_nfkc(text): 80 | """Normalize text to NFKC.""" 81 | nfkc = unicodedata.normalize('NFKC', text) 82 | if text != nfkc: 83 | logging.debug('%s normalized to %s', text, nfkc) 84 | if nfkc != unicodedata.normalize('NFC', text): 85 | logging.warning('NFC and NFKC normalizations differ for %s', text) 86 | return nfkc 87 | 88 | 89 | def remove_control_characters(text): 90 | """Remove non-printable (control) characters in text, and warn.""" 91 | text = text.replace('\t', ' ') # a tab is a control character too 92 | control = Counter(c for c in text if unicodedata.category(c).startswith('C') and c != '\n') 93 | without_control = ''.join(c for c in text if c not in control) 94 | if text != without_control: 95 | logging.info('Removed control characters: %s', control) 96 | return without_control 97 | 98 | 99 | def split_further_at_verse_numbers(verses): 100 | """Detect verses containing verse-end markers in them, and split them further.""" 101 | new_verses = [] 102 | for verse in verses: 103 | current_verse_lines = [] 104 | lines = verse.split('\n') 105 | for line in lines: 106 | current_verse_lines.append(line) 107 | if len(current_verse_lines) >= 2 and remove_verse_numbers(line) != line: 108 | new_verses.append('\n'.join(current_verse_lines)) 109 | current_verse_lines = [] 110 | if current_verse_lines: 111 | new_verses.append('\n'.join(current_verse_lines)) 112 | return new_verses 113 | 114 | 115 | # Gretil-specific filters below this line 116 | def after_second_comment_line(text): 117 | """Assuming text starts after second
line.""" 118 | split = '
\n' 119 | parts = text.split(split) 120 | if len(parts) == 3: 121 | return parts[2] 122 | logging.debug('Splitting at comment line gave %d parts.', len(parts)) 123 | return text 124 | 125 | 126 | def is_parenthesized_line(text): 127 | return bool(_match(r'^[(].*[)] ?
$', text)) 128 | 129 | 130 | def is_empty(text): 131 | return (_match(r'^[ \t]*$', text) or text in ['
', '***
', '
'] or 132 | _match(r'^[_]{50,}
', text)) 133 | 134 | 135 | def _print_rejection(reason, if_different=False): 136 | """When one of our rejection functions below return True, print it.""" 137 | def decorated(func): 138 | """Returns what the function will actually be after this decorator.""" 139 | @wraps(func) 140 | def real(text, *args, **kwargs): 141 | """What the function will be, etc.""" 142 | ret = func(text, *args, **kwargs) 143 | must_print = False 144 | if if_different: 145 | must_print = text != ret 146 | else: 147 | must_print = bool(ret) 148 | if must_print: 149 | print(('\nRejecting/changing verse (%s): {{{\n%s\n}}}\n' % (reason, text)).encode('utf-8')) 150 | return ret 151 | return real 152 | return decorated 153 | 154 | # @_print_rejection(reason='starts with BR') 155 | # def starts_with_br(text): 156 | # return text.startswith('
') 157 | 158 | 159 | def is_header_line(text): 160 | return text in ['Main Text
', 'ADDITIONAL VERSES (KṢEPAKA)
'] 161 | 162 | 163 | def is_footnote_line(text): 164 | return bool(_match(r'^\\footnote{.*
$', text)) 165 | 166 | 167 | def is_asterisked_variant_line(text): 168 | if _match(r'^[*].*
\n.*
$', text) or text == 'c: (^d guru^ C)
': 169 | return True 170 | 171 | 172 | @_print_rejection('iti samAptam') 173 | def is_work_footer_line(text): 174 | return bool(_match(r'^[ \t]*(\|\| )?iti .* (samāptam|saṃpūrṇam|samāptaḥ).*
$', text) 175 | or text == 'śrīrāmodantaṃ samāptam |
' or text == 'iti śubhaṃ bhūyāt |
') 176 | 177 | 178 | def is_section_header_line(text): 179 | return bool(_match(r'^\[[^ ]*\]
', text)) 180 | 181 | 182 | def remove_leading_section_header_line(verse): 183 | """A header at the top of a section.""" 184 | lines = verse.split('\n') 185 | if _match(r'^( ){5}atha ', lines[0]) and remove_verse_numbers(lines[0]) != lines[0]: 186 | lines = lines[1:] 187 | if (lines[0] in ['nīti-śatakam
', 'vairāgya-śatakam
', 'śṛṅgāra-śatakam
'] 188 | and lines[1] == 'bhartṛhareḥ
'): 189 | lines = lines[2:] 190 | return '\n'.join(lines) 191 | 192 | 193 | def is_html_footer_line(text): 194 | return text == '' 195 | 196 | 197 | @_print_rejection(reason='edition info') 198 | def is_edition_info(text): 199 | return text.startswith('This edition is based on') and text == remove_verse_numbers(text) 200 | 201 | 202 | @_print_rejection(reason='parentheses info') 203 | def is_parentheses_info(text): 204 | return (text.startswith('The parentheses in between verses contain') and 205 | text == remove_verse_numbers(text)) 206 | 207 | 208 | def is_footnote_followed_by_variant_line(text): 209 | lines = text.splitlines() 210 | return (len(lines) == 2 and is_footnote_line(lines[0]) and 211 | (is_parenthesized_line(lines[1]) or 212 | lines[1] == 'nāryo mugdhaśaṭhā haranti ramaṇaṃ tiṣṭhanti no vāritās
')) 213 | 214 | 215 | def clean_leading_br(text): 216 | lines = text.split('\n') 217 | if len(lines) == 5 and lines[0] == '...
': 218 | return '\n'.join(lines[1:]) 219 | else: 220 | return text 221 | 222 | 223 | def remove_trailing_br_from_line(line): 224 | if line.endswith('
'): 225 | line = line[:-len('
')] 226 | return line 227 | 228 | def clean_trailing_br(text): 229 | lines = text.split('\n') 230 | lines = '\n'.join(remove_trailing_br_from_line(line) for line in lines) 231 | return lines 232 | 233 | 234 | def clean_leading_parenthesized_line(text): 235 | lines = text.split('\n') 236 | if len(lines) == 5 and is_parenthesized_line(lines[0]): 237 | return '\n'.join(lines[1:]) 238 | else: 239 | return text 240 | 241 | 242 | def remove_trailing_parenthesized_line(verse): 243 | lines = verse.split('\n') 244 | if is_parenthesized_line(lines[-1]): 245 | lines = lines[:-1] 246 | return '\n'.join(lines) 247 | 248 | 249 | def clean_leading_footnote(text): 250 | lines = text.split('\n') 251 | if len(lines) == 5 and is_footnote_line(lines[0]): 252 | return '\n'.join(lines[1:]) 253 | else: 254 | return text 255 | 256 | 257 | def is_verses_found_elsewhere_line(text): 258 | return bool(_match(r'Verses found in .* not found here
$', text)) 259 | 260 | 261 | def _is_abbreviation_line(line): 262 | """Lines like these: 263 | su. = subhāṣitaratnakoṣa,
264 | sad. = saduktikarṇāmṛta,
265 | subh. = subhāṣitāvalī,
266 | sū. = sūktimuktāvalī,
267 | pad. = padyāvalī,
268 | śā. = śārṅgadharapaddhati
269 | """ 270 | return _match(r'[^ \n]*\. = [^ \n]*(, )?
$', line) 271 | 272 | 273 | def is_abbreviation_block(text): 274 | lines = text.split('\n') 275 | return all(_is_abbreviation_line(line) for line in lines) 276 | 277 | 278 | def split_verses_at_br(text): 279 | """Assume that
by itself on a line is what separates verses.""" 280 | lines = text.split('\n') 281 | verses = [] 282 | current_verse_lines = [] 283 | for line in lines: 284 | if line == '
': 285 | if current_verse_lines: 286 | verses.append('\n'.join(current_verse_lines)) 287 | current_verse_lines = [] 288 | else: 289 | current_verse_lines.append(line) 290 | if current_verse_lines: 291 | verses.append('\n'.join(current_verse_lines)) 292 | return verses 293 | 294 | 295 | def is_text_abbreviation_header(verse): 296 | return verse in ['Text
\nAbbreviations
', 'Text
\nābbreviations
'] 297 | 298 | 299 | def is_trailing_work_name_junk(verse): 300 | return verse == '''amaruśatakam}
301 | āmaruśatakam
302 | amarukaviracitam}
303 | āmarukaviracitam}}
''' 304 | 305 | 306 | @_print_rejection('variant line', if_different=True) 307 | def remove_trailing_variant_line(verse): 308 | """If 2-line verse has a '*VAR' line appended, trim it.""" 309 | lines = verse.split('\n') 310 | if len(lines) == 3 and re.match(r'^\*VAR.:?[ ]*(\{|[0-9]{1,2}b)', lines[2]): 311 | return '\n'.join(lines[:2]) 312 | return verse 313 | 314 | 315 | def is_work_header_line(verse): 316 | return (verse in ['śrīrāmodantam |
', 'Bhallaṭaśataka
'] or 317 | _match('^Bhatṛhari: Śatakatraya.*
$', verse)) 318 | -------------------------------------------------------------------------------- /chandas/svat/read/read.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """Takes the input verse and produces verse lines in SLP1 transliteration.""" 4 | 5 | from __future__ import absolute_import, division, print_function, unicode_literals 6 | 7 | import logging 8 | 9 | from chandas.svat import read 10 | from indic_transliteration import sanscript 11 | 12 | 13 | def _preprocess_for_transliteration(text): 14 | """Clean up text before transliterating.""" 15 | text = read.filters.process_crlf(text) 16 | text = read.filters.normalize_nfkc(text) 17 | text = read.filters.remove_control_characters(text) 18 | text = read.filters.process_html(text) 19 | # TODO(shreevatsa): Replace with a placeholder instead of removing entirely. 20 | text = read.filters.remove_verse_numbers(text) 21 | text = text.strip('\n') 22 | return text 23 | 24 | 25 | def _transliterate_into_lines(orig_text): 26 | """Transliterates text to SLP1, removing all other characters.""" 27 | pass_through = ' -?' 28 | cleaned_lines = [] 29 | display_lines = [] 30 | for orig_line in orig_text.splitlines(): 31 | leading_verse_id = None 32 | match = read.split_gretil.MSS_LINE_INITIAL_REGEX.match(orig_line) 33 | if match: 34 | leading_verse_id = match.group(0) 35 | orig_line = orig_line[len(leading_verse_id):] 36 | (display_line, rejects) = sanscript.transliterate(orig_line, _to=sanscript.SLP1) 37 | 38 | ignore = r"""0123456789'".\/$&%{}|!’‘(),""" + 'ऽ।॥०१२३४५६७८९' 39 | read.filters.debug_rejected_characters(orig_line, rejects - set(ignore)) 40 | cleaned_line = ''.join(c for c in display_line if c not in pass_through) 41 | # assert all(c in slp1.ALPHABET for c in cleaned_line), cleaned_line 42 | cleaned_lines.append(cleaned_line) 43 | display_lines.append(display_line) 44 | # while cleaned_lines and not cleaned_lines[-1]: 45 | # cleaned_lines = cleaned_lines[:-1] 46 | # display_lines = display_lines[:-1] 47 | return (cleaned_lines, display_lines) 48 | 49 | 50 | def read_text(text): 51 | """The transliterated text from arbitrary input.""" 52 | text = _preprocess_for_transliteration(text) 53 | (cleaned_lines, display_lines) = _transliterate_into_lines(text) 54 | 55 | debug_output = ['Input read as:'] 56 | for (number, display_line) in enumerate(display_lines): 57 | transliterated = sanscript.transliterate(display_line) 58 | debug_output.append('Line %d: %s' % (number + 1, transliterated)) 59 | debug_output.append('') 60 | logging.debug('\n'.join(debug_output)) 61 | 62 | return (cleaned_lines, display_lines) 63 | -------------------------------------------------------------------------------- /chandas/svat/read/split_gretil.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """Split a GRETIL htm file into separate verses.""" 4 | 5 | from __future__ import absolute_import, division, print_function, unicode_literals 6 | 7 | import re 8 | 9 | # from print_utils import Print 10 | import read.filters 11 | 12 | MSS_LINE_INITIAL_REGEX = re.compile(r'^MSS_([0-9ABCD\-]+)-[1-5]') 13 | 14 | def mss_splitter(text): 15 | """Split by matching MSS-* id.""" 16 | verses = [] 17 | lines_of_current_verse = [] 18 | last_seen_verse_id = None 19 | ok_lines = [line for line in text.split('\n') 20 | if not read.filters.is_html_footer_line(line) 21 | and not read.filters.is_empty(line)] 22 | for line in ok_lines: 23 | match = MSS_LINE_INITIAL_REGEX.match(line) 24 | assert match, (line, 'line is #%s#' % line) 25 | current_verse_id = match.group(1) 26 | if current_verse_id == last_seen_verse_id: 27 | lines_of_current_verse.append(line) 28 | else: 29 | if lines_of_current_verse: 30 | verses.append('\n'.join(lines_of_current_verse)) 31 | last_seen_verse_id = current_verse_id 32 | lines_of_current_verse = [line] 33 | if lines_of_current_verse: 34 | verses.append('\n'.join(lines_of_current_verse)) 35 | return verses 36 | 37 | 38 | def split(text, custom_splitter=None): 39 | """Split text into separate verses.""" 40 | text = read.filters.process_crlf(text) 41 | text = read.filters.normalize_nfkc(text) 42 | text = read.filters.remove_control_characters(text) 43 | 44 | text = read.filters.after_second_comment_line(text) 45 | 46 | if custom_splitter: 47 | return (custom_splitter(text), text) 48 | 49 | verses = read.filters.split_verses_at_br(text) 50 | 51 | verses = map(read.filters.remove_trailing_parenthesized_line, verses) 52 | verses = map(read.filters.clean_leading_footnote, verses) 53 | verses = map(read.filters.remove_trailing_variant_line, verses) 54 | verses = map(read.filters.remove_leading_section_header_line, verses) 55 | 56 | verses = map(read.filters.process_html_spaces, verses) 57 | 58 | # Tracer()() 59 | 60 | verses = read.filters.split_further_at_verse_numbers(verses) 61 | 62 | verses = [verse.strip('\n') for verse in verses] 63 | verses = [verse for verse in verses if 64 | not read.filters.is_parenthesized_line(verse) and 65 | not read.filters.is_empty(verse) and 66 | not read.filters.is_header_line(verse) and 67 | not read.filters.is_footnote_line(verse) and 68 | not read.filters.is_asterisked_variant_line(verse) and 69 | not read.filters.is_footnote_followed_by_variant_line(verse) and 70 | not read.filters.is_html_footer_line(verse) and 71 | not read.filters.is_verses_found_elsewhere_line(verse) and 72 | # not read.filters.starts_with_br(verse) and 73 | not read.filters.is_edition_info(verse) and 74 | not read.filters.is_text_abbreviation_header(verse) and 75 | not read.filters.is_parentheses_info(verse) and 76 | not read.filters.is_trailing_work_name_junk(verse) and 77 | not read.filters.is_section_header_line(verse) and 78 | not read.filters.is_work_footer_line(verse) and 79 | not read.filters.is_work_header_line(verse) and 80 | not read.filters.is_abbreviation_block(verse)] 81 | 82 | verses = map(read.filters.clean_leading_br, verses) 83 | # verses = map(read.filters.clean_trailing_br, verses) # Added newly... 84 | verses = map(read.filters.clean_leading_parenthesized_line, verses) 85 | 86 | # Print('These are verses:') 87 | # for (i, verse) in enumerate(verses): 88 | # # # Two or four lines 89 | # # if (not re.match(r'^(.*
\n){3}.*
$', verse) and 90 | # # not re.match(r'^.*
\n.*
$', verse)): 91 | # Print('\nVerse %d is:' % (i + 1)) 92 | # Print('\n '.join((' ' + verse).splitlines())) 93 | # Print('End Verse %d\n' % (i + 1)) 94 | 95 | return (verses, text) 96 | 97 | 98 | # Hacky enum :-) 99 | _DONT_HIGHLIGHT = False 100 | _HIGHLIGHT = True 101 | 102 | def find_verse_in_text(verse, text): 103 | """Yields (blocks, consumed) where blocks are (text_fragment, should_highlight), 104 | and consumed is the number of characters consumed in text.""" 105 | # Print('Trying to find verse %s in text of length %d' % (verse, len(text))) 106 | words = re.split(r'(\s+)', verse) 107 | for word in words: 108 | assert word in text, (text, verse, word) 109 | where = text.find(word) 110 | yield (text[:where], _DONT_HIGHLIGHT) 111 | assert text[where : where + len(word)] == word 112 | # Print('Yielding found word: %s, %s' % (word, _HIGHLIGHT)) 113 | yield (word, _HIGHLIGHT) 114 | text = text[where + len(word):] 115 | 116 | 117 | def individual_blocks_of_verses_in_text(verses, text): 118 | """Splits text into blocks of text; each block is (text, should_highlight).""" 119 | while verses: 120 | verse = verses.pop(0) 121 | consumed = 0 122 | for block in find_verse_in_text(verse, text): 123 | consumed += len(block[0]) 124 | yield block 125 | text = text[consumed:] 126 | if text: 127 | # Print('Leftover text after all verses: %s' % text) 128 | yield (text, _DONT_HIGHLIGHT) 129 | 130 | 131 | def blocks_of_verses_in_text(verses, text): 132 | """Splits text into blocks of selected and not selected.""" 133 | current_block = ('', None) 134 | for block in individual_blocks_of_verses_in_text(verses, text): 135 | if block[0] == '': 136 | continue 137 | if block[1] == current_block[1]: 138 | current_block = (current_block[0] + block[0], block[1]) 139 | else: 140 | if current_block[0]: 141 | yield current_block 142 | current_block = block 143 | if current_block[0]: 144 | yield current_block 145 | -------------------------------------------------------------------------------- /chandas/syllabize.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import logging 3 | 4 | import regex 5 | 6 | from indic_transliteration import sanscript 7 | 8 | 9 | def get_graphemes(in_string): 10 | """ Split a devanAgarI and possibly other strings into graphemes. 11 | 12 | Example: assert syllabize.get_graphemes(u"बिक्रममेरोनामहो") == "बि क्र म मे रो ना म हो".split(" ") 13 | :param in_string: 14 | :return: 15 | """ 16 | import icu 17 | break_iterator = icu.BreakIterator.createCharacterInstance(icu.Locale()) 18 | break_iterator.setText(in_string) 19 | i = 0 20 | graphemes = [] 21 | for j in break_iterator: 22 | s = in_string[i:j] 23 | graphemes.append(s) 24 | i = j 25 | return graphemes 26 | 27 | def is_vyanjanaanta(in_string): 28 | return in_string.endswith("्") or in_string.endswith("य्ँ") or in_string.endswith("व्ँ") or in_string.endswith("ल्ँ") 29 | 30 | 31 | def has_vowel(in_string): 32 | dev_scheme = sanscript.SCHEMES[sanscript.DEVANAGARI] 33 | return bool(regex.findall("[%s%s]" % (dev_scheme.PATTERN_INDEPENDENT_VOWEL, dev_scheme.PATTERN_DEPENDENT_VOWEL), in_string, flags=regex.UNICODE) or regex.match(".*[%s](?=([^्]|$))" % (dev_scheme.PATTERN_VYANJANA), in_string, flags=regex.UNICODE)) 34 | 35 | 36 | def begins_with_vowel(in_string): 37 | return bool(regex.fullmatch(r"[ऄ-औॲ-ॷ].*", in_string, flags=regex.UNICODE)) 38 | 39 | 40 | def get_syllables(in_string): 41 | """ Split devanAgarI string into syllables. Ignores spaces and punctuation. 42 | 43 | syllabize.get_syllables(u"बिक्रममेरोनामहो") == "बिक् र म मे रो ना म हो".split(" ") 44 | :param in_string: 45 | :return: 46 | """ 47 | # Cannot do \P{Letter} below as it does not match mAtra-s and virAma-s as of 2019. 48 | # ऀ-़ा-ॣॲ-ॿ 49 | 50 | dev_scheme = sanscript.SCHEMES[sanscript.DEVANAGARI] 51 | cleaned_phrase = in_string 52 | cleaned_phrase = regex.sub("[%s]" % dev_scheme.PATTERN_OM, "ओम्", cleaned_phrase) 53 | cleaned_phrase = regex.sub(r"([^%s%s%s%s%s%s])" % (dev_scheme.PATTERN_INDEPENDENT_VOWEL, dev_scheme.PATTERN_VYANJANA, dev_scheme.PATTERN_DEPENDENT_VOWEL, dev_scheme.PATTERN_YOGAVAAHA, dev_scheme.PATTERN_ACCENT, dev_scheme.PATTERN_CONSONANT_MODIFIER), "", cleaned_phrase, flags=regex.UNICODE) 54 | cleaned_phrase = cleaned_phrase.replace(" ", "") 55 | cleaned_phrase = regex.sub(r"(%s)([%s])" % (dev_scheme.PATTERN_VYANJANA_WITHOUT_VOWEL, dev_scheme.PATTERN_INDEPENDENT_VOWEL), lambda x: sanscript.SCHEMES[sanscript.DEVANAGARI].do_vyanjana_svara_join(x.group(1), x.group(2)), cleaned_phrase) 56 | syllables = [] 57 | while len(cleaned_phrase) > 0: 58 | # possible vyanjanas without vowels + svara or vyanjana + possible vowel marks + possible yogavAhas + possible accents + possible vyanjanas without vowels 59 | match = regex.match((r"(%s)*[%s%s]़?[%s]*[%s]*[%s]*(%sँ?)*" % (dev_scheme.PATTERN_VYANJANA_WITHOUT_VOWEL,dev_scheme.PATTERN_INDEPENDENT_VOWEL, dev_scheme.PATTERN_VYANJANA, dev_scheme.PATTERN_DEPENDENT_VOWEL, dev_scheme.PATTERN_YOGAVAAHA, dev_scheme.PATTERN_ACCENT, dev_scheme.PATTERN_VYANJANA_WITHOUT_VOWEL, )), cleaned_phrase) 60 | if match is None: 61 | message = "No match! Input - %s Remaining - %s" % (in_string, cleaned_phrase) 62 | logging.fatal(message) 63 | raise ValueError(message) 64 | current_syllable = match.group(0) 65 | cleaned_phrase = cleaned_phrase.replace(match.group(0), "", 1) 66 | if len(current_syllable) > 0: 67 | syllables.append(current_syllable) 68 | return syllables 69 | 70 | 71 | def get_syllable_weight(syllable): 72 | dev_scheme = sanscript.SCHEMES[sanscript.DEVANAGARI] 73 | if regex.findall(r"[%s%s%s]" % (dev_scheme.PATTERN_GURU_INDEPENDENT_VOWEL, dev_scheme.PATTERN_GURU_DEPENDENT_VOWEL, dev_scheme.PATTERN_GURU_YOGAVAAHA), syllable): 74 | return "G" 75 | elif regex.findall(r"[%s%s]़?[%s]*[%s]*[%s]*(%s)+" % (dev_scheme.PATTERN_INDEPENDENT_VOWEL, dev_scheme.PATTERN_VYANJANA, dev_scheme.PATTERN_DEPENDENT_VOWEL, dev_scheme.PATTERN_YOGAVAAHA, dev_scheme.PATTERN_ACCENT, dev_scheme.PATTERN_VYANJANA_WITHOUT_VOWEL, ), syllable): 76 | return "G" 77 | else: 78 | return "L" 79 | 80 | 81 | def to_weight_list(line_in): 82 | syllables = get_syllables(line_in) 83 | return [get_syllable_weight(syllable) for syllable in syllables] 84 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/docs/index.rst -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | PyICU 2 | unicodecsv 3 | indic_transliteration 4 | -------------------------------------------------------------------------------- /scrapers/ardhasama.csv: -------------------------------------------------------------------------------- 1 | साचीकृतवदना,46,4,11,द द द द दा दा दा द द दा दा,12,दा दा द द द द दा द द द द दा,11,द द द द दा दा दा द द दा दा,12,दा दा द द द द दा द द द द दा,अर्ध-सम-वृत्त 2 | अर्धरुतम्,52,4,13,दा द द द द द द दा दा द द द द,13,दा द द द द द द दा द द दा द द,13,दा द द द द द द दा दा द द द द,13,दा द द द द द द दा द द दा द द,अर्ध-सम-वृत्त 3 | शालभञ्जिका,44,4,11,द द दा द द द दा द दा द दा,11,दा द द दा दा द दा द दा द दा,11,द द दा द द द दा द दा द दा,11,दा द द दा दा द दा द दा द दा,अर्ध-सम-वृत्त 4 | मार्दङ्गी,64,4,14,द द दा द द द द द दा द द द दा दा,18,दा दा दा द द द द दा द द द द द द द द दा दा,14,द द दा द द द द द दा द द द दा दा,18,दा दा दा द द द द दा द द द द द द द द दा दा,अर्ध-सम-वृत्त 5 | अपरप्रीणिता,58,4,16,द द द द द द द द दा दा दा द दा दा द दा,13,द द द द द द दा दा द दा दा द दा,16,द द द द द द द द दा दा दा द दा दा द दा,13,द द द द द द दा दा द दा दा द दा,अर्ध-सम-वृत्त 6 | प्रमाथिनी,50,4,13,द द द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 7 | अनासववासिता,62,4,16,द द दा दा द द दा द दा द दा द द द दा दा,15,द द द दा द द द दा द दा द दा द दा दा,16,द द दा दा द द दा द दा द दा द द द दा दा,15,द द द दा द द द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 8 | शिशुमुखी,52,4,13,द द द दा द द द दा द द दा द दा,13,द द द दा द द द द दा द दा द दा,13,द द द दा द द द दा द द दा द दा,13,द द द दा द द द द दा द दा द दा,अर्ध-सम-वृत्त 9 | कर्णिनी,44,4,11,दा द दा द द द दा द द दा दा,11,दा द दा द द द दा द दा द दा,11,दा द दा द द द दा द द दा दा,11,दा द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 10 | प्रमोदपरिणीता,58,4,14,द द द द द द दा द दा द दा द दा दा,15,द द द द दा द द दा द दा द द द दा दा,14,द द द द द द दा द दा द दा द दा दा,15,द द द द दा द द दा द दा द द द दा दा,अर्ध-सम-वृत्त 11 | संपातशीला,44,4,10,दा दा द दा दा दा दा द दा दा,12,द द दा द द द दा दा दा द दा दा,10,दा दा द दा दा दा दा द दा दा,12,द द दा द द द दा दा दा द दा दा,अर्ध-सम-वृत्त 12 | प्रभासिता,40,4,10,दा दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 13 | सुन्दरी,42,4,11,द द दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 14 | कमलाकरा,46,4,11,दा द द दा द द दा द द दा दा,12,दा द द द द द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,12,दा द द द द द द दा द द दा दा,अर्ध-सम-वृत्त 15 | कलना,52,4,13,द द दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द दा द दा,13,द द दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 16 | अतिप्रतिविनीता,54,4,14,द द दा दा द द दा द दा द द द दा दा,13,द द द द दा दा द दा द दा द दा दा,14,द द दा दा द द दा द दा द द द दा दा,13,द द द द दा दा द दा द दा द दा दा,अर्ध-सम-वृत्त 17 | हरिलुप्ता,46,4,11,द द दा द द दा द द दा द दा,12,द द दा दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,12,द द दा दा द द दा द द दा द दा,अर्ध-सम-वृत्त 18 | वियद्वाणी,48,4,12,द द दा दा द द दा द दा द दा दा,12,दा दा दा द द दा द दा द दा दा दा,12,द द दा दा द द दा द दा द दा दा,12,दा दा दा द द दा द दा द दा दा दा,अर्ध-सम-वृत्त 19 | अपरवक्त्रम्,46,4,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 20 | अवहित्रा,44,4,11,दा द द दा द द दा द द दा दा,11,द द दा द द दा द द दा द द,11,दा द द दा द द दा द द दा दा,11,द द दा द द दा द द दा द द,अर्ध-सम-वृत्त 21 | केतुमती,42,4,10,द द दा द दा द द द दा दा,11,दा द द दा द दा द द द दा दा,10,द द दा द दा द द द दा दा,11,दा द द दा द दा द द द दा दा,अर्ध-सम-वृत्त 22 | किन्नटकः,46,4,11,दा दा द द दा द द दा द द दा,12,द द दा द द दा द द दा द द दा,11,दा दा द द दा द द दा द द दा,12,द द दा द द दा द द दा द द दा,अर्ध-सम-वृत्त 23 | नटकः,46,4,12,द द दा द द दा द द दा द द दा,11,दा दा द द दा द द दा द द दा,12,द द दा द द दा द द दा द द दा,11,दा दा द द दा द द दा द द दा,अर्ध-सम-वृत्त 24 | विमानिनी,46,4,12,दा दा दा द द द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,12,दा दा दा द द द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 25 | करीरिता,44,4,12,द द दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,12,द द दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 26 | उपचित्रा,44,4,11,द द दा द द दा द द दा द द,11,दा द द दा द द दा द द दा दा,11,द द दा द द दा द द दा द द,11,दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 27 | अहीनताली,56,4,12,दा दा दा द द द द दा द दा द दा,16,द द दा दा द द द द दा द दा द दा द दा दा,12,दा दा दा द द द द दा द दा द दा,16,द द दा दा द द द द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 28 | हरिणीप्लुता,46,4,12,द द द दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,12,द द द दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,अर्ध-सम-वृत्त 29 | असुराढ्या,46,4,11,दा दा दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 30 | विमुखी,52,4,13,द द द द द द दा द द द द दा दा,13,द द द द द द द द दा द द दा दा,13,द द द द द द दा द द द द दा दा,13,द द द द द द द द दा द द दा दा,अर्ध-सम-वृत्त 31 | अमरावती,50,4,13,द दा द दा द दा द दा द दा द दा दा,12,दा द दा द दा द दा द दा द दा द,13,द दा द दा द दा द दा द दा द दा दा,12,दा द दा द दा द दा द दा द दा द,अर्ध-सम-वृत्त 32 | विपरीताख्यानकी,44,4,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,अर्ध-सम-वृत्त 33 | अरुन्तुदः,44,4,10,द द दा द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 34 | पद्मावती,50,4,13,द द दा द दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,अर्ध-सम-वृत्त 35 | द्रुतमध्या,46,4,11,दा द द दा द द दा द द दा दा,12,द द द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,12,द द द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 36 | असुधा,42,4,11,द द दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 37 | अनङ्गपदम्,52,4,13,दा द द दा द द दा द द दा द द दा,13,द द दा द द दा द द दा द द दा दा,13,दा द द दा द द दा द द दा द द दा,13,द द दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 38 | हरिणीप्लुता,46,4,11,द द दा द द दा द द दा द दा,12,द द द दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,12,द द द दा द द दा द द दा द दा,अर्ध-सम-वृत्त 39 | अकुसुमचरम्,46,4,12,दा द द द द द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,12,दा द द द द द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 40 | निर्मधुवारि,52,4,13,दा दा द दा द द दा द दा द द दा द,13,द द दा द दा द द द दा द दा द दा,13,दा दा द दा द द दा द दा द द दा द,13,द द दा द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 41 | परवक्त्रम्,46,4,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,अर्ध-सम-वृत्त 42 | शिशिरा,48,4,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 43 | केतुः,42,4,11,दा द द दा द दा द द द दा दा,10,द द दा द दा द द द दा दा,11,दा द द दा द दा द द द दा दा,10,द द दा द दा द द द दा दा,अर्ध-सम-वृत्त 44 | प्रतिविनीता,54,4,13,द द द द दा दा द दा द दा द दा दा,14,द द दा दा द द दा द दा द द द दा दा,13,द द द द दा दा द दा द दा द दा दा,14,द द दा दा द द दा द दा द द द दा दा,अर्ध-सम-वृत्त 45 | अवाचीकृतवदना,46,4,12,दा दा द द द द दा द द द द दा,11,द द द द दा दा दा द द दा दा,12,दा दा द द द द दा द द द द दा,11,द द द द दा दा दा द द दा दा,अर्ध-सम-वृत्त 46 | वैयाली,42,4,11,द द द द द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 47 | वासववन्दिता,38,4,10,दा दा दा द द दा द दा द दा,9,दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,9,दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 48 | समुद्रकान्ता,42,4,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 49 | पातशीला,44,4,12,द द दा द द द दा दा दा द दा दा,10,दा दा द दा दा दा दा द दा दा,12,द द दा द द द दा दा दा द दा दा,10,दा दा द दा दा दा दा द दा दा,अर्ध-सम-वृत्त 50 | वर्गवती,42,4,11,दा द द दा द द दा द द दा दा,10,द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,10,द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 51 | सुन्दरी,42,4,10,द द दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 52 | शिशिरशिखा,46,4,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 53 | प्रभासिता,40,4,10,द द दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 54 | लास्यलीलालयः,54,4,13,दा दा द द दा दा दा द दा दा द दा दा,14,दा द द द द दा दा दा द दा दा द दा दा,13,दा दा द द दा दा दा द दा दा द दा दा,14,दा द द द द दा दा दा द दा दा द दा दा,अर्ध-सम-वृत्त 55 | अर्भकपङ्क्तिः,48,4,12,द द दा दा द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 56 | अनूपकम्,44,4,12,द द द द दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,10,द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 57 | उलपोहा,48,4,12,दा द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 58 | पुष्पिताग्रा,50,4,12,द द द द द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 59 | सरसीकम्,48,4,12,दा दा द दा द द द दा द द दा दा,12,द द दा दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,12,द द दा दा द द द दा द द दा दा,अर्ध-सम-वृत्त 60 | उपोद्गता,46,4,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 61 | औपगवम्,44,4,11,द द द दा द दा दा द दा द दा,11,दा द द दा द दा दा द दा द दा,11,द द द दा द दा दा द दा द दा,11,दा द द दा द दा दा द दा द दा,अर्ध-सम-वृत्त 62 | विश्वप्रमा,40,4,10,दा दा द दा दा द दा दा द दा,10,द दा द दा दा द दा दा द दा,10,दा दा द दा दा द दा दा द दा,10,द दा द दा दा द दा दा द दा,अर्ध-सम-वृत्त 63 | अवरोधवनिता,58,4,14,द द द दा द द दा द द दा द दा द दा,15,द द दा द द दा द दा द दा द द द दा दा,14,द द द दा द द दा द द दा द दा द दा,15,द द दा द द दा द दा द दा द द द दा दा,अर्ध-सम-वृत्त 64 | उपसरसीकम्,48,4,12,द द दा दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,12,द द दा दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,अर्ध-सम-वृत्त 65 | उपोद्गता,46,4,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 66 | भद्रा,44,4,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,अर्ध-सम-वृत्त 67 | अवरोधवनिता,58,4,15,द द दा द द दा द दा द दा द द द दा दा,14,द द द दा द द दा द द दा द दा द दा,15,द द दा द द दा द दा द दा द द द दा दा,14,द द द दा द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 68 | युद्धविराट्,42,4,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 69 | किंशुकावली,46,4,13,दा दा दा द द द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,13,दा दा दा द द द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 70 | सुरहिता,52,4,13,द द द द द द द द दा द द दा दा,13,दा दा द द द द द द द द द द दा,13,द द द द द द द द दा द द दा दा,13,दा दा द द द द द द द द द द दा,अर्ध-सम-वृत्त 71 | लुप्ता,46,4,12,द द दा दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,12,द द दा दा द द दा द द दा द दा,11,द द दा द द दा द द दा द दा,अर्ध-सम-वृत्त 72 | जारिणी,46,4,10,द द द दा दा द दा दा द दा,13,दा द दा दा द दा द द द दा दा द दा,10,द द द दा दा द दा दा द दा,13,दा द दा दा द दा द द द दा दा द दा,अर्ध-सम-वृत्त 73 | कलनावती,52,4,13,द द दा द दा द द द दा द दा द दा,13,द द दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द दा द दा,13,द द दा द दा द द द दा द द दा दा,अर्ध-सम-वृत्त 74 | वैसारी,38,4,9,दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,9,दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 75 | अप्रमाथिनी,50,4,12,द द दा दा द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 76 | हंसी,44,4,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,अर्ध-सम-वृत्त 77 | सुधा,42,4,10,दा दा दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 78 | हीनताली,56,4,16,द द दा दा द द द द दा द दा द दा द दा दा,12,दा दा दा द द द द दा द दा द दा,16,द द दा दा द द द द दा द दा द दा द दा दा,12,दा दा दा द द द द दा द दा द दा,अर्ध-सम-वृत्त 79 | करधा,42,4,10,दा दा दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,10,दा दा दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,अर्ध-सम-वृत्त 80 | बद्धा,48,4,11,दा दा दा दा द द द द द द दा,13,द द दा द द दा द द द द द द दा,11,दा दा दा दा द द द द द द दा,13,द द दा द द दा द द द द द द दा,अर्ध-सम-वृत्त 81 | कामाक्षी,48,4,13,द द दा द द दा द द द द द द दा,11,दा दा दा दा द द द द द द दा,13,द द दा द द दा द द द द द द दा,11,दा दा दा दा द द द द द द दा,अर्ध-सम-वृत्त 82 | आख्यानकी,44,4,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,अर्ध-सम-वृत्त 83 | पाटलिका,46,4,12,द द द द दा दा द द द द दा दा,11,दा द द दा द द दा द द दा दा,12,द द द द दा दा द द द द दा दा,11,दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 84 | भद्रविराट्,42,4,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 85 | मदाक्रान्ता,54,4,13,द द दा द द दा द दा द दा द दा दा,14,दा दा दा द द दा द दा द दा द दा दा दा,13,द द दा द द दा द दा द दा द दा दा,14,दा दा दा द द दा द दा द दा द दा दा दा,अर्ध-सम-वृत्त 86 | किलिकिता,46,4,11,दा द दा द द द दा द दा द दा,12,द द द दा द द द दा द दा द दा,11,दा द दा द द द दा द दा द दा,12,द द द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 87 | कोरकिता,46,4,11,दा द द दा द द दा द द दा दा,12,द द द द दा दा द द द द दा दा,11,दा द द दा द द दा द द दा दा,12,द द द द दा दा द द द द दा दा,अर्ध-सम-वृत्त 88 | उपाढ्यम्,46,4,12,दा द द दा द द दा द दा द दा दा,11,द द द द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,11,द द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 89 | औपगवीतम्,44,4,11,दा द द दा द दा दा द दा द दा,11,द द द दा द दा दा द दा द दा,11,दा द द दा द दा दा द दा द दा,11,द द द दा द दा दा द दा द दा,अर्ध-सम-वृत्त 90 | करभोद्धता,44,4,11,दा द द दा दा द दा द दा द दा,11,द द दा द द द दा द दा द दा,11,दा द द दा दा द दा द दा द दा,11,द द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 91 | आलेपनम्,54,4,13,द द द दा दा द दा दा द दा दा द दा,14,द द द दा द द द दा दा द दा दा द दा,13,द द द दा दा द दा दा द दा दा द दा,14,द द द दा द द द दा दा द दा दा द दा,अर्ध-सम-वृत्त 92 | धीरावर्त्तः,52,4,13,दा दा दा दा दा द द दा दा द द दा दा,13,दा दा दा दा द द द द दा दा दा दा दा,13,दा दा दा दा दा द द दा दा द द दा दा,13,दा दा दा दा द द द द दा दा दा दा दा,अर्ध-सम-वृत्त 93 | उपमेया,48,4,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,अर्ध-सम-वृत्त 94 | पद्मावती,50,4,12,दा दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द द दा दा,12,दा दा द दा द द द दा द द दा दा,13,द द दा द दा द द द दा द द दा दा,अर्ध-सम-वृत्त 95 | धीरावर्त्तः,52,4,13,दा दा दा दा द द द द दा दा दा दा दा,13,दा दा दा दा दा द द दा दा द द दा दा,13,दा दा दा दा द द द द दा दा दा दा दा,13,दा दा दा दा दा द द दा दा द द दा दा,अर्ध-सम-वृत्त 96 | चमूरुभीरुः,50,4,12,दा द दा द द द द दा द दा द दा,13,द द दा द द द द दा द दा द दा दा,12,दा द दा द द द द दा द दा द दा,13,द द दा द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 97 | अकोषकृष्टा,48,4,14,द द दा दा द द दा द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,14,द द दा दा द द दा द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 98 | परप्रीणिता,58,4,13,द द द द द द दा दा द दा दा द दा,16,द द द द द द द द दा दा दा द दा दा द दा,13,द द द द द द दा दा द दा दा द दा,16,द द द द द द द द दा दा दा द दा दा द दा,अर्ध-सम-वृत्त 99 | अल्परुतम्,52,4,13,दा द द द द द द दा द द दा द द,13,दा द द द द द द दा दा द द द द,13,दा द द द द द द दा द द दा द द,13,दा द द द द द द दा दा द द द द,अर्ध-सम-वृत्त 100 | वेगवती,42,4,10,द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,10,द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 101 | आसववासिता,62,4,15,द द द दा द द द दा द दा द दा द दा दा,16,द द दा दा द द दा द दा द दा द द द दा दा,15,द द द दा द द द दा द दा द दा द दा दा,16,द द दा दा द द दा द दा द दा द द द दा दा,अर्ध-सम-वृत्त 102 | अनिरया,52,4,13,द द द दा द द द द दा द दा द दा,13,द द द दा द द द दा द द दा द दा,13,द द द दा द द द द दा द दा द दा,13,द द द दा द द द दा द द दा द दा,अर्ध-सम-वृत्त 103 | कान्ता,42,4,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 104 | अलिपदम्,46,4,13,दा द दा दा द दा द द द दा दा द दा,10,द द द दा दा द दा दा द दा,13,दा द दा दा द दा द द द दा दा द दा,10,द द द दा दा द दा दा द दा,अर्ध-सम-वृत्त 105 | उपाढ्यम्,46,4,11,द द द द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,11,द द द द द दा द दा द दा दा,12,दा द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 106 | समयवती,44,4,11,दा दा द द द द दा दा द द दा,11,द द दा दा दा दा द द द द दा,11,दा दा द द द द दा दा द द दा,11,द द दा दा दा दा द द द द दा,अर्ध-सम-वृत्त 107 | घटिका,40,4,10,दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,10,दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,अर्ध-सम-वृत्त 108 | वासववासिनी,64,4,16,द द द द दा द दा द द द दा द द दा द दा,16,दा दा द द दा द दा द द द दा द द दा द दा,16,द द द द दा द दा द द द दा द द दा द दा,16,दा दा द द दा द दा द द द दा द द दा द दा,अर्ध-सम-वृत्त 109 | अनालेपनम्,54,4,14,द द द दा द द द दा दा द दा दा द दा,13,द द द दा दा द दा दा द दा दा द दा,14,द द द दा द द द दा दा द दा दा द दा,13,द द द दा दा द दा दा द दा दा द दा,अर्ध-सम-वृत्त 110 | लास्यलीला,54,4,14,दा द द द द दा दा दा द दा दा द दा दा,13,दा दा द द दा दा दा द दा दा द दा दा,14,दा द द द द दा दा दा द दा दा द दा दा,13,दा दा द द दा दा दा द दा दा द दा दा,अर्ध-सम-वृत्त 111 | अमरावती,50,4,12,दा द दा द दा द दा द दा द दा द,13,द दा द दा द दा द दा द दा द दा दा,12,दा द दा द दा द दा द दा द दा द,13,द दा द दा द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 112 | मार्दङ्गी,64,4,18,दा दा दा द द द द दा द द द द द द द द दा दा,14,द द दा द द द द द दा द द द दा दा,18,दा दा दा द द द द दा द द द द द द द द दा दा,14,द द दा द द द द द दा द द द दा दा,अर्ध-सम-वृत्त 113 | ईहा,46,4,12,द द द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,12,द द द द दा द द दा द द दा दा,11,दा द द दा द द दा द द दा दा,अर्ध-सम-वृत्त 114 | वासिनी,64,4,16,दा दा द द दा द दा द द द दा द द दा द दा,16,द द द द दा द दा द द द दा द द दा द दा,16,दा दा द द दा द दा द द द दा द द दा द दा,16,द द द द दा द दा द द द दा द द दा द दा,अर्ध-सम-वृत्त 115 | अतैलम्,40,4,10,द दा द दा दा द दा दा द दा,10,दा दा द दा दा द दा दा द दा,10,द दा द दा दा द दा दा द दा,10,दा दा द दा दा द दा दा द दा,अर्ध-सम-वृत्त 116 | रुचिमुखी,52,4,13,द द द द द द द द दा द द दा दा,13,द द द द द द दा द द द द दा दा,13,द द द द द द द द दा द द दा दा,13,द द द द द द दा द द द द दा दा,अर्ध-सम-वृत्त 117 | विमानिनी,46,4,11,द द दा दा द द दा द दा द दा,12,दा दा दा द द द द दा द दा द दा,11,द द दा दा द द दा द दा द दा,12,दा दा दा द द द द दा द दा द दा,अर्ध-सम-वृत्त 118 | प्रमालिका,46,4,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 119 | सम्मदाक्रान्ता,54,4,14,दा दा दा द द दा द दा द दा द दा दा दा,13,द द दा द द दा द दा द दा द दा दा,14,दा दा दा द द दा द दा द दा द दा दा दा,13,द द दा द द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 120 | वसन्तमालिका,46,4,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,11,द द दा द द दा द दा द दा दा,12,द द दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 121 | मधुवारि,52,4,13,द द दा द दा द द द दा द दा द दा,13,दा दा द दा द द दा द दा द द दा द,13,द द दा द दा द द द दा द दा द दा,13,दा दा द दा द द दा द दा द द दा द,अर्ध-सम-वृत्त 122 | किलिकिता,46,4,12,द द द दा द द द दा द दा द दा,11,दा द दा द द द दा द दा द दा,12,द द द दा द द द दा द दा द दा,11,दा द दा द द द दा द दा द दा,अर्ध-सम-वृत्त 123 | चमूरुः,50,4,13,द द दा द द द द दा द दा द दा दा,12,दा द दा द द द द दा द दा द दा,13,द द दा द द द द दा द दा द दा दा,12,दा द दा द द द द दा द दा द दा,अर्ध-सम-वृत्त 124 | सारिका,44,4,11,दा द दा द द द दा द दा द दा,11,दा द दा द द द दा द द दा दा,11,दा द दा द द द दा द दा द दा,11,दा द दा द द द दा द द दा दा,अर्ध-सम-वृत्त 125 | मृदुमालती,46,4,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,12,द द द द दा द द दा द दा द दा,11,द द द द द द दा द दा द दा,अर्ध-सम-वृत्त 126 | सुराढ्या,46,4,12,द द द द द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,11,दा दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 127 | आलोलघटिका,40,4,10,द द दा द द दा द दा द दा,10,दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,10,दा दा द द द दा द दा द दा,अर्ध-सम-वृत्त 128 | अयवती,44,4,11,द द दा दा दा दा द द द द दा,11,दा दा द द द द दा दा द द दा,11,द द दा दा दा दा द द द द दा,11,दा दा द द द द दा दा द द दा,अर्ध-सम-वृत्त 129 | भुजङ्गभृता,52,4,13,द द दा द द दा द द दा द द दा दा,13,दा द द दा द द दा द द दा द द दा,13,द द दा द द दा द द दा द द दा दा,13,दा द द दा द द दा द द दा द द दा,अर्ध-सम-वृत्त 130 | प्रमोदपदम्,58,4,15,द द द द दा द द दा द दा द द द दा दा,14,द द द द द द दा द दा द दा द दा दा,15,द द द द दा द द दा द दा द द द दा दा,14,द द द द द द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 131 | अतिसुरहिता,52,4,13,दा दा द द द द द द द द द द दा,13,द द द द द द द द दा द द दा दा,13,दा दा द द द द द द द द द द दा,13,द द द द द द द द दा द द दा दा,अर्ध-सम-वृत्त 132 | शुकावली,46,4,10,दा दा द द दा द दा द दा दा,13,दा दा दा द द द द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,13,दा दा दा द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 133 | बृहच्छरावती,54,4,15,द द दा दा द द द द द द दा द दा द दा,12,द द द द द द दा द दा द दा दा,15,द द दा दा द द द द द द दा द दा द दा,12,द द द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 134 | विलासवापी,48,4,10,दा दा द द दा द दा द दा दा,14,द द दा दा द द दा द दा द दा द दा दा,10,दा दा द द दा द दा द दा दा,14,द द दा दा द द दा द दा द दा द दा दा,अर्ध-सम-वृत्त 135 | नवनीलता,44,4,10,द द दा द द दा द दा द दा,12,द द दा दा द द द दा द दा द दा,10,द द दा द द दा द दा द दा,12,द द दा दा द द द दा द दा द दा,अर्ध-सम-वृत्त 136 | अञ्चिताग्रा,50,4,13,द द द द दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,13,द द द द दा द द दा द दा द दा दा,12,द द द द द द दा द दा द दा दा,अर्ध-सम-वृत्त 137 | शरावती,54,4,12,द द द द द द दा द दा द दा दा,15,द द दा दा द द द द द द दा द दा द दा,12,द द द द द द दा द दा द दा दा,15,द द दा दा द द द द द द दा द दा द दा,अर्ध-सम-वृत्त 138 | वियद्वाणी,48,4,12,दा दा दा द द दा द दा द दा दा दा,12,द द दा दा द द दा द दा द दा दा,12,दा दा दा द द दा द दा द दा दा दा,12,द द दा दा द द दा द दा द दा दा,अर्ध-सम-वृत्त 139 | -------------------------------------------------------------------------------- /scrapers/viShama.csv: -------------------------------------------------------------------------------- 1 | आर्द्रा,44,4,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 2 | वैधात्री,48,4,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 3 | माया,44,4,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 4 | रताख्यानकी,48,4,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 5 | कुमारी,48,4,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 6 | वर्द्धमानम्,60,4,14,दा दा दा द द दा द दा द दा द द दा दा,13,द द दा द द द द दा द दा द दा दा,18,द द द द द द द द दा द द द द द द द द दा,15,द द द द द द द द द द दा द द दा दा,विषम-वृत्त 7 | मनहासा,48,4,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 8 | शङ्खचूडा,48,4,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 9 | वरासिका,48,4,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 10 | विषमव्याली,48,4,12,द द द द द दा दा दा दा दा दा दा,12,द द द द द दा दा दा दा दा दा दा,12,द द द द द दा दा दा दा दा दा दा,12,द द द द द दा दा दा दा दा दा दा,सम-वृत्त 11 | इन्दुमा,48,4,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 12 | माला,44,4,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 13 | सौरभेयी,48,4,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 14 | सौरभकम्,43,4,10,द द दा द दा द द द दा द,10,द द द द द दा द दा द दा,10,दा द दा द द द दा द द दा,13,द द दा द दा द द द दा द दा द दा,विषम-वृत्त 15 | शाला,44,4,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 16 | वाणी,44,4,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 17 | बुद्धिः,44,4,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 18 | रामा,44,4,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 19 | प्रेमा,44,4,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 20 | रमणा,48,4,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 21 | ललितम्,45,4,10,द द दा द दा द द द दा द,10,द द द द द दा द दा द दा,12,द द द द द द द द दा द द दा,13,द द दा द दा द द द दा द दा द दा,विषम-वृत्त 22 | ऋद्धिः,44,4,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 23 | बाला,44,4,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,विषम-वृत्त 24 | उद्गता,44,4,10,द द दा द दा द द द दा द,10,द द द द द दा द दा द दा,11,दा द द द द द द दा द द दा,13,द द दा द दा द द द दा द दा द दा,विषम-वृत्त 25 | शीलातुरा,48,4,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 26 | वासन्तिका,48,4,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,विषम-वृत्त 27 | उपस्थितप्रचुपितम्,51,4,14,दा दा दा द द दा द दा द दा द द दा दा,13,द द दा द द द द दा द दा द दा दा,9,द द द द द द द द दा,15,द द द द द द द द द द दा द द दा दा,विषम-वृत्त 28 | कीर्तिः,44,4,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 29 | जाया,44,4,11,दा दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,द दा द दा दा द द दा द दा दा,11,दा दा द दा दा द द दा द दा दा,विषम-वृत्त 30 | पुष्टिदा,48,4,12,दा दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,12,द दा द दा दा द द दा द दा द दा,12,दा दा द दा दा द द दा द दा द दा,विषम-वृत्त 31 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | """A setuptools based setup module. 2 | 3 | See: 4 | https://packaging.python.org/en/latest/distributing.html 5 | https://github.com/pypa/sampleproject 6 | """ 7 | 8 | # To use a consistent encoding 9 | from os import path 10 | 11 | # Always prefer setuptools over distutils 12 | from setuptools import setup, find_packages 13 | 14 | here = path.abspath(path.dirname(__file__)) 15 | 16 | # Get the long description from the README file 17 | long_description = '' 18 | try: 19 | import pypandoc 20 | 21 | long_description = pypandoc.convert_file(source_file='README.md', to='rst', format='markdown_github') 22 | except (IOError, ImportError): 23 | long_description = '' 24 | 25 | with open('requirements.txt', 'r') as f: 26 | install_reqs = [ 27 | s for s in [ 28 | line.split('#', 1)[0].strip(' \t\n') for line in f 29 | ] if s != '' 30 | ] 31 | 32 | setup( 33 | name='chandas', 34 | 35 | # Versions should comply with PEP440. For a discussion on single-sourcing 36 | # the version across setup.py and the project code, see 37 | # https://packaging.python.org/en/latest/single_source_version.html 38 | version='0.0.10', 39 | 40 | description='Metrical analysis tools for indic languages in general, and sanskrit in particular', 41 | long_description=long_description, 42 | 43 | # The project's main homepage. 44 | url='https://github.com/sanskrit-coders/chandas', 45 | 46 | # Author details 47 | author='Sanskrit programmers', 48 | author_email='sanskrit-programmers@googlegroups.com', 49 | 50 | # Choose your license 51 | license='MIT', 52 | 53 | # See https://pypi.python.org/pypi?%3Aaction=list_classifiers 54 | classifiers=[ 55 | # How mature is this project? Common values are 56 | # 3 - Alpha 57 | # 4 - Beta 58 | # 5 - Production/Stable 59 | 'Development Status :: 5 - Production/Stable', 60 | 61 | # Indicate who your project is intended for 62 | 'Intended Audience :: Education', 63 | 'Intended Audience :: Science/Research', 64 | 'Intended Audience :: Developers', 65 | 'Natural Language :: Hindi', 66 | 'Natural Language :: Tamil', 67 | 'Natural Language :: Bengali', 68 | 'Natural Language :: Panjabi', 69 | 'Natural Language :: Marathi', 70 | 'Topic :: Text Processing :: Linguistic', 71 | 72 | # Pick your license as you wish (should match "license" above) 73 | 'License :: OSI Approved :: MIT License', 74 | 75 | # Specify the Python versions you support here. In particular, ensure 76 | # that you indicate whether you support Python 2, Python 3 or both. 77 | 'Programming Language :: Python :: 3', 78 | 'Programming Language :: Python :: 3.6', 79 | 'Programming Language :: Python :: 3.7', 80 | ], 81 | 82 | # What does your project relate to? 83 | keywords='indic metre meter hindi sanskrit samskritam kannada devanagari tamil malayalam telugu gurumukhi gujarati bengali oriya) SLP1 WX', 84 | 85 | # You can just specify the packages manually here if your project is 86 | # simple. Or you can use find_packages(). 87 | packages=find_packages(exclude=['contrib', 'docs', 'tests']), 88 | 89 | # Alternatively, if you want to distribute just a my_module.py, uncomment 90 | # this: 91 | # py_modules=["my_module"], 92 | 93 | # List run-time dependencies here. These will be installed by pip when 94 | # your project is installed. For an analysis of "install_requires" vs pip's 95 | # requirements files see: 96 | # https://packaging.python.org/en/latest/requirements.html 97 | install_requires=install_reqs, 98 | 99 | # List additional groups of dependencies here (e.g. development 100 | # dependencies). You can install these using the following syntax, 101 | # for example: 102 | # $ pip install -e .[dev,test] 103 | extras_require={ 104 | # 'dev': ['check-manifest'], 105 | 'test': ['pytest'], 106 | }, 107 | 108 | include_package_data = True, 109 | # If there are data files included in your packages that need to be 110 | # installed, specify them here. If using Python 2.6 or less, then these 111 | # have to be included in MANIFEST.in as well. 112 | # package_data={ 113 | # 'sample': ['package_data.dat'], 114 | # }, 115 | 116 | # Although 'package_data' is the preferred approach, in some case you may 117 | # need to place data files outside of your packages. See: 118 | # http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files # noqa 119 | # In this case, 'data_file' will be installed into '/my_data' 120 | # data_files=[('my_data', ['data/data_file'])], 121 | 122 | # To provide executable scripts, use entry points in preference to the 123 | # "scripts" keyword. Entry points provide cross-platform support and allow 124 | # pip to create the appropriate form of executable for the target platform. 125 | # entry_points={ 126 | # 'console_scripts': [ 127 | # 'sample=sample:main', 128 | # ], 129 | # }, 130 | ) 131 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanskrit-coders/chandas/2f715ebdc125060bbb75be4efcaef6a85bff23f2/tests/__init__.py -------------------------------------------------------------------------------- /tests/data/chandasIdTests.json: -------------------------------------------------------------------------------- 1 | { 2 | "canonicalSource": "https://github.com/sanskrit-coders/chandas/blob/master/tests/data/chandasIdTests.json", 3 | "comments": "Shared metre identification tests.", 4 | "tests": [ 5 | { 6 | "verse": "वागर्थाविव सम्पृक्तौ वागर्थप्रतिपत्तये ।\nजगतः पितरौ वन्दे पार्वतीपरमेश्वरौ ॥ १.१ ॥", 7 | "exactMatches": ["अनुष्टुप् (श्लोक)"] 8 | }, 9 | { 10 | "verse": "निर्दिष्टाङ् कुलपतिना स पर्णशालाम् अध्यास्य प्रयतपरिग्रहद्वितीयः ।\nतच्छिष्याध्ययननिवेदितावसानां सव्ँविष्टः कुशशयने निशान् निनाय ॥", 11 | "exactMatches": ["प्रहर्षिणी"] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /tests/data/syllabizationTests.json: -------------------------------------------------------------------------------- 1 | { 2 | "canonicalSource": "https://github.com/sanskrit-coders/chandas/blob/master/tests/data/syllabizationTests.json", 3 | "comments": "Shared syllabization tests.", 4 | "syllableExtractionTests": [ 5 | { 6 | "phrase": "बिक्रम मेरो नाम हो", 7 | "syllablesString": "बिक् र म मे रो ना म हो", 8 | "weightsString": "G L L G G G L G" 9 | }, 10 | { 11 | "phrase": "श्रीमत्", 12 | "syllablesString": "श्री मत्", 13 | "weightsString": "G G" 14 | }, 15 | { 16 | "phrase": "ॐ मणि पद्मे ऽहम्", 17 | "syllablesString": "ओम् म णि पद् मे हम्", 18 | "weightsString": "G L L G G G" 19 | }, 20 | { 21 | "phrase": "अन्तᳵकरणं संहर!", 22 | "syllablesString": "अन् तᳵ क र णं सं ह र", 23 | "weightsString": "G G L L G G L L" 24 | }, 25 | { 26 | "phrase": "अन्तः संहर!", 27 | "syllablesString": "अन् तः सं ह र", 28 | "weightsString": "G G G L L" 29 | }, 30 | { 31 | "phrase": "अन्तᳶ पश्य!", 32 | "syllablesString": "अन् तᳶ पश् य", 33 | "weightsString": "G G G L" 34 | }, 35 | { 36 | "phrase": "रक्षसाम् अपहत्यै!", 37 | "syllablesString": "रक् ष सा म प हत् यै", 38 | "weightsString": "G L G L L G G" 39 | }, 40 | { 41 | "phrase": "तव्ँ वानर!", 42 | "syllablesString": "तव्ँ वा न र", 43 | "weightsString": "G G L L" 44 | }, 45 | { 46 | "phrase": "तल्ँलीन! ताय्ँ यभ", 47 | "syllablesString": "तल्ँ ली न ताय्ँ य भ", 48 | "weightsString": "G G L G L L" 49 | }, 50 | { 51 | "phrase": "साँयि।", 52 | "syllablesString": "साँ यि", 53 | "weightsString": "G L" 54 | }, 55 | { 56 | "phrase": "वागर्थाविव सम्पृक्तौ वागर्थप्रतिपत्तये जगतः पितरौ वन्दे पार्वतीपरमेश्वरौ", 57 | "syllablesString": "वा गर् था वि व सम् पृक् तौ वा गर् थप् र ति पत् त ये ज ग तः पि त रौ वन् दे पार् व ती प र मेश् व रौ", 58 | "weightsString": "G G G L L G G G G G G L L G L G L L G L L G G G G L G L L G L G" 59 | }, 60 | { 61 | "phrase": "द्वयमाकुलयति चेतः स्कन्धावारद्विजातीनाम्", 62 | "syllablesString": "द्व य मा कु ल य ति चे तःस् कन् धा वा रद् वि जा ती नाम्", 63 | "weightsString": "L L G L L L L G G G G G G L G G G" 64 | }, 65 | { 66 | "phrase": "धन्व॑ना॒ गा धन्व॑ना॒जिं ज॑येम॒ धन्व॑ना ती॒व्राः स॒मदो॑ जयेम", 67 | "syllablesString": "धन् व॑ ना॒ गा धन् व॑ ना॒ जिं ज॑ ये म॒ धन् व॑ ना ती॒व् राः स॒ म दो॑ ज ये म", 68 | "weightsString": "G L G G G L G G L G L G L G G G L L G L G L" 69 | } 70 | ] 71 | } -------------------------------------------------------------------------------- /tests/identify_test.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import logging 3 | import json 4 | import os 5 | 6 | from indic_transliteration import sanscript 7 | 8 | import chandas 9 | from chandas import syllabize 10 | 11 | # Remove all handlers associated with the root logger object. 12 | 13 | for handler in logging.root.handlers[:]: 14 | logging.root.removeHandler(handler) 15 | logging.basicConfig( 16 | level=logging.DEBUG, 17 | format="%(levelname)s:%(asctime)s:%(module)s:%(filename)s:%(lineno)d %(message)s" 18 | ) 19 | 20 | TEST_DATA_PATH = os.path.join(os.path.dirname(__file__), 'data', 'chandasIdTests.json') 21 | 22 | test_data = {} 23 | with open(TEST_DATA_PATH) as test_data_file: 24 | # noinspection PyRedeclaration 25 | test_data = json.loads(test_data_file.read()) 26 | # logging.info(test_data["tests"]) 27 | 28 | 29 | @pytest.mark.parametrize("test_case", [x for x in test_data["tests"] if 'exactMatches' in x] ) 30 | def test_svat_id(test_case): 31 | logging.debug(str(test_case)) 32 | pattern_lines = chandas.to_pattern_lines(test_case["verse"].split("\n")) 33 | id_result = chandas.svat_identifier.IdentifyFromPatternLines(pattern_lines) 34 | assert 'exact' in id_result, id_result 35 | exact_matches = [sanscript.transliterate(metre.lower(), _from=sanscript.IAST, _to=sanscript.DEVANAGARI) for metre in id_result['exact'].keys()] 36 | assert exact_matches == test_case["exactMatches"], id_result -------------------------------------------------------------------------------- /tests/syllabize_test.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import logging 3 | import json 4 | import os 5 | 6 | from chandas import syllabize 7 | 8 | 9 | # Remove all handlers associated with the root logger object. 10 | 11 | for handler in logging.root.handlers[:]: 12 | logging.root.removeHandler(handler) 13 | logging.basicConfig( 14 | level=logging.DEBUG, 15 | format="%(levelname)s:%(asctime)s:%(module)s:%(filename)s:%(lineno)d %(message)s" 16 | ) 17 | 18 | TEST_DATA_PATH = os.path.join(os.path.dirname(__file__), 'data', 'syllabizationTests.json') 19 | 20 | test_data = {} 21 | with open(TEST_DATA_PATH) as test_data_file: 22 | # noinspection PyRedeclaration 23 | test_data = json.loads(test_data_file.read()) 24 | # logging.info(test_data["tests"]) 25 | 26 | 27 | def test_graphemes(): 28 | assert syllabize.get_graphemes(u"बिक्रममेरोनामहो") == "बि क्र म मे रो ना म हो".split(" ") 29 | 30 | 31 | @pytest.mark.parametrize("test_case", [x for x in test_data["syllableExtractionTests"] if "weightsString" in x]) 32 | def test_get_syllable_weight(test_case): 33 | logging.debug(str(test_case)) 34 | assert syllabize.to_weight_list(test_case["phrase"]) == test_case["weightsString"].split(" ") 35 | 36 | 37 | @pytest.mark.parametrize("test_case", test_data["syllableExtractionTests"]) 38 | def test_syllables(test_case): 39 | logging.debug(str(test_case)) 40 | assert syllabize.get_syllables(test_case["phrase"]) == test_case["syllablesString"].split(" ") 41 | 42 | 43 | @pytest.mark.parametrize("test_case", "म मत् श्री स्त्री".split(" ")) 44 | def test_has_vowel(test_case): 45 | assert syllabize.has_vowel(test_case) 46 | 47 | @pytest.mark.parametrize("test_case", "त् श्र्".split(" ")) 48 | def test_not_has_vowel(test_case): 49 | assert not syllabize.has_vowel(test_case) 50 | 51 | @pytest.mark.parametrize("test_case", "मत् तल् तल्ँ".split(" ")) 52 | def test_is_vyanjanAnta(test_case): 53 | assert syllabize.is_vyanjanaanta(test_case) 54 | 55 | 56 | @pytest.mark.parametrize("test_case", "तँ".split(" ")) 57 | def test_not_is_vyanjanAnta(test_case): 58 | assert not syllabize.is_vyanjanaanta(test_case) 59 | 60 | 61 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py36 3 | 4 | [testenv] 5 | deps = pytest 6 | commands = pytest --------------------------------------------------------------------------------