about summary refs log tree commit diff
path: root/gn3/function_helpers.py
diff options
context:
space:
mode:
authorBonfaceKilz2021-08-16 11:03:09 +0300
committerGitHub2021-08-16 11:03:09 +0300
commit70ed53f03f3d74877d5bc71e49e3a1e65af8b15f (patch)
tree7bfcf487fe81bbb7332b8b67afe80f7e970ce167 /gn3/function_helpers.py
parent95eb105421d7fbe0b0ebf1de2f89a558eecbf0da (diff)
parent3420e378a614f1ecec85f633cd9f202764a54eda (diff)
downloadgenenetwork3-70ed53f03f3d74877d5bc71e49e3a1e65af8b15f.tar.gz
Merge pull request #32 from genenetwork/heatmap_decompose_db_retrieval
Heatmap decompose db retrieval
Diffstat (limited to 'gn3/function_helpers.py')
-rw-r--r--gn3/function_helpers.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/gn3/function_helpers.py b/gn3/function_helpers.py
new file mode 100644
index 0000000..397b2da
--- /dev/null
+++ b/gn3/function_helpers.py
@@ -0,0 +1,36 @@
+"""
+This module will contain helper functions that should assist in maintaining a
+mostly functional way of programming.
+
+It will also contain miscellaneous functions that can be used globally, and thus
+do not fit well in any other module.
+
+FUNCTIONS:
+compose: This function is used to compose multiple functions into a single
+    function. It passes the results of calling one function to the other until
+    all the functions to be composed are called.
+"""
+from functools import reduce
+
+def compose(*functions):
+    """Compose multiple functions into a single function.
+
+    The utility in this function is not specific to this module, and as such,
+    this function can, and probably should, be moved to a more global module.
+
+    DESCRIPTION:
+    Given `cfn = compose(f_1, f_2, ... f_(n-1), f_n )`, calling
+    `cfn(arg_1, arg_2, ..., arg_m)` should call `f_n` with the arguments passed
+    to `cfn` and the results of that should be passed as arguments to `f_(n-1)`
+    and so on until `f_1` is called with the results of the cumulative calls and
+    that is the result of the entire chain of calls.
+
+    PARAMETERS:
+    functions: a variable argument list of function.
+    """
+    def composed_function(*args, **kwargs):
+        return reduce(
+            lambda res, fn: fn(res),
+            reversed(functions[:-1]),
+            functions[-1](*args, **kwargs))
+    return composed_function