https://github.com/ihgazni2/efuntool
function wrap tool from descmat proj
https://github.com/ihgazni2/efuntool
args currying kwargs params thunkify
Last synced: 14 days ago
JSON representation
function wrap tool from descmat proj
- Host: GitHub
- URL: https://github.com/ihgazni2/efuntool
- Owner: ihgazni2
- License: mit
- Created: 2019-08-30T10:43:04.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-04-16T13:15:19.000Z (almost 6 years ago)
- Last Synced: 2025-09-02T11:38:14.676Z (5 months ago)
- Topics: args, currying, kwargs, params, thunkify
- Language: Python
- Size: 119 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.rst
- License: LICENSE
Awesome Lists containing this project
README
.. contents:: Table of Contents
:depth: 5
*efuntool*
-----------
Installation
============
::
$ pip3 install efuntool
Usage
=====
curry
~~~~~
- wrap a function, currify the params, return a new function
- similiar to curry in lodash(javascript)
::
import efuntool.efuntool as eftl
#the original function with 4 params
def sum_of_4(a,b,c,d):
return(a+b+c+d)
#wrap it with eftl.curry(orig_func,params_count)
f = eftl.curry(sum_of_4,4)
#call at any params~combo, just keep the sequence
f(1,2,3,4)
f(1,2,3)(4)
f(1,2)(3,4)
f(1)(2,3)(4)
>>> f(1,2,3,4)
10
>>> f(1,2,3)(4)
10
>>> f(1,2)(3,4)
10
>>> f(1)(2,3)(4)
10
>>> f(1,2)(3)(4)
10
>>> f(1)(2)(3)(4)
10
#step by step , pass params
f(1)
f(2)
f(3)
f(4)
>>> f(1)
>>> f(2)
>>> f(3)
>>> f(4)
10
f(1,2)
f(3)
f(4)
>>> f(1,2)
>>> f(3)
>>> f(4)
10
>>>
f(1,2,3)
f(4)
>>> f(1,2,3)
>>> f(4)
10
>>>
cygnus
~~~~~~
- count how many recursives done
::
import efuntool.efuntool as eftl
>>> egg = eftl.cygnus()
>>> egg.count
0
>>> egg()
>>> egg.count
1
>>> egg(
egg()
)
>>> egg.count
2
>>> egg(
egg(
egg()
)
)
>>> egg.count
3
duck
~~~~
- count how many calls done
::
import efuntool.efuntool as eftl
>>> egg = eftl.duck()
>>> egg.count
0
>>> egg()
>>> egg.count
1
>>> egg()
>>> egg.count
2
>>>
hen
~~~
- record params history
::
import efuntool.efuntool as eftl
>>> egg = eftl.hen()
>>> egg("a")
>>> egg("a")
>>> egg.a
2
>>> egg("b")
>>> egg("b")
>>> egg("b")
>>> egg.b
3
dflt_kwargs
~~~~~~~~~~~
::
counts = dflt_kwargs("counts",100,**kwargs)
optional_arg(dflt,*args)
~~~~~~~~~~~~~~~~~~~~~~~~
::
arg = optional_arg(100)
arg
>>>100
arg = optional_arg(100,250)
arg
>>>250
kwargs_to_property_in_cls_init
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self,**kwargs):
... eftl.self_kwargs(self,['name','age'],['stu','20'],**kwargs)
...
>>> p = tst()
>>> p.name
'stu'
>>> p.age
'20'
>>> p = tst(name='terry')
>>> p.name
'terry'
>>> p.age
'20'
>>>
dictize_args
~~~~~~~~~~~~
::
dictize args
dictize_args(kl,dfltl,*args)
kl = ['k1','k2','k3','k4']
dfltl = [3,4]
dictize_args(kl,dfltl,'a','b')
{
'k1':'a',
'k2':'b',
'k3':3,
'k4':4
}
compatibize_apply_or_call_args
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> eftl.compatibize_apply_or_call_args(1,2,3)
[1, 2, 3]
>>>
>>> eftl.compatibize_apply_or_call_args([1,2,3])
[1, 2, 3]
>>>
>>> eftl.compatibize_apply_or_call_args([1])
[1]
>>> eftl.compatibize_apply_or_call_args(1)
[1]
>>>
ternaryop
~~~~~~~~~
::
>>> ternaryop(3>2,"ye!","no")
'ye!'
>>> ternaryop(3<2,"ye!","no")
'no'
>>>
import ebojtool
~~~~~~~~~~~~~~~~
::
import efuntool.eobjtool as eotl
from efuntool.eobjtool import *
0. get_mros
~~~~~~~~~~~
::
>>> a= 5
>>> get_mros(a)
[5,, ]
>>>
.. image:: ./images/get_mros.svg
1. get_attrs_chain
~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> parr(get_attrs_chain(t))
['_u', 'u']
['__dict__', '__module__', '__weakref__']
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>>
.. image:: ./images/get_attrs_chain.svg
2. get_own_attrs
~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_own_attrs(t)
['_u', 'u']
>>>
.. image:: ./images/get_own_attrs.svg
3. get_inherited_attrs
~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_inherited_attrs(t,0)
['_u', 'u']
>>>
>>> get_inherited_attrs(t,1)
['__dict__', '__module__', '__weakref__']
>>>
>>> get_inherited_attrs(t,2)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>>
>>> get_inherited_attrs(t,0,1)
['_u', 'u', '__dict__', '__module__', '__weakref__']
>>>
.. image:: ./images/get_inherited_attrs.svg
4. get_own_visible_attrs
~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_own_visible_attrs(t)
['u']
>>>
.. image:: ./images/get_own_visible_attrs.svg
5. get_own_priv_attrs
~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_own_priv_attrs(t)
['_u']
>>>
.. image:: ./images/get_own_priv_attrs.svg
6. get_own_builtin_attrs
~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_own_buildin_attrs(t)
[]
>>>
.. image:: ./images/get_own_builtin_attrs.svg
7. get_inherited_visible_attrs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_inherited_visible_attrs(t,1)
[]
>>>
.. image:: ./images/get_inherited_visible_attrs.svg
8. get_inherited_priv_attrs
~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_inherited_priv_attrs(t,1)
[]
>>>
.. image:: ./images/get_inherited_priv_attrs.svg
9. get_inherited_builtin_attrs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> class tst():
... def __init__(self):
... self._u = "_u"
... self.u = "u"
...
>>> t = tst()
>>>
>>> get_inherited_buildin_attrs(t,1)
['__dict__', '__module__', '__weakref__']
>>>
>>> get_inherited_builtin_attrs(t,2)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>>
.. image:: ./images/get_inherited_builtin_attrs.svg
10. get_all_attrs
~~~~~~~~~~~~~~~~~
::
>>> a= 5
>>> get_all_attrs(a)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
.. image:: ./images/get_all_attrs.svg
11. get_all_visible_attrs
~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> a = 5
>>> get_all_visible_attrs(a)
['bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>>
.. image:: ./images/get_all_visible_attrs.svg
12. get_all_builtin_attrs
~~~~~~~~~~~~~~~~~~~~~~~~~
::
>>> a = 5
>>> get_all_builtin_attrs(a)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__']
.. image:: ./images/get_all_builtin_attrs.svg
13. get_all_priv_attrs
~~~~~~~~~~~~~~~~~~~~~~
::
class tst():
def __init__(self):
self._u = "_u"
self.u = "u"
t = tst()
>>> get_all_priv_attrs(t)
['_u']
>>>
.. image:: ./images/get_all_priv_attrs.svg
APIS
====
- def is_none(obj):
- def is_bool(obj):
- def is_bytes(obj):
- def is_str(obj):
- def is_int(obj):
- def is_float(obj):
- def is_list(obj):
- def is_tuple(obj):
- def is_dict(obj):
- def is_set(obj):
- def is_regex(obj):
- def is_function(obj):
- def is_module(obj):
- def is_customer_defined_type(obj):
- def is_number(obj):
- def is_recursive_type(obj):
- def is_non_buildin_function(obj):
- def is_buildin_function(obj):
- def is_hashable_type(obj):
- def is_unhashable_type(obj):
- def is_json(obj,strict=False):
- def get_type(obj):
- def goose():
- def curry(orig_func,params_count):
- def not_wrapper(func):
- def copyornot_wrapper(func):
- def force_deepcopy_wrapper(func):
- def deepcopy_and_keep_ptr_wrapper(func):
- def force_deepcopy_and_keep_ptr_wrapper(func):
- def force_inplace_and_keep_ptr_wrapper(func):
- def dflt_kwargs(k,dflt,**kwargs):
- def self_kwargs(self,kl,dfltl,**kwargs):
- def kwargs_to_property_in_cls_init(self,kl,dfltl,**kwargs):
- def de_args(kl,dfltl,*args):
- def dictize_args(kl,dfltl,*args):
- def compatibize_apply_or_call_args(*args,**kwargs):
- def pipeline(funcs):
- def params_pipeline(f,orig,*args):
- def reorder_params_trans(f,param_seqs):
- def args2dict_trans(f):
- def bool_op(op,cond1,cond2):
- def bool_funcs_ops(funcs,ops):
- def hen():
- def duck():
- def cygnus():
- def get_mros(obj):
- def get_attrs_chain(obj):
- def get_own_attrs(obj):
- def get_inherited_attrs(obj,*whiches):
- def get_own_visible_attrs(obj):
- def get_own_priv_attrs(obj):
- def get_own_builtin_attrs(obj):
- def get_inherited_visible_attrs(obj,*whiches):
- def get_inherited_priv_attrs(obj,*whiches):
- def get_inherited_builtin_attrs(obj,*whiches):
- def get_all_attrs(obj):
- def get_all_visible_attrs(obj):
- def get_all_builtin_attrs(obj):
- def get_all_priv_attrs(obj):
- def optinal_arg(dflt,*args):
- def optional_which_arg(dflt,*args):
- def optional_whiches(arr,dflt,*args):
- def ternaryop(cond,if_tru_rslt,if_fls_rslt):
- def ifchain(paramd,*args)
- def ifcall(cond,f,*args):
- def ifapply(cond,f,args):
- def ifnt_call(cond,f,*args):
- def ifnt_apply(cond,f,args):
- def if_calla_else_callb(cond,fa,fb,*args):
- def if_applya_else_applyb(cond,fa,fb,args):
- def ifnt_calla_else_callb(cond,fa,fb,*args):
- def ifnt_applya_else_applyb(cond,fa,fb,args):
- def identity(o0,o1):
- def is_fls(value,*args):
- def blnot(p,*args):
- def bland(*args,**kwargs):
- def blor(*args,**kwargs):
- def bland_rtrn_last(*args,**kwargs):
- def blor_rtrn_first(*args,**kwargs):
- def scond(p,q):
- def dcond(p,q):
- def blxor(p,q):
- def product(l,repeat=2):
- def permutate(l,repeat=2):
- def permutate_all(l,*args):
- def combinate(l,repeat=2):
- def combinate_all(l,*args):
- def creat_tru_fls_mat(cnl,*args):
- def creat_tru_fls_dtb(cnl,*args):
- def if_p_then_q_else_true(p,q):
- def notp_or_q(p,q):
- def parrowq(p,q):
- def if_p_then_q_else_notq(p,q):
- def notporq_and_pornotq(p,q):
- def if_p_then_notq_else_q(p,q):
- def pandnotq_or_notpandq(p,q):
- def not_dcond(p,q):
- def if_p_then_notq_else_false(p,q):
- def p_and_notq(p,q):
- def not_scond(p,q):
- def if_p_the_notq_else_true(p,q):
- def notp_or_notq(p,q):
- def not_pandq(p,q):
- def if_p_then_false_else_notq(p,q):
- def notp_and_notq(p,q):
- def not_porq(p,q):
PROPOSITION
===========
`PROPOSITION `_
APIS
~~~~
- def enot(p):
- def exist(conds):
- def eall(conds):
- def pandq(p,q):
- def porq(p,q):
- def if_p_then_notq_else_q(p,q):
- def if_p_then_notq_else_tru(p,q):
- def if_p_then_fls_else_notq(p,q):
- def if_p_then_q_else_tru(p,q):
- def if_q_then_p_else_tru(p,q):
- def if_p_then_notq_else_fls(p,q):
- def if_q_then_notp_else_fls(p,q):
- def if_p_then_q_else_notq(p,q):
- def if_p_then_q_else_fls(p,q):
- def if_q_then_p_else_fls(p,q):
- def if_p_then_tru_else_q(p,q):
- def if_q_then_tru_else_p(p,q):
- def if_notp_then_notq_else_tru(p,q):
- def if_notq_then_notp_else_tru(p,q):
- def if_p_then_tru_else_fls(p,q):
- def if_q_then_tru_else_fls(p,q):
- def if_p_then_q_else_q(p,q):
- def if_q_then_p_else_p(p,q):
- def if_p_then_notq_else_notq(p,q):
- def if_q_then_notp_else_notp(p,q):
- def if_p_then_fls_else_tru(p,q):
- def if_q_then_fls_else_tru(p,q):
- def if_p_then_fls_else_q(p,q):
- def if_q_then_fls_else_p(p,q):
- def binlist2permutation(binlist,arr,\*\*kwargs):
- def permutation2binlist(permu,\*\*kwargs):
- def next_permutation(vl,\*\*kwargs):
- def prev_permutation(vl,\*\*kwargs):
- def permutation2index(vl,\*\*kwargs):
- def index2permutation(index,lngth,\*args):
- def num2binlist(num,\*\*kwargs):
- def binlist2num(binlist,\*\*kwargs):
- def combination2binlist(combi,arr):
- def binlist2combination(binlist,arr):
- def next_combination(combi,arr):
- def prev_combination(combi,arr):
- def get_combination_count(k,n):
- def get_combination_interval(n):
- def combination2index(combi,arr):
- def index2combination(index,arr):
- class Permutation
::
from efuntool.ebooltool import Permutation,Combination
>>> p=Permutation(['a','b','c','d'])
>>> p
['a', 'b', 'c', 'd']
>>> p.next()
['a', 'b', 'd', 'c']
>>> p.next()
['a', 'c', 'b', 'd']
>>> p.prev()
['a', 'b', 'd', 'c']
>>> p.prev()
['a', 'b', 'c', 'd']
>>> p.index()
0
>>>
- class Combination
::
>>> arr
['a', 'b', 'c', 'd', 'e']
>>>
>>> from efuntool.ebooltool import Permutation,Combination
>>> arr = ['a', 'b', 'c', 'd', 'e']
>>> c = Combination(['a','b'],arr)
>>> c
['a', 'b']
>>> c.next()
['a', 'c']
>>> c
['a', 'c']
>>> c.prev()
['a', 'b']
>>> c
['a', 'b']
>>> c.index()
6
>>>
License
=======
- MIT