Source code for mathparse.mathwords

"""
Utility methods for getting math word terms.
"""
import math

BINARY_OPERATORS = {
    '^', '*', '/', '+', '-', '.'
}

# Each key is an ISO 639-2 language code
# https://www.loc.gov/standards/iso639-2/php/code_list.php
MATH_WORDS = {
    'DUT': {
        'prefix_unary_operators': {
            'vierkantswortel van': 'sqrt',
            'wortel van': 'sqrt',
            'logaritme van': 'log'
        },
        'postfix_unary_operators': {
            'kwadraat': '^ 2'
        },
        'binary_operators': {
            'plus': '+',
            'gedeeld door': '/',
            'min': '-',
            'maal': '*',
            'tot de macht': '^',
            'tot de': '^'
        },
        'numbers': {
            'nul': 0,
            'een': 1,
            'één': 1,
            'twee': 2,
            'drie': 3,
            'vier': 4,
            'vijf': 5,
            'zes': 6,
            'zeven': 7,
            'acht': 8,
            'negen': 9,
            'tien': 10,
            'elf': 11,
            'twaalf': 12,
            'dertien': 13,
            'veertien': 14,
            'vijftien': 15,
            'zestien': 16,
            'zeventien': 17,
            'achttien': 18,
            'negentien': 19,
            'twintig': 20,
            'dertig': 30,
            'veertig': 40,
            'vijftig': 50,
            'zestig': 60,
            'zeventig': 70,
            'tachtig': 80,
            'negentig': 90
        },
        'scales': {
            'honderd': 100,
            'duizend': 1000,
            'miljoen': 1000000,
            'miljard': 1000000000,
            'biljard': 1000000000000
        }
    },
    'ENG': {
        'prefix_unary_operators': {
            'square root of': 'sqrt',
            'negative': 'neg',
            'logarithm of': 'log',
            'log of': 'log'
        },
        'postfix_unary_operators': {
            'squared': '^ 2',
            'cubed': '^ 3',
        },
        'binary_operators': {
            'plus': '+',
            'divided by': '/',
            'minus': '-',
            'times': '*',
            'to the power of': '^',
            'point': '.'
        },
        'numbers': {
            'zero': 0,
            'one': 1,
            'two': 2,
            'three': 3,
            'four': 4,
            'five': 5,
            'six': 6,
            'seven': 7,
            'eight': 8,
            'nine': 9,
            'ten': 10,
            'eleven': 11,
            'twelve': 12,
            'thirteen': 13,
            'fourteen': 14,
            'fifteen': 15,
            'sixteen': 16,
            'seventeen': 17,
            'eighteen': 18,
            'nineteen': 19,
            'twenty': 20,
            'thirty': 30,
            'forty': 40,
            'fifty': 50,
            'sixty': 60,
            'seventy': 70,
            'eighty': 80,
            'ninety': 90
        },
        'scales': {
            'hundred': 100,
            'thousand': 1000,
            'million': 1000000,
            'billion': 1000000000,
            'trillion': 1000000000000
        }
    },
    'FRE': {
        'prefix_unary_operators': {
            'racine carrée de': 'sqrt',
            'logarithme de': 'log'
        },
        'postfix_unary_operators': {
            'au carré': '^ 2',
            'au cube': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'divisé par': '/',
            'moins': '-',
            'fois': '*',
            'équarri': '^ 2',
            'en cubes': '^ 3',
            'à la puissance': '^',
            'virgule': '.'
        },
        'numbers': {
            'zéro': 0,
            'un': 1,
            'deux': 2,
            'trois': 3,
            'quatre': 4,
            'cinq': 5,
            'six': 6,
            'sept': 7,
            'huit': 8,
            'neuf': 9,
            'dix': 10,
            'onze': 11,
            'douze': 12,
            'treize': 13,
            'quatorze': 14,
            'quinze': 15,
            'seize': 16,
            'dix-sept': 17,
            'dix-huit': 18,
            'dix-neuf': 19,
            'vingt': 20,
            'trente': 30,
            'quarante': 40,
            'cinquante': 50,
            'soixante': 60,
            'soixante-dix': 70,
            'septante': 70,
            'quatre-vingts': 80,
            'huitante': 80,
            'quatre-vingt-dix': 90,
            'nonante': 90
        },
        'scales': {
            'cent': 100,
            'mille': 1000,
            'un million': 1000000,
            'un milliard': 1000000000,
            'billions de': 1000000000000
        }
    },
    'GER': {
        'prefix_unary_operators': {
            'Quadratwurzel von': 'sqrt',
            'Wurzel von': 'sqrt',
            'Logarithmus von': 'log'
        },
        'postfix_unary_operators': {
            'quadriert': '^ 2',
            'hoch drei': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'geteilt durch': '/',
            'geteilt': '/',
            'minus': '-',
            'mal': '*',
            'multipliziert mit': '*',
            'im Quadrat': '^ 2',
            'hoch zwei': '^ 2',
            'cubed': '^ 3',
            'hoch': '^'
        },
        'numbers': {
            'null': 0,
            'eins': 1,
            'zwei': 2,
            'drei': 3,
            'vier': 4,
            'fünf': 5,
            'sechs': 6,
            'sieben': 7,
            'acht': 8,
            'neun': 9,
            'zehn': 10,
            'elf': 11,
            'zwölf': 12,
            'dreizehn': 13,
            'vierzehn': 14,
            'fünfzehn': 15,
            'sechszehn': 16,
            'siebzehn': 17,
            'achtzehn': 18,
            'neunzehn': 19,
            'zwanzig': 20,
            'dreißig': 30,
            'vierzig': 40,
            'fünfzig': 50,
            'sechzig': 60,
            'siebzig': 70,
            'achtzig': 80,
            'neunzig': 90
        },
        'scales': {
            'hundert': 100,
            'tausend': 1000,
            'hunderttausend': 100000,
            'million': 1000000,
            'milliarde': 1000000000,
            'billion': 1000000000000
        }
    },
    'GRE': {
        'prefix_unary_operators': {
            'τετραγωνική ρίζα του': 'sqrt',
            'λογάριθμος του': 'log'
        },
        'postfix_unary_operators': {
            'στο τετράγωνο': '^ 2',
            'στον κύβο': '^ 3',
        },
        'binary_operators': {
            'συν': '+', 'και': '+',
            'διά': '/',
            'πλην': '-',
            'επί': '*',
            'στην δύναμη του': '^',
            'εις την': '^'
        },
        'numbers': {
            'μηδέν': 0,
            'ένα': 1,
            'δύο': 2,
            'τρία': 3,
            'τέσσερα': 4,
            'πέντε': 5,
            'έξι': 6,
            'εφτά': 7,
            'οκτώ': 8, 'οχτώ': 8,
            'εννιά': 9, 'εννέα': 9,
            'δέκα': 10,
            'έντεκα': 11,
            'δώδεκα': 12,
            'δεκατρία': 13,
            'δεκατέσσερα': 14,
            'δεκαπέντε': 15,
            'δεκαέξι': 16,
            'δεκαεφτά': 17,
            'δεκαοκτώ': 18, 'δεκαοχτώ': 18,
            'δεκαεννιά': 19, 'δεκαεννέα': 19,
            'είκοσι': 20,
            'τριάντα': 30,
            'σαράντα': 40,
            'πενήντα': 50,
            'εξήντα': 60,
            'εβδομήντα': 70,
            'ογδόντα': 80,
            'ενενήντα': 90
        },
        'scales': {
            'εκατό': 100,
            'χίλια': 1000,
            'εκατομμύρια': 1000000, 'εκ.': 1000000,
            'δισεκατομμύρια': 1000000000,
            'δισ.': 1000000000, 'δις': 1000000000,
            'τρισεκατομμύρια': 1000000000000,
            'τρισ.': 1000000000000, 'τρις': 1000000000000
        }
    },
    'ITA': {
        'prefix_unary_operators': {
            'radice quadrata di': 'sqrt',
            'logaritmo di': 'log'
        },
        'postfix_unary_operators': {
            'al quadrato': '^ 2',
            'al cubo': '^ 3'
        },
        'binary_operators': {
            'più': '+',
            'diviso': '/',
            'meno': '-',
            'per': '*',
            'al quadrato': '^ 2',
            'cubetti': '^ 3',
            'alla potenza di': '^'
        },
        'numbers': {
            'zero': 0,
            'uno': 1,
            'due': 2,
            'tre': 3,
            'quattro': 4,
            'cinque': 5,
            'sei': 6,
            'sette': 7,
            'otto': 8,
            'nove': 9,
            'dieci': 10,
            'undici': 11,
            'dodici': 12,
            'tredici': 13,
            'quattordici': 14,
            'quindici': 15,
            'sedici': 16,
            'diciassette': 17,
            'diciotto': 18,
            'diciannove': 19,
            'venti': 20,
            'trenta': 30,
            'quaranta': 40,
            'cinquanta': 50,
            'sessanta': 60,
            'settanta': 70,
            'ottanta': 80,
            'novanta': 90
        },
        'scales': {
            'centinaia': 100,
            'migliaia': 1000,
            'milioni': 1000000,
            'miliardi': 1000000000,
            'bilioni': 1000000000000
        }
    },
    'MAR': {
        'prefix_unary_operators': {
            'वर्गमूल': 'sqrt',
            'लॉगरिथम': 'log'
        },
        'postfix_unary_operators': {
            'वर्ग': '^ 2',
            'घन': '^ 3'
        },
        'binary_operators': {
            'बेरीज': '+',
            'भागाकार': '/',
            'वजाबाकी': '-',
            'गुणाकार': '*',
            '(संख्या)वर्ग': '^ 2',
            'छोटे': '^ 3',
            'गुण्या करण्यासाठी': '^'
        },
        'numbers': {
            'शून्य': 0,
            'एक': 1,
            'दोन': 2,
            'तीन': 3,
            'चार': 4,
            'पाच': 5,
            'सहा': 6,
            'सात': 7,
            'आठ': 8,
            'नऊ': 9,
            'दहा': 10,
            'अकरा': 11,
            'बारा': 12,
            'तेरा': 13,
            'चौदा': 14,
            'पंधरा': 15,
            'सोळा': 16,
            'सतरा': 17,
            'अठरा': 18,
            'एकोणीस': 19,
            'वीस': 20,
            'तीस': 30,
            'चाळीस': 40,
            'पन्नास': 50,
            'साठ': 60,
            'सत्तर': 70,
            'ऐंशी': 80,
            'नव्वद': 90,
            'शंभर': 100
        },
        'scales': {
            'शंभर': 100,
            'हजार': 1000,
            'दशलक्ष': 1000000,
            'अब्ज': 1000000000,
            'खर्व': 1000000000000
        }
    },
    'RUS': {
        'prefix_unary_operators': {
            'квадратный корень из': 'sqrt',
            'корень из': 'sqrt',
            'логарифм': 'log'
        },
        'postfix_unary_operators': {
            'в квадрате': '^ 2',
            'в кубе': '^ 3'
        },
        'binary_operators': {
            'плюс': '+',
            'разделить': '/',
            'деленное на': '/',
            'делить на': '/',
            'минус': '-',
            'вычесть': '-',
            'отнять': '-',
            'умножить': '*',
            'умноженное на': '*',
            'умножить на': '*',
            'квадрат': '^ 2',
            'в квадрате': '^ 2',
            'возведенный в куб': '^ 3',
            'степень': '^'
        },
        'numbers': {
            'ноль': 0,
            'один': 1,
            'два': 2,
            'три': 3,
            'четыре': 4,
            'пять': 5,
            'шесть': 6,
            'семь': 7,
            'восемь': 8,
            'девять': 9,
            'десять': 10,
            'одинадцать': 11,
            'двенадцать': 12,
            'тринадцать': 13,
            'четырнадцать': 14,
            'пятнадцать': 15,
            'шестнадцать': 16,
            'семнадцать': 17,
            'восемнадцать': 18,
            'девятнадцать': 19,
            'двадцать': 20,
            'тридцать': 30,
            'сорок': 40,
            'пятьдесят': 50,
            'шестьдесят': 60,
            'семьдесят': 70,
            'восемьдесят': 80,
            'девяносто': 90
        },
        'scales': {
            'сто': 100,
            'тысяч': 1000,
            'миллион': 1000000,
            'миллиард': 1000000000,
            'триллион': 1000000000000
        }
    },
    'POR': {
        'prefix_unary_operators': {
            'raiz quadrada de': 'sqrt',
            'logaritmo de': 'log'
        },
        'postfix_unary_operators': {
            'ao quadrado': '^ 2',
            'ao cubo': '^ 3',
        },
        'binary_operators': {
            'mais': '+',
            'dividido por': '/',
            'menos': '-',
            'vezes': '*',
            'elevado à potência de': '^'
        },
        'numbers': {
            'zero': 0,
            'um': 1,
            'dois': 2,
            'três': 3,
            'quatro': 4,
            'cinco': 5,
            'seis': 6,
            'sete': 7,
            'oito': 8,
            'nove': 9,
            'dez': 10,
            'onze': 11,
            'doze': 12,
            'treze': 13,
            'quatorze': 14,
            'catorze': 14,
            'quinze': 15,
            'dezesseis': 16,
            'dezessete': 17,
            'dezoito': 18,
            'dezenove': 19,
            'vinte': 20,
            'trinta': 30,
            'quarenta': 40,
            'cinquenta': 50,
            'sessenta': 60,
            'setenta': 70,
            'oitenta': 80,
            'noventa': 90
        },
        'scales': {
            'cem': 100,
            'mil': 1000,
            'milhão': 1000000,
            'bilhão': 1000000000,
            'trilhão': 1000000000000
        }
    },
    'UKR': {
        'prefix_unary_operators': {
            'квадратний корінь з': 'sqrt',
            'корінь з': 'sqrt',
            'логарифм': 'log'
        },
        'postfix_unary_operators': {
            'у квадраті': '^ 2',
            'у кубі': '^ 3'
        },
        'binary_operators': {
            'додати': '+',
            'розділити': '/',
            'поділити на': '/',
            'ділити на': '/',
            'мінус': '-',
            'відняти': '-',
            'відняти від': '-',
            'помножити': '*',
            'помножене на': '*',
            'помножити на': '*',
            'квадрат': '^ 2',
            'у квадраті': '^ 2',
            'зведений у куб': '^ 3',
            'ступінь': '^'
        },
        'numbers': {
            'нуль': 0,
            'один': 1,
            'два': 2,
            'три': 3,
            'чотири': 4,
            'п’ять': 5,
            'шість': 6,
            'сім': 7,
            'вісім': 8,
            'дев’ять': 9,
            'десять': 10,
            'одинадцять': 11,
            'дванадцять': 12,
            'тринадцять': 13,
            'чотирнадцять': 14,
            'п’ятнадцять': 15,
            'шістнадцять': 16,
            'сімнадцять': 17,
            'вісімнадцять': 18,
            'дев’ятнадцять': 19,
            'двадцять': 20,
            'тридцять': 30,
            'сорок': 40,
            'п’ятдесят': 50,
            'шістдесят': 60,
            'сімдесят': 70,
            'вісімдесят': 80,
            'дев’яносто': 90
        },
        'scales': {
            'сто': 100,
            'тисяча': 1000,
            'мільйон': 1000000,
            'мільярд': 1000000000,
            'трильйон': 1000000000000
        }
    },
    'ESP': {
        'prefix_unary_operators': {
            'raiz cuadrada de': 'sqrt',
            'logaritmo de': 'log'
        },
        'postfix_unary_operators': {
            'al cuadrado': '^ 2',
            'al cubo': '^ 3',
        },
        'binary_operators': {
            'más': '+',
            'entre': '/',
            'menos': '-',
            'por': '*',
            'veces': '*',
            'elevado al': '^',
            'punto': '.'
        },
        'numbers': {
            'cero': 0,
            'uno': 1,
            'dos': 2,
            'tres': 3,
            'cuatro': 4,
            'cinco': 5,
            'seis': 6,
            'siete': 7,
            'ocho': 8,
            'nueve': 9,
            'diez': 10,
            'once': 11,
            'doce': 12,
            'trece': 13,
            'catorce': 14,
            'quince': 15,
            'dieciséis': 16,
            'diecisiete': 17,
            'dieciocho': 18,
            'diecinueve': 19,
            'veinte': 20,
            'treinta': 30,
            'cuarenta': 40,
            'cincuenta': 50,
            'sesenta': 60,
            'setenta': 70,
            'ochenta': 80,
            'noventa': 90
        },
        'scales': {
            'cien': 100,
            'mil': 1000,
            'millon': 1000000,
            'billon': 1000000000,
            'trillon': 1000000000000
        }
    },
    'THA': {
        'prefix_unary_operators': {
            'สแควรูท': 'sqrt',
            'ลอการิทึม': 'log'
        },
        'postfix_unary_operators': {
            'ยกกำลังสอง': '^ 2',
            'ยกกำลังสาม': '^ 3'
        },
        'binary_operators': {
            'บวก': '+',
            'หาร': '/',
            'ลบ': '-',
            'คูณ': '*',
            'ยกกำลัง': '^'
        },
        'numbers': {
            'ศูนย์': 0,
            'หนึ่ง': 1,
            'สอง': 2,
            'สาม': 3,
            'สี่': 4,
            'ห้า': 5,
            'หก': 6,
            'เจ็ด': 7,
            'แปด': 8,
            'เก้า': 9,
            'สิบ': 10,
            'สิบเอ็ด': 11,
            'สิบสอง': 12,
            'สิบสาม': 13,
            'สิบสี่': 14,
            'สิบห้า': 15,
            'สิบหก': 16,
            'สิบเจ็ด': 17,
            'สิบแปด': 18,
            'สิบเก้า': 19,
            'ยี่สิบ': 20,
            'สามสิบ': 30,
            'สี่สิบ': 40,
            'ห้าสิบ': 50,
            'หกสิบ': 60,
            'เจ็ดสิบ': 70,
            'แปดสิบ': 80,
            'เก้าสิบ': 90
        },
        'scales': {
            'ร้อย': 100,
            'พัน': 1000,
            'หมื่น': 10000,
            'แสน': 100000,
            'ล้าน': 1000000,
            'พันล้าน': 1000000000,
            'ล้านล้าน': 1000000000000
        }
    },
    'CHI': {
        'prefix_unary_operators': {
            '平方根': 'sqrt',
            '开方': 'sqrt',
            '负': 'neg',
            '对数': 'log'
        },
        'postfix_unary_operators': {
            '平方': '^ 2',
            '立方': '^ 3',
            '的平方': '^ 2',
            '的立方': '^ 3'
        },
        'binary_operators': {
            '加': '+',
            '加上': '+',
            '加法': '+',
            '除以': '/',
            '除': '/',
            '除法': '/',
            '减': '-',
            '减去': '-',
            '减法': '-',
            '乘': '*',
            '乘以': '*',
            '乘法': '*',
            '乘上': '*',
            '倍': '*',
            '的': '^',
            '次方': '^',
            '次幂': '^'
        },
        'numbers': {
            '零': 0,
            '一': 1,
            '二': 2,
            '三': 3,
            '四': 4,
            '五': 5,
            '六': 6,
            '七': 7,
            '八': 8,
            '九': 9,
            '十': 10,
            '十一': 11,
            '十二': 12,
            '十三': 13,
            '十四': 14,
            '十五': 15,
            '十六': 16,
            '十七': 17,
            '十八': 18,
            '十九': 19,
            '二十': 20,
            '三十': 30,
            '四十': 40,
            '五十': 50,
            '六十': 60,
            '七十': 70,
            '八十': 80,
            '九十': 90,
            '壹': 1,
            '贰': 2,
            '两': 2,
            '叁': 3,
            '肆': 4,
            '伍': 5,
            '陆': 6,
            '柒': 7,
            '捌': 8,
            '玖': 9,
            '拾': 10
        },
        'scales': {
            '十': 10,
            '百': 100,
            '千': 1000,
            '万': 10000,
            '十万': 100000,
            '百万': 1000000,
            '千万': 10000000,
            '亿': 100000000,
            '十亿': 1000000000,
            '百亿': 10000000000,
            '千亿': 100000000000,
            '万亿': 1000000000000
        }
    },
    'JPN': {
        'prefix_unary_operators': {
            '平方根': 'sqrt',
            'ルート': 'sqrt',
            '負の': 'neg'
        },
        'postfix_unary_operators': {
            '二乗': '^ 2',
            '三乗': '^ 3',
            'の二乗': '^ 2',
            'の三乗': '^ 3'
        },
        'binary_operators': {
            'たす': '+',
            'プラス': '+',
            'わる': '/',
            '割る': '/',
            'ひく': '-',
            'マイナス': '-',
            'かける': '*',
            '掛ける': '*',
            '乗': '^',
            'の': '^'
        },
        'numbers': {
            'ゼロ': 0, '零': 0,
            '一': 1, 'いち': 1,
            '二': 2, 'に': 2,
            '三': 3, 'さん': 3,
            '四': 4, 'し': 4, 'よん': 4,
            '五': 5, 'ご': 5,
            '六': 6, 'ろく': 6,
            '七': 7, 'しち': 7, 'なな': 7,
            '八': 8, 'はち': 8,
            '九': 9, 'きゅう': 9, 'く': 9,
            '十': 10, 'じゅう': 10,
            '十一': 11, 'じゅういち': 11,
            '十二': 12, 'じゅうに': 12,
            '十三': 13, 'じゅうさん': 13,
            '十四': 14, 'じゅうし': 14,
            '十五': 15, 'じゅうご': 15,
            '十六': 16, 'じゅうろく': 16,
            '十七': 17, 'じゅうしち': 17,
            '十八': 18, 'じゅうはち': 18,
            '十九': 19, 'じゅうきゅう': 19,
            '二十': 20, 'にじゅう': 20,
            '三十': 30, 'さんじゅう': 30,
            '四十': 40, 'よんじゅう': 40,
            '五十': 50, 'ごじゅう': 50,
            '六十': 60, 'ろくじゅう': 60,
            '七十': 70, 'ななじゅう': 70,
            '八十': 80, 'はちじゅう': 80,
            '九十': 90, 'きゅうじゅう': 90
        },
        'scales': {
            '百': 100, 'ひゃく': 100,
            '千': 1000, 'せん': 1000,
            '万': 10000, 'まん': 10000,
            '十万': 100000,
            '百万': 1000000,
            '千万': 10000000,
            '億': 100000000, 'おく': 100000000,
            '兆': 1000000000000, 'ちょう': 1000000000000
        }
    },
    'KOR': {
        'prefix_unary_operators': {
            '제곱근': 'sqrt',
            '루트': 'sqrt'
        },
        'postfix_unary_operators': {
            '제곱': '^ 2',
            '세제곱': '^ 3'
        },
        'binary_operators': {
            '더하기': '+',
            '플러스': '+',
            '나누기': '/',
            '빼기': '-',
            '마이너스': '-',
            '곱하기': '*',
            '곱': '*',
            '의': '^',
            '승': '^'
        },
        'numbers': {
            '영': 0, '공': 0,
            '일': 1, '하나': 1,
            '이': 2, '둘': 2,
            '삼': 3, '셋': 3,
            '사': 4, '넷': 4,
            '오': 5, '다섯': 5,
            '육': 6, '여섯': 6,
            '칠': 7, '일곱': 7,
            '팔': 8, '여덟': 8,
            '구': 9, '아홉': 9,
            '십': 10, '열': 10,
            '십일': 11,
            '십이': 12,
            '십삼': 13,
            '십사': 14,
            '십오': 15,
            '십육': 16,
            '십칠': 17,
            '십팔': 18,
            '십구': 19,
            '이십': 20, '스물': 20,
            '삼십': 30, '서른': 30,
            '사십': 40, '마흔': 40,
            '오십': 50, '쉰': 50,
            '육십': 60, '예순': 60,
            '칠십': 70, '일흔': 70,
            '팔십': 80, '여든': 80,
            '구십': 90, '아흔': 90
        },
        'scales': {
            '백': 100,
            '천': 1000,
            '만': 10000,
            '십만': 100000,
            '백만': 1000000,
            '천만': 10000000,
            '억': 100000000,
            '조': 1000000000000
        }
    },
    'VIE': {
        'prefix_unary_operators': {
            'căn bậc hai': 'sqrt',
            'căn': 'sqrt'
        },
        'postfix_unary_operators': {
            'bình phương': '^ 2',
            'lập phương': '^ 3'
        },
        'binary_operators': {
            'cộng': '+',
            'thêm': '+',
            'chia': '/',
            'chia cho': '/',
            'trừ': '-',
            'bớt': '-',
            'nhân': '*',
            'lũy thừa': '^'
        },
        'numbers': {
            'không': 0,
            'một': 1, 'mốt': 1,
            'hai': 2,
            'ba': 3,
            'bốn': 4, 'tư': 4,
            'năm': 5, 'lăm': 5,
            'sáu': 6,
            'bảy': 7, 'bẩy': 7,
            'tám': 8,
            'chín': 9,
            'mười': 10,
            'mười một': 11,
            'mười hai': 12,
            'mười ba': 13,
            'mười bốn': 14,
            'mười lăm': 15,
            'mười sáu': 16,
            'mười bảy': 17,
            'mười tám': 18,
            'mười chín': 19,
            'hai mươi': 20,
            'ba mươi': 30,
            'bốn mươi': 40,
            'năm mươi': 50,
            'sáu mươi': 60,
            'bảy mươi': 70,
            'tám mươi': 80,
            'chín mươi': 90
        },
        'scales': {
            'trăm': 100,
            'nghìn': 1000, 'ngàn': 1000,
            'triệu': 1000000,
            'tỷ': 1000000000,
            'nghìn tỷ': 1000000000000
        }
    },
    'HIN': {
        'prefix_unary_operators': {
            'वर्गमूल': 'sqrt',
            'ऋणात्मक': 'neg'
        },
        'postfix_unary_operators': {
            'वर्ग': '^ 2',
            'घन': '^ 3'
        },
        'binary_operators': {
            'जोड़': '+',
            'प्लस': '+',
            'भाग': '/',
            'विभाजित': '/',
            'घटा': '-',
            'माइनस': '-',
            'गुणा': '*',
            'घात': '^'
        },
        'numbers': {
            'शून्य': 0,
            'एक': 1,
            'दो': 2,
            'तीन': 3,
            'चार': 4,
            'पाँच': 5, 'पांच': 5,
            'छह': 6, 'छः': 6,
            'सात': 7,
            'आठ': 8,
            'नौ': 9,
            'दस': 10,
            'ग्यारह': 11,
            'बारह': 12,
            'तेरह': 13,
            'चौदह': 14,
            'पंद्रह': 15,
            'सोलह': 16,
            'सत्रह': 17,
            'अठारह': 18,
            'उन्नीस': 19,
            'बीस': 20,
            'तीस': 30,
            'चालीस': 40,
            'पचास': 50,
            'साठ': 60,
            'सत्तर': 70,
            'अस्सी': 80,
            'नब्बे': 90
        },
        'scales': {
            'सौ': 100,
            'हजार': 1000,
            'लाख': 100000,
            'दस लाख': 1000000,
            'करोड़': 10000000,
            'अरब': 1000000000,
            'खरब': 100000000000
        }
    },
    'ARA': {
        'prefix_unary_operators': {
            'الجذر التربيعي': 'sqrt',
            'جذر': 'sqrt',
            'سالب': 'neg'
        },
        'postfix_unary_operators': {
            'تربيع': '^ 2',
            'مكعب': '^ 3',
            'مربع': '^ 2'
        },
        'binary_operators': {
            'زائد': '+',
            'جمع': '+',
            'مقسوم على': '/',
            'قسمة': '/',
            'ناقص': '-',
            'طرح': '-',
            'ضرب': '*',
            'في': '*',
            'أس': '^',
            'قوة': '^'
        },
        'numbers': {
            'صفر': 0,
            'واحد': 1,
            'اثنان': 2, 'اثنين': 2,
            'ثلاثة': 3,
            'أربعة': 4,
            'خمسة': 5,
            'ستة': 6,
            'سبعة': 7,
            'ثمانية': 8,
            'تسعة': 9,
            'عشرة': 10,
            'أحد عشر': 11,
            'اثنا عشر': 12,
            'ثلاثة عشر': 13,
            'أربعة عشر': 14,
            'خمسة عشر': 15,
            'ستة عشر': 16,
            'سبعة عشر': 17,
            'ثمانية عشر': 18,
            'تسعة عشر': 19,
            'عشرون': 20,
            'ثلاثون': 30,
            'أربعون': 40,
            'خمسون': 50,
            'ستون': 60,
            'سبعون': 70,
            'ثمانون': 80,
            'تسعون': 90
        },
        'scales': {
            'مئة': 100, 'مائة': 100,
            'ألف': 1000,
            'مليون': 1000000,
            'مليار': 1000000000,
            'تريليون': 1000000000000
        }
    },
    'HEB': {
        'prefix_unary_operators': {
            'שורש ריבועי': 'sqrt',
            'שורש': 'sqrt',
            'שלילי': 'neg'
        },
        'postfix_unary_operators': {
            'בריבוע': '^ 2',
            'בחזקת שלוש': '^ 3',
            'בשלישית': '^ 3'
        },
        'binary_operators': {
            'פלוס': '+',
            'ועוד': '+',
            'חלקי': '/',
            'חילוק': '/',
            'מינוס': '-',
            'פחות': '-',
            'כפול': '*',
            'פעמים': '*',
            'בחזקת': '^',
            'חזקה': '^'
        },
        'numbers': {
            'אפס': 0,
            'אחד': 1, 'אחת': 1,
            'שניים': 2, 'שתיים': 2,
            'שלושה': 3, 'שלוש': 3,
            'אַרבעה': 4, 'ארבע': 4,
            'חמישה': 5, 'חמש': 5,
            'שישה': 6, 'שש': 6,
            'שבעה': 7, 'שבע': 7,
            'שמונה': 8, 'שמונה': 8,
            'תשעה': 9, 'תשע': 9,
            'עשרה': 10, 'עשר': 10,
            'אחד עשר': 11,
            'שנים עשר': 12,
            'שלושה עשר': 13,
            'ארבעה עשר': 14,
            'חמישה עשר': 15,
            'שישה עשר': 16,
            'שבעה עשר': 17,
            'שמונה עשר': 18,
            'תשעה עשר': 19,
            'עשרים': 20,
            'שלושים': 30,
            'ארבעים': 40,
            'חמישים': 50,
            'שישים': 60,
            'שבעים': 70,
            'שמונים': 80,
            'תשעים': 90
        },
        'scales': {
            'מאה': 100,
            'אלף': 1000,
            'מיליון': 1000000,
            'מיליארד': 1000000000,
            'טריליון': 1000000000000
        }
    },
    'TUR': {
        'prefix_unary_operators': {
            'karekök': 'sqrt',
            'negatif': 'neg'
        },
        'postfix_unary_operators': {
            'kare': '^ 2',
            'küp': '^ 3'
        },
        'binary_operators': {
            'artı': '+',
            'toplama': '+',
            'bölü': '/',
            'bölme': '/',
            'eksi': '-',
            'çıkarma': '-',
            'çarpı': '*',
            'çarpma': '*',
            'üzeri': '^',
            'kuvvet': '^'
        },
        'numbers': {
            'sıfır': 0,
            'bir': 1,
            'iki': 2,
            'üç': 3,
            'dört': 4,
            'beş': 5,
            'altı': 6,
            'yedi': 7,
            'sekiz': 8,
            'dokuz': 9,
            'on': 10,
            'on bir': 11,
            'on iki': 12,
            'on üç': 13,
            'on dört': 14,
            'on beş': 15,
            'on altı': 16,
            'on yedi': 17,
            'on sekiz': 18,
            'on dokuz': 19,
            'yirmi': 20,
            'otuz': 30,
            'kırk': 40,
            'elli': 50,
            'altmış': 60,
            'yetmiş': 70,
            'seksen': 80,
            'doksan': 90
        },
        'scales': {
            'yüz': 100,
            'bin': 1000,
            'milyon': 1000000,
            'milyar': 1000000000,
            'trilyon': 1000000000000
        }
    },
    'SWE': {
        'prefix_unary_operators': {
            'kvadratroten av': 'sqrt',
            'roten ur': 'sqrt'
        },
        'postfix_unary_operators': {
            'i kvadrat': '^ 2',
            'i kubik': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'delat med': '/',
            'minus': '-',
            'gånger': '*',
            'multiplicerat med': '*',
            'upphöjt till': '^'
        },
        'numbers': {
            'noll': 0,
            'ett': 1, 'en': 1,
            'två': 2,
            'tre': 3,
            'fyra': 4,
            'fem': 5,
            'sex': 6,
            'sju': 7,
            'åtta': 8,
            'nio': 9,
            'tio': 10,
            'elva': 11,
            'tolv': 12,
            'tretton': 13,
            'fjorton': 14,
            'femton': 15,
            'sexton': 16,
            'sjutton': 17,
            'arton': 18,
            'nitton': 19,
            'tjugo': 20,
            'trettio': 30,
            'fyrtio': 40,
            'femtio': 50,
            'sextio': 60,
            'sjuttio': 70,
            'åttio': 80,
            'nittio': 90
        },
        'scales': {
            'hundra': 100,
            'tusen': 1000,
            'miljon': 1000000,
            'miljard': 1000000000,
            'biljon': 1000000000000
        }
    },
    'NOR': {
        'prefix_unary_operators': {
            'kvadratrot av': 'sqrt',
            'rot av': 'sqrt'
        },
        'postfix_unary_operators': {
            'i andre': '^ 2',
            'i tredje': '^ 3'
        },
        'binary_operators': {
            'pluss': '+',
            'delt på': '/',
            'minus': '-',
            'ganger': '*',
            'multiplisert med': '*',
            'opphøyd i': '^'
        },
        'numbers': {
            'null': 0,
            'en': 1, 'ett': 1,
            'to': 2,
            'tre': 3,
            'fire': 4,
            'fem': 5,
            'seks': 6,
            'sju': 7, 'syv': 7,
            'åtte': 8,
            'ni': 9,
            'ti': 10,
            'elleve': 11,
            'tolv': 12,
            'tretten': 13,
            'fjorten': 14,
            'femten': 15,
            'seksten': 16,
            'sytten': 17,
            'atten': 18,
            'nitten': 19,
            'tjue': 20,
            'tretti': 30,
            'førti': 40,
            'femti': 50,
            'seksti': 60,
            'sytti': 70,
            'åtti': 80,
            'nitti': 90
        },
        'scales': {
            'hundre': 100,
            'tusen': 1000,
            'million': 1000000,
            'milliard': 1000000000,
            'billion': 1000000000000
        }
    },
    'DAN': {
        'prefix_unary_operators': {
            'kvadratrod af': 'sqrt',
            'rod af': 'sqrt'
        },
        'postfix_unary_operators': {
            'i anden': '^ 2',
            'i tredje': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'divideret med': '/',
            'minus': '-',
            'gange': '*',
            'multipliceret med': '*',
            'opløftet i': '^'
        },
        'numbers': {
            'nul': 0,
            'en': 1, 'et': 1,
            'to': 2,
            'tre': 3,
            'fire': 4,
            'fem': 5,
            'seks': 6,
            'syv': 7,
            'otte': 8,
            'ni': 9,
            'ti': 10,
            'elleve': 11,
            'tolv': 12,
            'tretten': 13,
            'fjorten': 14,
            'femten': 15,
            'seksten': 16,
            'sytten': 17,
            'atten': 18,
            'nitten': 19,
            'tyve': 20,
            'tredive': 30,
            'fyrre': 40, 'fyrretyve': 40,
            'halvtreds': 50,
            'tres': 60,
            'halvfjerds': 70,
            'firs': 80,
            'halvfems': 90
        },
        'scales': {
            'hundrede': 100,
            'tusind': 1000,
            'million': 1000000,
            'milliard': 1000000000,
            'billion': 1000000000000
        }
    },
    'FIN': {
        'prefix_unary_operators': {
            'neliöjuuri': 'sqrt',
            'juuri': 'sqrt'
        },
        'postfix_unary_operators': {
            'toiseen': '^ 2',
            'kolmanteen': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'jaettuna': '/',
            'miinus': '-',
            'kertaa': '*',
            'kerrottuna': '*',
            'potenssiin': '^'
        },
        'numbers': {
            'nolla': 0,
            'yksi': 1,
            'kaksi': 2,
            'kolme': 3,
            'neljä': 4,
            'viisi': 5,
            'kuusi': 6,
            'seitsemän': 7,
            'kahdeksan': 8,
            'yhdeksän': 9,
            'kymmenen': 10,
            'yksitoista': 11,
            'kaksitoista': 12,
            'kolmetoista': 13,
            'neljätoista': 14,
            'viisitoista': 15,
            'kuusitoista': 16,
            'seitsemäntoista': 17,
            'kahdeksantoista': 18,
            'yhdeksäntoista': 19,
            'kaksikymmentä': 20,
            'kolmekymmentä': 30,
            'neljäkymmentä': 40,
            'viisikymmentä': 50,
            'kuusikymmentä': 60,
            'seitsemänkymmentä': 70,
            'kahdeksankymmentä': 80,
            'yhdeksänkymmentä': 90
        },
        'scales': {
            'sata': 100,
            'tuhat': 1000,
            'miljoona': 1000000,
            'miljardi': 1000000000,
            'biljoona': 1000000000000
        }
    },
    'POL': {
        'prefix_unary_operators': {
            'pierwiastek kwadratowy z': 'sqrt',
            'pierwiastek z': 'sqrt'
        },
        'postfix_unary_operators': {
            'do kwadratu': '^ 2',
            'do sześcianu': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'podzielone przez': '/',
            'dzielone przez': '/',
            'minus': '-',
            'razy': '*',
            'pomnożone przez': '*',
            'do potęgi': '^'
        },
        'numbers': {
            'zero': 0,
            'jeden': 1, 'jedna': 1,
            'dwa': 2, 'dwie': 2,
            'trzy': 3,
            'cztery': 4,
            'pięć': 5,
            'sześć': 6,
            'siedem': 7,
            'osiem': 8,
            'dziewięć': 9,
            'dziesięć': 10,
            'jedenaście': 11,
            'dwanaście': 12,
            'trzynaście': 13,
            'czternaście': 14,
            'piętnaście': 15,
            'szesnaście': 16,
            'siedemnaście': 17,
            'osiemnaście': 18,
            'dziewiętnaście': 19,
            'dwadzieścia': 20,
            'trzydzieści': 30,
            'czterdzieści': 40,
            'pięćdziesiąt': 50,
            'sześćdziesiąt': 60,
            'siedemdziesiąt': 70,
            'osiemdziesiąt': 80,
            'dziewięćdziesiąt': 90
        },
        'scales': {
            'sto': 100,
            'tysiąc': 1000,
            'milion': 1000000,
            'miliard': 1000000000,
            'bilion': 1000000000000
        }
    },
    'CZE': {
        'prefix_unary_operators': {
            'druhá odmocnina': 'sqrt',
            'odmocnina': 'sqrt'
        },
        'postfix_unary_operators': {
            'na druhou': '^ 2',
            'na třetí': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'děleno': '/',
            'minus': '-',
            'krát': '*',
            'násobeno': '*',
            'na': '^'
        },
        'numbers': {
            'nula': 0,
            'jeden': 1, 'jedna': 1, 'jedno': 1,
            'dva': 2, 'dvě': 2,
            'tři': 3,
            'čtyři': 4,
            'pět': 5,
            'šest': 6,
            'sedm': 7,
            'osm': 8,
            'devět': 9,
            'deset': 10,
            'jedenáct': 11,
            'dvanáct': 12,
            'třináct': 13,
            'čtrnáct': 14,
            'patnáct': 15,
            'šestnáct': 16,
            'sedmnáct': 17,
            'osmnáct': 18,
            'devatenáct': 19,
            'dvacet': 20,
            'třicet': 30,
            'čtyřicet': 40,
            'padesát': 50,
            'šedesát': 60,
            'sedmdesát': 70,
            'osmdesát': 80,
            'devadesát': 90
        },
        'scales': {
            'sto': 100,
            'tisíc': 1000,
            'milion': 1000000,
            'miliarda': 1000000000,
            'bilion': 1000000000000
        }
    },
    'HUN': {
        'prefix_unary_operators': {
            'négyzetgyök': 'sqrt',
            'gyök': 'sqrt'
        },
        'postfix_unary_operators': {
            'négyzet': '^ 2',
            'köb': '^ 3'
        },
        'binary_operators': {
            'plusz': '+',
            'osztva': '/',
            'mínusz': '-',
            'szorozva': '*',
            'szor': '*',
            'hatványon': '^'
        },
        'numbers': {
            'nulla': 0,
            'egy': 1,
            'kettő': 2, 'két': 2,
            'három': 3,
            'négy': 4,
            'öt': 5,
            'hat': 6,
            'hét': 7,
            'nyolc': 8,
            'kilenc': 9,
            'tíz': 10,
            'tizenegy': 11,
            'tizenkettő': 12,
            'tizenhárom': 13,
            'tizennégy': 14,
            'tizenöt': 15,
            'tizenhat': 16,
            'tizenhét': 17,
            'tizennyolc': 18,
            'tizenkilenc': 19,
            'húsz': 20,
            'harminc': 30,
            'negyven': 40,
            'ötven': 50,
            'hatvan': 60,
            'hetven': 70,
            'nyolcvan': 80,
            'kilencven': 90
        },
        'scales': {
            'száz': 100,
            'ezer': 1000,
            'millió': 1000000,
            'milliárd': 1000000000,
            'billió': 1000000000000
        }
    },
    'RON': {
        'prefix_unary_operators': {
            'radical din': 'sqrt',
            'rădăcină pătrată din': 'sqrt'
        },
        'postfix_unary_operators': {
            'la pătrat': '^ 2',
            'la cub': '^ 3'
        },
        'binary_operators': {
            'plus': '+',
            'împărțit la': '/',
            'minus': '-',
            'înmulțit cu': '*',
            'ori': '*',
            'la puterea': '^'
        },
        'numbers': {
            'zero': 0,
            'unu': 1, 'una': 1,
            'doi': 2, 'două': 2,
            'trei': 3,
            'patru': 4,
            'cinci': 5,
            'șase': 6,
            'șapte': 7,
            'opt': 8,
            'nouă': 9,
            'zece': 10,
            'unsprezece': 11,
            'doisprezece': 12,
            'treisprezece': 13,
            'paisprezece': 14,
            'cincisprezece': 15,
            'șaisprezece': 16,
            'șaptesprezece': 17,
            'optsprezece': 18,
            'nouăsprezece': 19,
            'douăzeci': 20,
            'treizeci': 30,
            'patruzeci': 40,
            'cincizeci': 50,
            'șaizeci': 60,
            'șaptezeci': 70,
            'optzeci': 80,
            'nouăzeci': 90
        },
        'scales': {
            'sută': 100,
            'mie': 1000,
            'milion': 1000000,
            'miliard': 1000000000,
            'trilion': 1000000000000
        }
    }
}


