{"id":42804849,"url":"https://github.com/ihgazni2/efuntool","last_synced_at":"2026-01-30T03:53:14.814Z","repository":{"id":57425791,"uuid":"205361964","full_name":"ihgazni2/efuntool","owner":"ihgazni2","description":"function wrap tool  from descmat proj","archived":false,"fork":false,"pushed_at":"2020-04-16T13:15:19.000Z","size":122,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-02T11:38:14.676Z","etag":null,"topics":["args","currying","kwargs","params","thunkify"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ihgazni2.png","metadata":{"files":{"readme":"readme.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-30T10:43:04.000Z","updated_at":"2020-04-16T13:15:22.000Z","dependencies_parsed_at":"2022-09-11T14:01:48.989Z","dependency_job_id":null,"html_url":"https://github.com/ihgazni2/efuntool","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ihgazni2/efuntool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihgazni2%2Fefuntool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihgazni2%2Fefuntool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihgazni2%2Fefuntool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihgazni2%2Fefuntool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ihgazni2","download_url":"https://codeload.github.com/ihgazni2/efuntool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihgazni2%2Fefuntool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28900380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T03:36:35.398Z","status":"ssl_error","status_checked_at":"2026-01-30T03:36:34.949Z","response_time":66,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["args","currying","kwargs","params","thunkify"],"created_at":"2026-01-30T03:53:12.555Z","updated_at":"2026-01-30T03:53:14.804Z","avatar_url":"https://github.com/ihgazni2.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. contents:: Table of Contents\n   :depth: 5\n\n\n*efuntool*\n-----------\n\n\n\nInstallation\n============\n\n    ::\n    \n        $ pip3 install efuntool\n\nUsage\n=====\n\ncurry\n~~~~~\n- wrap a function, currify the params, return a new function\n- similiar to curry in lodash(javascript)\n\n    ::\n        \n        import efuntool.efuntool as eftl\n        \n        #the original function with 4 params\n\n        def sum_of_4(a,b,c,d):\n            return(a+b+c+d)\n\n        #wrap it with eftl.curry(orig_func,params_count)\n\n        f = eftl.curry(sum_of_4,4)\n\n        #call at any params~combo, just keep the sequence\n\n        f(1,2,3,4)\n        f(1,2,3)(4)\n        f(1,2)(3,4)\n        f(1)(2,3)(4)\n        \n        \u003e\u003e\u003e f(1,2,3,4)\n        10\n        \u003e\u003e\u003e f(1,2,3)(4)\n        10\n        \u003e\u003e\u003e f(1,2)(3,4)\n        10\n        \u003e\u003e\u003e f(1)(2,3)(4)\n        10\n        \u003e\u003e\u003e f(1,2)(3)(4)\n        10\n        \u003e\u003e\u003e f(1)(2)(3)(4)\n        10\n\n        #step by step , pass params\n        f(1)\n        f(2)\n        f(3)\n        f(4)\n        \n        \u003e\u003e\u003e f(1)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(2)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(3)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(4)\n        10\n\n\n        f(1,2)\n        f(3)\n        f(4)\n        \n        \n        \u003e\u003e\u003e f(1,2)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(3)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(4)\n        10\n        \u003e\u003e\u003e\n\n\n        f(1,2,3)\n        f(4)\n        \n        \u003e\u003e\u003e f(1,2,3)\n        \u003cefuntool.efuntool.curry object at 0x7f242ffc5898\u003e\n        \u003e\u003e\u003e f(4)\n        10\n        \u003e\u003e\u003e\n\n\ncygnus\n~~~~~~\n- count how many recursives done\n\n    ::\n        \n        import efuntool.efuntool as eftl\n        \u003e\u003e\u003e egg = eftl.cygnus()\n        \u003e\u003e\u003e egg.count\n        0\n        \u003e\u003e\u003e egg()\n        \u003e\u003e\u003e egg.count\n        1\n        \u003e\u003e\u003e egg(\n                egg()\n            )\n        \u003e\u003e\u003e egg.count\n        2\n        \u003e\u003e\u003e egg(\n                egg(\n                    egg()\n                )\n            )\n        \u003e\u003e\u003e egg.count\n        3\n\n\nduck\n~~~~\n- count how many calls done\n\n    ::\n        \n        import efuntool.efuntool as eftl\n        \u003e\u003e\u003e egg = eftl.duck()\n        \u003e\u003e\u003e egg.count\n        0\n        \u003e\u003e\u003e egg()\n        \u003e\u003e\u003e egg.count\n        1\n        \u003e\u003e\u003e egg()\n        \u003e\u003e\u003e egg.count\n        2\n        \u003e\u003e\u003e\n\nhen        \n~~~\n- record params history\n    \n    ::\n        \n        import efuntool.efuntool as eftl\n        \u003e\u003e\u003e egg = eftl.hen()\n        \u003e\u003e\u003e egg(\"a\")\n        \u003e\u003e\u003e egg(\"a\")\n        \u003e\u003e\u003e egg.a\n        2\n        \u003e\u003e\u003e egg(\"b\")\n        \u003e\u003e\u003e egg(\"b\")\n        \u003e\u003e\u003e egg(\"b\")\n        \u003e\u003e\u003e egg.b\n        3\n\n\ndflt_kwargs\n~~~~~~~~~~~\n    \n    ::\n        \n    \n       counts = dflt_kwargs(\"counts\",100,**kwargs)\n    \n\n\noptional_arg(dflt,*args)\n~~~~~~~~~~~~~~~~~~~~~~~~\n    \n    ::\n        \n    \n        arg = optional_arg(100)\n        arg\n        \u003e\u003e\u003e100\n        arg = optional_arg(100,250)\n        arg\n        \u003e\u003e\u003e250\n\n\n\nkwargs_to_property_in_cls_init\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    \n    ::\n        \n    \n        \u003e\u003e\u003e class tst():\n        ...     def __init__(self,**kwargs):\n        ...         eftl.self_kwargs(self,['name','age'],['stu','20'],**kwargs)\n        ...\n        \u003e\u003e\u003e p = tst()\n        \u003e\u003e\u003e p.name\n        'stu'\n        \u003e\u003e\u003e p.age\n        '20'\n        \u003e\u003e\u003e p = tst(name='terry')\n        \u003e\u003e\u003e p.name\n        'terry'\n        \u003e\u003e\u003e p.age\n        '20'\n        \u003e\u003e\u003e\n    \n\n\ndictize_args\n~~~~~~~~~~~~\n    \n    ::\n        \n    \n        dictize args\n        dictize_args(kl,dfltl,*args)\n\n        kl = ['k1','k2','k3','k4']\n        dfltl = [3,4]\n        dictize_args(kl,dfltl,'a','b')\n        {\n            'k1':'a',\n            'k2':'b',\n            'k3':3,\n            'k4':4\n        }\n    \n\n\n\ncompatibize_apply_or_call_args\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    \n    ::\n        \n        \u003e\u003e\u003e eftl.compatibize_apply_or_call_args(1,2,3)\n        [1, 2, 3]\n        \u003e\u003e\u003e\n        \u003e\u003e\u003e eftl.compatibize_apply_or_call_args([1,2,3])\n        [1, 2, 3]\n        \u003e\u003e\u003e\n        \u003e\u003e\u003e eftl.compatibize_apply_or_call_args([1])\n        [1]\n        \u003e\u003e\u003e eftl.compatibize_apply_or_call_args(1)\n        [1]\n        \u003e\u003e\u003e\n\n\nternaryop\n~~~~~~~~~\n    \n    ::\n\n    \n        \u003e\u003e\u003e ternaryop(3\u003e2,\"ye!\",\"no\")\n        'ye!'\n        \u003e\u003e\u003e ternaryop(3\u003c2,\"ye!\",\"no\")\n        'no'\n        \u003e\u003e\u003e\n\n\n\n\nimport ebojtool\n~~~~~~~~~~~~~~~~\n\n    ::\n\n        import efuntool.eobjtool as eotl\n        from efuntool.eobjtool import *\n\n\n\n0. get_mros\n~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e a= 5\n                \u003e\u003e\u003e get_mros(a)\n                [5,\u003cclass 'int'\u003e, \u003cclass 'object'\u003e]\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_mros.svg\n\n1. get_attrs_chain\n~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e parr(get_attrs_chain(t))\n                ['_u', 'u']\n                ['__dict__', '__module__', '__weakref__']\n                ['__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__']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_attrs_chain.svg\n\n2. get_own_attrs\n~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_own_attrs(t)\n                ['_u', 'u']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_own_attrs.svg\n\n\n3. get_inherited_attrs\n~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_attrs(t,0)\n                ['_u', 'u']\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_attrs(t,1)\n                ['__dict__', '__module__', '__weakref__']\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_attrs(t,2)\n                ['__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__']\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_attrs(t,0,1)\n                ['_u', 'u', '__dict__', '__module__', '__weakref__']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_inherited_attrs.svg\n\n4. get_own_visible_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_own_visible_attrs(t)\n                ['u']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_own_visible_attrs.svg\n\n5. get_own_priv_attrs\n~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_own_priv_attrs(t)\n                ['_u']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_own_priv_attrs.svg\n\n6. get_own_builtin_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_own_buildin_attrs(t)\n                []\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_own_builtin_attrs.svg\n\n\n7. get_inherited_visible_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_visible_attrs(t,1)\n                []\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_inherited_visible_attrs.svg\n\n8. get_inherited_priv_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_priv_attrs(t,1)\n                []\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_inherited_priv_attrs.svg\n\n9. get_inherited_builtin_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e class tst():\n                ...     def __init__(self):\n                ...         self._u = \"_u\"\n                ...         self.u = \"u\"\n                ...\n                \u003e\u003e\u003e t = tst()\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_buildin_attrs(t,1)\n                ['__dict__', '__module__', '__weakref__']\n                \u003e\u003e\u003e\n                \u003e\u003e\u003e get_inherited_builtin_attrs(t,2)\n                ['__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__']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_inherited_builtin_attrs.svg\n\n10. get_all_attrs\n~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e a= 5\n                \u003e\u003e\u003e get_all_attrs(a)\n                ['__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']\n\n\n.. image:: ./images/get_all_attrs.svg\n\n11. get_all_visible_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e a = 5\n                \u003e\u003e\u003e get_all_visible_attrs(a)\n                ['bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_all_visible_attrs.svg\n\n12. get_all_builtin_attrs\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                \u003e\u003e\u003e a = 5\n                \u003e\u003e\u003e get_all_builtin_attrs(a)\n                ['__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__']\n\n\n.. image:: ./images/get_all_builtin_attrs.svg\n\n\n13. get_all_priv_attrs\n~~~~~~~~~~~~~~~~~~~~~~\n\n    ::\n\n\n                class tst():\n                    def __init__(self):\n                        self._u = \"_u\"\n                        self.u = \"u\"\n\n                t = tst()\n                \u003e\u003e\u003e get_all_priv_attrs(t)\n                ['_u']\n                \u003e\u003e\u003e\n\n\n.. image:: ./images/get_all_priv_attrs.svg\n\n\nAPIS        \n====\n- def is_none(obj):\n- def is_bool(obj):\n- def is_bytes(obj):\n- def is_str(obj):\n- def is_int(obj):\n- def is_float(obj):\n- def is_list(obj):\n- def is_tuple(obj):\n- def is_dict(obj):\n- def is_set(obj):\n- def is_regex(obj):\n- def is_function(obj):\n- def is_module(obj):\n- def is_customer_defined_type(obj):\n- def is_number(obj):\n- def is_recursive_type(obj):\n- def is_non_buildin_function(obj):\n- def is_buildin_function(obj):\n- def is_hashable_type(obj):\n- def is_unhashable_type(obj):\n- def is_json(obj,strict=False):\n- def get_type(obj):\n- def goose():\n- def curry(orig_func,params_count):\n- def not_wrapper(func):\n- def copyornot_wrapper(func):\n- def force_deepcopy_wrapper(func):\n- def deepcopy_and_keep_ptr_wrapper(func):\n- def force_deepcopy_and_keep_ptr_wrapper(func):\n- def force_inplace_and_keep_ptr_wrapper(func):\n- def dflt_kwargs(k,dflt,**kwargs):\n- def self_kwargs(self,kl,dfltl,**kwargs):\n- def kwargs_to_property_in_cls_init(self,kl,dfltl,**kwargs):\n- def de_args(kl,dfltl,*args):\n- def dictize_args(kl,dfltl,*args):\n- def compatibize_apply_or_call_args(*args,**kwargs):\n- def pipeline(funcs):\n- def params_pipeline(f,orig,*args):\n- def reorder_params_trans(f,param_seqs)：\n- def args2dict_trans(f):\n- def bool_op(op,cond1,cond2):\n- def bool_funcs_ops(funcs,ops):  \n- def hen():\n- def duck():\n- def cygnus():\n- def get_mros(obj):\n- def get_attrs_chain(obj):\n- def get_own_attrs(obj):\n- def get_inherited_attrs(obj,*whiches):\n- def get_own_visible_attrs(obj):\n- def get_own_priv_attrs(obj):\n- def get_own_builtin_attrs(obj):\n- def get_inherited_visible_attrs(obj,*whiches):\n- def get_inherited_priv_attrs(obj,*whiches):\n- def get_inherited_builtin_attrs(obj,*whiches):\n- def get_all_attrs(obj):\n- def get_all_visible_attrs(obj):\n- def get_all_builtin_attrs(obj):\n- def get_all_priv_attrs(obj):\n- def optinal_arg(dflt,*args):\n- def optional_which_arg(dflt,*args):\n- def optional_whiches(arr,dflt,*args):\n- def ternaryop(cond,if_tru_rslt,if_fls_rslt):\n- def ifchain(paramd,*args)\n- def ifcall(cond,f,*args):\n- def ifapply(cond,f,args):\n- def ifnt_call(cond,f,*args):\n- def ifnt_apply(cond,f,args):\n- def if_calla_else_callb(cond,fa,fb,*args):\n- def if_applya_else_applyb(cond,fa,fb,args):\n- def ifnt_calla_else_callb(cond,fa,fb,*args):\n- def ifnt_applya_else_applyb(cond,fa,fb,args):\n- def identity(o0,o1):\n- def is_fls(value,*args):\n- def blnot(p,*args):\n- def bland(*args,**kwargs):\n- def blor(*args,**kwargs):\n- def bland_rtrn_last(*args,**kwargs):\n- def blor_rtrn_first(*args,**kwargs):\n- def scond(p,q):\n- def dcond(p,q):\n- def blxor(p,q):\n- def product(l,repeat=2):\n- def permutate(l,repeat=2):\n- def permutate_all(l,*args):\n- def combinate(l,repeat=2):\n- def combinate_all(l,*args):\n- def creat_tru_fls_mat(cnl,*args):\n- def creat_tru_fls_dtb(cnl,*args):\n- def if_p_then_q_else_true(p,q):\n- def notp_or_q(p,q):\n- def parrowq(p,q):\n- def if_p_then_q_else_notq(p,q):\n- def notporq_and_pornotq(p,q):\n- def if_p_then_notq_else_q(p,q):\n- def pandnotq_or_notpandq(p,q):\n- def not_dcond(p,q):\n- def if_p_then_notq_else_false(p,q):\n- def p_and_notq(p,q):\n- def not_scond(p,q):\n- def if_p_the_notq_else_true(p,q):\n- def notp_or_notq(p,q):\n- def not_pandq(p,q):\n- def if_p_then_false_else_notq(p,q):\n- def notp_and_notq(p,q):\n- def not_porq(p,q):\n\n\nPROPOSITION\n===========\n\n`PROPOSITION  \u003chttps://github.com/ihgazni2/efuntool/blob/master/docs/bool_parser.rst\u003e`_\n\nAPIS\n~~~~\n- def enot(p):\n- def exist(conds):\n- def eall(conds):\n- def pandq(p,q):\n- def porq(p,q):\n- def if_p_then_notq_else_q(p,q):\n- def if_p_then_notq_else_tru(p,q):\n- def if_p_then_fls_else_notq(p,q):\n- def if_p_then_q_else_tru(p,q):\n- def if_q_then_p_else_tru(p,q):\n- def if_p_then_notq_else_fls(p,q):\n- def if_q_then_notp_else_fls(p,q):\n- def if_p_then_q_else_notq(p,q):\n- def if_p_then_q_else_fls(p,q):\n- def if_q_then_p_else_fls(p,q):\n- def if_p_then_tru_else_q(p,q):\n- def if_q_then_tru_else_p(p,q):\n- def if_notp_then_notq_else_tru(p,q):\n- def if_notq_then_notp_else_tru(p,q):\n- def if_p_then_tru_else_fls(p,q):\n- def if_q_then_tru_else_fls(p,q):\n- def if_p_then_q_else_q(p,q):\n- def if_q_then_p_else_p(p,q):\n- def if_p_then_notq_else_notq(p,q):\n- def if_q_then_notp_else_notp(p,q):\n- def if_p_then_fls_else_tru(p,q):\n- def if_q_then_fls_else_tru(p,q):\n- def if_p_then_fls_else_q(p,q):\n- def if_q_then_fls_else_p(p,q):\n\n\n\n- def binlist2permutation(binlist,arr,\\*\\*kwargs):\n- def permutation2binlist(permu,\\*\\*kwargs):\n- def next_permutation(vl,\\*\\*kwargs):\n- def prev_permutation(vl,\\*\\*kwargs):\n- def permutation2index(vl,\\*\\*kwargs):\n- def index2permutation(index,lngth,\\*args):\n- def num2binlist(num,\\*\\*kwargs):\n- def binlist2num(binlist,\\*\\*kwargs):\n- def combination2binlist(combi,arr):\n- def binlist2combination(binlist,arr):\n- def next_combination(combi,arr):\n- def prev_combination(combi,arr):\n- def get_combination_count(k,n):\n- def get_combination_interval(n):\n- def combination2index(combi,arr):\n- def index2combination(index,arr):\n\n- class Permutation\n    \n    ::\n        \n        from efuntool.ebooltool import Permutation,Combination\n        \u003e\u003e\u003e p=Permutation(['a','b','c','d'])\n        \u003e\u003e\u003e p\n        ['a', 'b', 'c', 'd']\n        \u003e\u003e\u003e p.next()\n        ['a', 'b', 'd', 'c']\n        \u003e\u003e\u003e p.next()\n        ['a', 'c', 'b', 'd']\n        \u003e\u003e\u003e p.prev()\n        ['a', 'b', 'd', 'c']\n        \u003e\u003e\u003e p.prev()\n        ['a', 'b', 'c', 'd']\n        \u003e\u003e\u003e p.index()\n        0\n        \u003e\u003e\u003e\n\n- class Combination\n    \n    ::\n        \n        \u003e\u003e\u003e arr\n        ['a', 'b', 'c', 'd', 'e']\n        \u003e\u003e\u003e\n        \u003e\u003e\u003e from efuntool.ebooltool import Permutation,Combination\n        \u003e\u003e\u003e arr = ['a', 'b', 'c', 'd', 'e']\n        \u003e\u003e\u003e c = Combination(['a','b'],arr)\n        \u003e\u003e\u003e c\n        ['a', 'b']\n        \u003e\u003e\u003e c.next()\n        ['a', 'c']\n        \u003e\u003e\u003e c\n        ['a', 'c']\n        \u003e\u003e\u003e c.prev()\n        ['a', 'b']\n        \u003e\u003e\u003e c\n        ['a', 'b']\n        \u003e\u003e\u003e c.index()\n        6\n        \u003e\u003e\u003e\n\n\nLicense\n=======\n\n- MIT\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihgazni2%2Fefuntool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fihgazni2%2Fefuntool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihgazni2%2Fefuntool/lists"}