Name generation APIs for to_additive-like attributes #
The data that is required to guess the name of a translation.
- nameDict : Std.HashMap String (List String)
Dictionary used by
guessNameto autogenerate names. This only transforms single name components, unlikeabbreviationDict.Note:
guessNamecapitalizes the output according to the capitalization of the input. In order for this to work, the input should always start with a lower case letter, and the output should always start with an upper case letter. - abbreviationDict : Std.HashMap String String
We need to fix a few abbreviations after applying
nameDict, i.e. replacingZeroLEbyNonneg. This dictionary contains these fixes. The input should contain entries that is inlowerCamelCase(e.g.ltzero; the initial sequence of capital letters should be lower-cased) and the output should be inUpperCamelCase(e.g.LTZero). When applying the dictionary, we lower-case the output if the input was also given in lower-case.
Instances For
A set of strings of names that end in a capital letter.
- If the string contains a lowercase letter, the string should be split between the first occurrence of a lower-case letter followed by an upper-case letter.
- If multiple strings have the same prefix, they should be grouped by prefix
- In this case, the second list should be prefix-free (no element can be a prefix of a later element)
Todo: automate the translation from String to an element in this TreeMap
(but this would require having something similar to the rb_lmap from Lean 3).
Instances For
This function takes a String and splits it into separate parts based on the following naming conventions.
E.g. #eval "InvHMulLEConjugateâ‚‚SMul_ne_top".splitCase yields
["Inv", "HMul", "LE", "Conjugateâ‚‚", "SMul", "_", "ne", "_", "top"].
Replaces characters in s by lower-casing the first characters until a non-upper-case character
is found.
If r starts with an upper-case letter, return s, otherwise return s with the
initial sequence of upper-case letters lower-cased.
Instances For
Decapitalize the first element of a list if s starts with a lower-case letter.
Note that we need to decapitalize multiple characters in some cases,
in examples like HMul or HAdd.
Instances For
Apply the nameDict and decapitalize the output like the input.
E.g.
#eval applyNameDict ["Inv", "HMul", "LE", "Conjugateâ‚‚", "SMul", "_", "ne", "_", "top"]
yields ["Neg", "HAdd", "LE", "Conjugateâ‚‚", "VAdd", "_", "ne", "_", "top"].
Instances For
Helper for fixAbbreviation.
Note: this function has a quadratic number of recursive calls, but is not a performance
bottleneck.
Instances For
Replace substrings according to abbreviationDict, matching the case of the first letter.
Example:
#eval applyNameDict ["Mul", "Support"]
gives the preliminary translation ["Add", "Support"]. Subsequently
#eval fixAbbreviation ["Add", "Support"]
"fixes" this translation and returns Support.
Instances For
Autogenerate additive name. This runs in several steps:
- Split according to capitalisation rule and at
_. - Apply word-by-word translation rules.
- Fix up abbreviations that are not word-by-word translations, like "addComm" or "Nonneg".