1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

""" 

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