import numpy as np
from fractions import Fraction 
from kerala_math.jyatable import MST

_k = [0 for i in range(24)]

# śreṣṭhaṁ nāma variṣṭhānāṁ 
_b = [
    MST(224, 50, 22), # श्रेष्ठं नाम वरिष्ठानां
    MST(448, 42, 58), # हिमाद्रिर्वेदभावनः
    MST(670, 40, 16), # तपनो भानु सूक्तज्ञो
    MST(889, 45, 15), # मध्यमं विद्धि दोहनं
    MST(1105, 1, 39), # धिगाज्योनाशनं कष्टं
    MST(1315, 34,  7), # छन्नभोगाशयाम्बिका
    MST(1520, 28, 35), # मृगाहारो नरेशोयं
    MST(1718, 52, 24), # वीरो रणजयोत्सुकः
    MST(1909, 54, 35), # मूलं विशुद्धं नाळस्य
    MST(2092, 46,  3), # गानेषु विरळा नराः
    MST(2266, 39, 50), # अशुद्धिगुप्ता चोरश्रीः
    MST(2430, 51, 15), # शङ्कुकर्णो नगेश्वरः
    MST(2584, 38,  6), # तनुजो गर्भजो मित्रं
    MST(2727, 20, 52), # श्रीमानत्र सुखी सखे
    MST(2858, 22, 55), # शशी रात्रौ हिमाहारौ
    MST(2977, 10, 34), # वेगज्ञः पथि सिन्धुरः
    MST(3083, 13, 17), # छायालयो गजो नीलो
    MST(3176,  3, 50), # निर्मलो नास्ति सत्कुले
    MST(3255, 18, 22), # रात्रौ दर्पणमभ्राङ्गं
    MST(3320, 36, 30), # नागस्तुङ्गनखो बली
    MST(3371, 41, 29), # धीरो युवा कथालोलः
    MST(3408, 20, 11), # पूज्यो नारीजनैर्भगः
    MST(3430, 23, 11), # कन्यागारे नागवल्ली
    MST(3437, 44, 48)  # देवो विश्वस्थली भृगुः 
]

# Pindajyas
_k[0] = _b[0]
for i in range(1,24):
    _k[i] = _b[i] - _b[i-1]

madhava_verse =  [
    "श्रेष्ठं नाम वरिष्ठानां",
    "हिमाद्रिर्वेदभावनः",
    "तपनो भानु सूक्तज्ञो",
    "मध्यमं विद्धि दोहनं",
    "धिगाज्योनाशनं कष्टं",
     "छन्नभोगाशयाम्बिका",
     "मृगाहारो नरेशोयं",
     "वीरो रणजयोत्सुकः",
     "मूलं विशुद्धं नाळस्य",
     "गानेषु विरळा नराः",
     "अशुद्धिगुप्ता चोरश्रीः",
     "शङ्कुकर्णो नगेश्वरः",
     "तनुजो गर्भजो मित्रं",
     "श्रीमानत्र सुखी सखे",
     "शशी रात्रौ हिमाहारौ",
     "वेगज्ञः पथि सिन्धुरः",
     "छायालयो गजो नीलो",
     "निर्मलो नास्ति सत्कुले",
     "रात्रौ दर्पणमभ्राङ्गं",
     "नागस्तुङ्गनखो बली",
     "धीरो युवा कथालोलः",
     "पूज्यो नारीजनैर्भगः",
     "कन्यागारे नागवल्ली",
     "देवो विश्वस्थली भृगुः", 
]

    
    
def khandajya(k: int):
    """
    Return the kth khandajya computed by the madhava table

    Inputs:
      k (int) : index from 0 to 23
    Outputs:
      int : kth khandajya
    """
    assert ((k>=0) & (k<24)), f"Input must be between 0 and 23 inclusive, got {k}"
    return _k[k]

def pindajya(k: int):
    """
    Return the kth pindajya computed by the madhava table

    Inputs:
      k (int) : index from 0 to 23
    Outputs:
      int : kth pindajya
    """
    assert ((k>=0) & (k<24)), f"Input must be between 0 and 23 inclusive, got {k}"
    return _b[k]
