Skip to main content

Build Status

גamla is a performant functional programming library for python which supports async.

Installation

pip install gamla

Debugging anonymous compositions

gamla.compose(x, y, z) produces a new function which doesn't have a proper name. If x raises an exception, it is sometimes hard to figure out where this occurred. To overcome this, set the env variable GAMLA_DEBUG_MODE (to anything) to get more useful exceptions. This is turned on only by flag because it incurs significant overhead so things might get slow.

Mixing asynchronous and synchronous code

Most functions in this lib will work seamlessly with async and regular functions, and allow the developer to focus on the logic instead of deciding where to place an await.

For example:

import asyncio

import gamla


def increment(i):
    return i + 1


async def increment_async(i):
    asyncio.sleep(1)
    return i + 1


async def run():
    mixed_composition = gamla.compose_left(increment, increment_async, increment)
    return await mixed_composition(0)  # returns 3!

Migrating from toolz

The main problems - toolz is slow and does not support async functions.

Why are curried functions and composition in toolz slow?

These functions use an expensive inspect call to look at a function’s arguments, and doing so at each run.

Why does gamla not suffer from this problem?

Two reasons:

  1. It does not have binary signatures on things like map, so it doesn’t need to infer anything (these are higher order functions in gamla).
  2. The gamla.curry function eagerly pays for the signature inspection in advance, and remembers its results for future runs.

Function mapping and common gotchas:

Most functions are drop in replacements. Here are some examples:

  • curried.(filter|map|valmap|itemmap|keymap) -> gamla.$1 (make sure the call is with a single argument)
  • toolz.identity -> gamla.identity
  • toolz.contains -> gamla.contains
  • toolz.lt -> gamla.greater_than
  • toolz.gt -> gamla.less_than
  • toolz.ge -> gamla.less_equals
  • toolz.le -> gamla.greater_equals
  • toolz.filter(None) -> gamla.filter(gamla.identity)
  • toolz.excepts(a, b, c) -> gamla.excepts(a, c, b)
  • toolz.excepts(a, b) -> gamla.excepts(a, gamla.just(None), b) (following the “data-last” currying convention)

