class Calculator:

    # Constructor for the Calculator class
    def __init__(self, filename):
        self.parser = Parser(filename)

    # Calculate Automatic Readability Index
    def automated_readability_index(self):
        return 4.71 * (float(self.parser.number_of_characters()) / float(self.parser.number_of_words())) \
               + 0.5 * (float(self.parser.number_of_words()) / float(self.parser.number_of_sentences())) - 21.43

    # Calculate Gunning fog index
    def gunning_fog_index(self):
        return 0.4 * ((float(self.parser.number_of_words()) / float(self.parser.number_of_sentences()))
                      + 100 * (float(self.parser.number_of_polysyllables()) / float(self.parser.number_of_words())))

    # Calculate smog index
    def smog_index(self):
        return 1.0430 * sqrt(float(self.parser.number_of_polysyllables()) * 30.0 / float(self.parser.number_of_sentences()))\
               + 3.1291

    # Calculate flesch reading ease
    def flesch_reading_ease(self):
        return 206.835 - 1.105 * (float(self.parser.number_of_words()) / float(self.parser.number_of_sentences())) - \
               84.6 * (float(self.parser.number_of_syllables()) / float(self.parser.number_of_words()))

    # Calculate Flesch Kincaid grade level
    def flesch_kincaid_grade_level(self):
        return (0.39 * float(self.parser.average_sentence_length())) + (11.8 * self.parser.average_syllable_per_word()) \
               - 15.59

    # Calculate Coleman Liau index
    def coleman_liau_index(self):
        return 0.0588 * (float(self.parser.average_letter_per_100_words())) \
               - 0.296 * (self.parser.average_sentences_per_100_words()) - 15.8