Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

""" 

chemreac.util.pyutil 

-------------------- 

 

Utility functions used throughout chemreac. 

 

""" 

 

import numpy as np 

 

 

def monotonic(arr, positive=0, strict=False): 

    """ 

    Check monotonicity of a serie 

 

    Parameters 

    ---------- 

    arr: array_like 

        Array to be checked for monotonicity 

    positive: -1, 0 or 1 (default: 0) 

        -1: negative, 1: positive, 0: either 

    strict: bool (default: False) 

        Disallow zero difference between neighboring instances 

 

    Examples 

    -------- 

    >>> monotonic([0, 0, -1, -2]) 

    True 

    >>> monotonic([0, 0, 1, 2], strict=True) 

    False 

    >>> monotonic([1, 2, 3], -1) 

    False 

 

    Returns 

    ------- 

    bool 

    """ 

    if positive not in (-1, 0, 1): 

        raise ValueError("positive should be either -1, 0 or 1") 

    delta = np.diff(arr) 

    if positive in (0, 1): 

        if strict: 

            if np.all(delta > 0): 

                return True 

        else: 

            if np.all(delta >= 0): 

                return True 

    if positive in (0, -1): 

        if strict: 

            if np.all(delta < 0): 

                return True 

        else: 

            if np.all(delta <= 0): 

                return True 

    return False 

 

 

def set_dict_defaults_inplace(dct, *args): 

    """ 

    Modifies a dictionary in-place by populating key/value pairs present in the 

    default dictionaries which have no key in original dictionary `dct`. Useful 

    for passing along keyword argument dictionaries between functions. 

 

    Parameters 

    ---------- 

    dct: dict 

    *args: dictionaries 

 

    Returns 

    ------- 

    dct: (possibly modified) input dictionary 

 

    Examples 

    -------- 

    >>> d = {1: None} 

    >>> set_dict_defaults_inplace(d, {2: []}) 

    >>> d == {1: None, 2: []} 

    True 

    >>> f = {'a': 1, 'b': 3} 

    >>> g = {'a': 1} 

    >>> set_dict_defaults_inplace(g, {'b': 2, 'a': 7}, {'b': 3}) 

    >>> f == g 

    True 

    >>> h = {42: True, 'b': 3} 

    >>> i = {} 

    >>> set_dict_defaults_inplace(i, {42: True, 'b': 2}, {'b': 3}) 

    >>> h == i 

    True 

    """ 

    ori_dct_keys = dct.keys() 

    new_dct = {} 

    for defaults in args: 

        for k, v in defaults.items(): 

            if k not in ori_dct_keys: 

                new_dct[k] = v 

    dct.update(new_dct)