LANGUAGE_CODES = list(MATH_WORDS.keys())


CONSTANTS = {
    'pi': 3.141693,
    'π': 3.141693,
    'e': 2.718281
}


UNARY_FUNCTIONS = {
    'sqrt': math.sqrt,

    # Most people assume a log of base 10 when a base is not specified
    'log': math.log10,

    # Unary minus function for negative numbers
    'neg': lambda x: -x
}


[docs] class InvalidLanguageCodeException(Exception): """ Exception to be raised when a language code is specified that is not a part of the ISO 639-2 standard, or if the specified language is not yet supported by mathparse. """ pass
[docs] def word_groups_for_language(language_code: str) -> dict[str, dict[str, str]]: """ Return the math word groups for a language code. The language_code should be an ISO 639-2 language code. https://www.loc.gov/standards/iso639-2/php/code_list.php """ if language_code not in LANGUAGE_CODES: message = '{} is not an available language code'.format(language_code) raise InvalidLanguageCodeException(message) return MATH_WORDS[language_code]
[docs] def words_for_language(language_code: str) -> set[str]: """ Return the math words for a language code. The language_code should be an ISO 639-2 language code. https://www.loc.gov/standards/iso639-2/php/code_list.php """ word_groups = word_groups_for_language(language_code) words = set() for group in word_groups: words.update(word_groups[group].keys()) return words