Releasing a new version

  1. Create a pypi account.
  2. Download twine and give it your pypi credentials.
  3. Get pypi permissions for the project from its owner.
  4. python setup.py sdist bdist_wheel; twine upload dist/*; rm -rf dist;

How to update gamla documentation after library update

If a new function was added

  1. Go to docs/api.rst and add your function name under the relevant module, with an indentation of 3 spaces. For example:
.. currentmodule:: gamla.functional_generic

.. autosummary::
   old_functions
   .
   .
   .
   my_new_function

If README.md was updated

While in gamla directory:

  1. Install md-to-rst converter: pip install m2r
  2. Convert README.md to README.rst: m2r README.md
  3. Move README.rst to docs/source folder instead of existing one: mv README.rst docs/source

If an existing function was updated

Do nothing. The documentation will update itself.

Release files for gamla 60

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gamla 60
File Size Uploaded
gamla-60.tar.gz 28.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gamla 60
File Interpreter ABI Platform
gamla-60-py3-none-any.whl Python 3 none any Details

Total release size: 384.6 kB

Release files / gamla-60.tar.gz

Download URL gamla-60.tar.gz
Size 28.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4f8a58c7ff8ee0fe68e3eb5895b7d0c1c04bd045259f320ae0cb1db685cd1152
BLAKE2b-256 checksum
How to use checksums
cd8dbaac07b084913c432a18461b5fd83fe1f303687b8db98bb2186ecd773410
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.2

Release files / gamla-60-py3-none-any.whl

Download URL gamla-60-py3-none-any.whl
Size 356.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d77922a6b6afcadfeadab8648bc46112ccb882cdf252c7c8b5f97b7ba0cffe08
BLAKE2b-256 checksum
How to use checksums
cad487a8f43190f2d1effc46d83570ad2da95d3d4d75368a492869741853eb17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0

Release history Release notifications | RSS feed

164

1 release file

163

1 release file

162

1 release file

161

1 release file

160

1 release file

159

1 release file

158

1 release file

157

1 release file

156

1 release file

155

1 release file

154

1 release file

153

1 release file

152

1 release file

151

1 release file

150

1 release file

149

1 release file

148

1 release file

147

1 release file

146

1 release file

145

1 release file

144

1 release file

143

1 release file

142

1 release file

141

1 release file

140

1 release file

139

1 release file

138

1 release file

137

1 release file

136

1 release file

135

1 release file

134

1 release file

133

1 release file

132

1 release file

131

1 release file

130

1 release file

129

1 release file

128

1 release file

127

1 release file

126

1 release file

125

1 release file

124

1 release file

123

1 release file

122

1 release file

121

1 release file

120

1 release file

119

1 release file

118

1 release file

117

1 release file

116

1 release file

115

1 release file

114

1 release file

113

1 release file

112

1 release file

111

1 release file

110

1 release file

109

1 release file

108

1 release file

107

1 release file

106

1 release file

105

1 release file

104

1 release file

103

1 release file

102

1 release file

101

1 release file

100

1 release file

99

1 release file

98

1 release file

97

1 release file

96

1 release file

95

1 release file

94

1 release file

93

1 release file

92

1 release file

91

1 release file

90

1 release file

89

1 release file

88

1 release file

87

1 release file

86

1 release file

85

1 release file

84

1 release file

83

1 release file

82

1 release file

81

1 release file

80

1 release file

79

1 release file

78

1 release file

77

1 release file

76

1 release file

75

1 release file

74

1 release file

73

1 release file

72

2 release files

71

1 release file

70

1 release file

69

1 release file

68

2 release files

67

2 release files

66

2 release files

65

1 release file

64

1 release file

63

2 release files

62

2 release files

61

2 release files

This release

60 This release

2 release files

59

1 release file

58

2 release files

57

2 release files

56

2 release files

55

2 release files

54

1 release file

53

1 release file

52

1 release file

51

2 release files

50

2 release files

49

1 release file

48

2 release files

47

2 release files

46

1 release file

45

1 release file

44

2 release files

43

2 release files

42

2 release files

41

2 release files

40

2 release files

39

2 release files

38

2 release files

37

2 release files

36

2 release files

35

2 release files

34

2 release files

33

2 release files

32

2 release files

31

2 release files

30

2 release files

29

2 release files

28

2 release files

27

2 release files

26

2 release files

25

2 release files

24

2 release files

23

2 release files

22

2 release files

21

2 release files

20

2 release files

19

2 release files

18

2 release files

17

2 release files

16

2 release files

15

2 release files

14

2 release files

13

2 release files

12

2 release files

11

2 release files

10

2 release files

9

2 release files

8

2 release files

7

2 release files

6

2 release files

5

2 release files

4

2 release files

3

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1

2 release files

0.0.78

2 release files

0.0.77

2 release files

0.0.76

2 release files

0.0.75

2 release files

0.0.70

2 release files

0.0.69

2 release files

0.0.68

2 release files

0.0.67

2 release files

0.0.60

2 release files

0.0.59

2 release files

0.0.58

2 release files

0.0.57

2 release files

0.0.56

2 release files

0.0.55

2 release files

0.0.54

2 release files

0.0.53

1 release file

0.0.52

2 release files

0.0.51

2 release files

0.0.50

2 release files

0.0.49

2 release files

0.0.48

2 release files

0.0.47

2 release files

0.0.46

2 release files

0.0.45

2 release files

0.0.44

2 release files

0.0.43

2 release files

0.0.42

2 release files

0.0.39

2 release files

0.0.38

2 release files

0.0.37

2 release files

0.0.36

2 release files

0.0.35

2 release files

0.0.34

2 release files

0.0.33

2 release files

0.0.32

2 release files

0.0.31

2 release files

0.0.30

2 release files

0.0.29

2 release files

0.0.28

2 release files

0.0.27

2 release files

0.0.26

2 release files

0.0.25

2 release files

0.0.24

2 release files

0.0.23

2 release files

0.0.22

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.10

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page