# Copyright 2025 Allen Institute for AI.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Registry of all instructions."""

import lighteval.tasks.tasks.ifbench.instructions as instructions


INSTRUCTION_DICT = {
    "count:word_count_range": instructions.WordCountRangeChecker,
    "count:unique_word_count": instructions.UniqueWordCountChecker,
    "ratio:stop_words": instructions.StopWordPercentageChecker,
    "ratio:sentence_type": instructions.SentTypeRatioChecker,
    "ratio:sentence_balance": instructions.SentBalanceChecker,
    "count:conjunctions": instructions.ConjunctionCountChecker,
    "count:person_names": instructions.PersonNameCountChecker,
    "ratio:overlap": instructions.NGramOverlapChecker,
    "count:numbers": instructions.NumbersCountChecker,
    "words:alphabet": instructions.AlphabetLoopChecker,
    "words:vowel": instructions.SingleVowelParagraphChecker,
    "words:consonants": instructions.ConsonantClusterChecker,
    "sentence:alliteration_increment": instructions.IncrementingAlliterationChecker,
    "words:palindrome": instructions.PalindromeChecker,
    "count:punctuation": instructions.PunctuationCoverChecker,
    "format:parentheses": instructions.NestedParenthesesChecker,
    "format:quotes": instructions.NestedQuotesChecker,
    "words:prime_lengths": instructions.PrimeLengthsChecker,
    "format:options": instructions.OptionsResponseChecker,
    "format:newline": instructions.NewLineWordsChecker,
    "format:emoji": instructions.EmojiSentenceChecker,
    "ratio:sentence_words": instructions.CharacterCountUniqueWordsChecker,
    "count:words_japanese": instructions.NthWordJapaneseChecker,
    "words:start_verb": instructions.StartWithVerbChecker,
    "words:repeats": instructions.LimitedWordRepeatChecker,
    "sentence:keyword": instructions.IncludeKeywordChecker,
    "count:pronouns": instructions.PronounCountChecker,
    "words:odd_even_syllables": instructions.AlternateParitySyllablesChecker,
    "words:last_first": instructions.LastWordFirstNextChecker,
    "words:paragraph_last_first": instructions.ParagraphLastFirstWordMatchChecker,
    "sentence:increment": instructions.IncrementingWordCountChecker,
    "words:no_consecutive": instructions.NoConsecutiveFirstLetterChecker,
    "format:line_indent": instructions.IndentStairsChecker,
    "format:quote_unquote": instructions.QuoteExplanationChecker,
    "format:list": instructions.SpecialBulletPointsChecker,
    "format:thesis": instructions.ItalicsThesisChecker,
    "format:sub-bullets": instructions.SubBulletPointsChecker,
    "format:no_bullets_bullets": instructions.SomeBulletPointsChecker,
    "custom:multiples": instructions.PrintMultiplesChecker,
    "custom:mcq_count_length": instructions.MultipleChoiceQuestionsChecker,
    "custom:reverse_newline": instructions.ReverseNewlineChecker,
    "custom:word_reverse": instructions.WordReverseOrderChecker,
    "custom:character_reverse": instructions.CharacterReverseOrderChecker,
    "custom:sentence_alphabet": instructions.SentenceAlphabetChecker,
    "custom:european_capitals_sort": instructions.EuropeanCapitalsSortChecker,
    "custom:csv_city": instructions.CityCSVChecker,
    "custom:csv_special_character": instructions.SpecialCharacterCSVChecker,
    "custom:csv_quotes": instructions.QuotesCSVChecker,
    "custom:date_format_list": instructions.DateFormatListChecker,
    "count:keywords_multiple": instructions.KeywordsMultipleChecker,
    "words:keywords_specific_position": instructions.KeywordSpecificPositionChecker,
    "words:words_position": instructions.WordsPositionChecker,
    "repeat:repeat_change": instructions.RepeatChangeChecker,
    "repeat:repeat_simple": instructions.RepeatSimpleChecker,
    "repeat:repeat_span": instructions.RepeatSpanChecker,
    "format:title_case": instructions.TitleCaseChecker,
    "format:output_template": instructions.OutputTemplateChecker,
    "format:no_whitespace": instructions.NoWhitespaceChecker,
}
