123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """
- String-handling utilities to avoid locale-dependence.
- Used primarily to generate type name aliases.
- """
- # "import string" is costly to import!
- # Construct the translation tables directly
- # "A" = chr(65), "a" = chr(97)
- _all_chars = [chr(_m) for _m in range(256)]
- _ascii_upper = _all_chars[65:65+26]
- _ascii_lower = _all_chars[97:97+26]
- LOWER_TABLE = "".join(_all_chars[:65] + _ascii_lower + _all_chars[65+26:])
- UPPER_TABLE = "".join(_all_chars[:97] + _ascii_upper + _all_chars[97+26:])
- def english_lower(s):
- """ Apply English case rules to convert ASCII strings to all lower case.
- This is an internal utility function to replace calls to str.lower() such
- that we can avoid changing behavior with changing locales. In particular,
- Turkish has distinct dotted and dotless variants of the Latin letter "I" in
- both lowercase and uppercase. Thus, "I".lower() != "i" in a "tr" locale.
- Parameters
- ----------
- s : str
- Returns
- -------
- lowered : str
- Examples
- --------
- >>> from numpy.core.numerictypes import english_lower
- >>> english_lower('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_')
- 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789_'
- >>> english_lower('')
- ''
- """
- lowered = s.translate(LOWER_TABLE)
- return lowered
- def english_upper(s):
- """ Apply English case rules to convert ASCII strings to all upper case.
- This is an internal utility function to replace calls to str.upper() such
- that we can avoid changing behavior with changing locales. In particular,
- Turkish has distinct dotted and dotless variants of the Latin letter "I" in
- both lowercase and uppercase. Thus, "i".upper() != "I" in a "tr" locale.
- Parameters
- ----------
- s : str
- Returns
- -------
- uppered : str
- Examples
- --------
- >>> from numpy.core.numerictypes import english_upper
- >>> english_upper('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_')
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'
- >>> english_upper('')
- ''
- """
- uppered = s.translate(UPPER_TABLE)
- return uppered
- def english_capitalize(s):
- """ Apply English case rules to convert the first character of an ASCII
- string to upper case.
- This is an internal utility function to replace calls to str.capitalize()
- such that we can avoid changing behavior with changing locales.
- Parameters
- ----------
- s : str
- Returns
- -------
- capitalized : str
- Examples
- --------
- >>> from numpy.core.numerictypes import english_capitalize
- >>> english_capitalize('int8')
- 'Int8'
- >>> english_capitalize('Int8')
- 'Int8'
- >>> english_capitalize('')
- ''
- """
- if s:
- return english_upper(s[0]) + s[1:]
- else:
- return s
|