# Cuber
   

## 介绍
+ cuber是一个集成学习框架,主要用于各种集成学习算法的开发,具有灵活动态可配置的特点。cuber主要由三大模块组成,控制引擎、计算引擎和调度引擎。控制引擎依托于networkx的有向无环图技术,需要以计算引擎和调度引擎为基础,运行时加载。计算引擎支持Ray,Dask;调度引擎支持Kahn算法。
## 安装
+ Cuber采用Python开发,得益于Python良好的社区环境,安装支持Pythonic风格的各种管理器。
```bash
$ pip install cuber-0.1-xxxxxxxxxxxx.whl
```
## 快速指南
+ cuber使用主要分为三大步,首先初始化cuber实例,加载计算引擎和调度引擎,获取cuber控制器实例;然后使用装饰器注册目标节点的函数;最后调用cuber控制器执行
+ 以下是cuber主程脚本代码示例:
```python
### 载入程序包
from cuber.interface import Cube
import time
### cuber实例创建
cuber = Cube(cuber_runner='ray',
cuber_runner_address='ray://192.168.1.51:10001',
cuber_scheduler='kahn')
### 创建cuber控制器
cuber_controller = cuber.get_cuber_controller()
### 注册目标函数到指定cuber控制器
@cuber_controller.register(controller_obj=cuber_controller)
def test_a():
time.sleep(10)
print(2)
return 'a'
@cuber_controller.register(controller_obj=cuber_controller)
def test_aa():
time.sleep(10)
print(2)
return 'aa'
@cuber_controller.register(controller_obj=cuber_controller)
def test_b():
time.sleep(10)
print(2)
return 'b'
@cuber_controller.register(controller_obj=cuber_controller)
def test_bb():
time.sleep(10)
print(2)
return 'bb'
@cuber_controller.register(controller_obj=cuber_controller)
def test_c():
time.sleep(10)
print(2)
return 'c'
@cuber_controller.register(controller_obj=cuber_controller)
def test_cc():
time.sleep(10)
print(2)
return 'cc'
@cuber_controller.register(controller_obj=cuber_controller)
def test_d():
time.sleep(10)
return 'd'
### 注册目标函数依赖关系到指定cuber控制器
test_a >> test_b >> test_c >> test_d
test_aa >> test_b >> test_d
test_bb >> test_c >> test_d
test_cc >> test_d
### 展示节点和边情况
print('~~~~~~',cuber_controller.get_graph_obj())
print('------',cuber_controller.show_nodes())
print('======',cuber_controller.show_edges())
### 使用二级统一API
time_start = time.time()
exec_result = cuber_controller.execute()
time_end = time.time()
print('============================== Parallel function running',time_end - time_start)
### 串行函数运行
time_start = time.time()
test_a()
test_aa()
test_bb()
test_cc()
test_b()
test_c()
test_d()
time_end = time.time()
print('============================== Serial function operation',time_end - time_start)
```
## 设计
+ 大量使用元编程技术,提高代码灵活性、可读性和维护质量
+ 设计了控制引擎、计算引擎和调度引擎,实现灵活动态可扩展
+ 天然支持分布式
+ 三级API设计,使用方便,适应不同程度的使用人员
+ 技术列表
+ __new__技术
+ __init__技术
+ __prepare__技术
+ __call__技术
+ type元类
+ 描述符技术
+ Mixin
+ 装饰器技术
+ namedtuple
+ Networkx
+ FSM-transitions
+ 运算符重载
+ __slots__技术
+ Ray
Raw data
{
"_id": null,
"home_page": "https://github.com/redblue0216/Cuber",
"name": "shihua-cuber",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9.12",
"maintainer_email": "",
"keywords": "",
"author": "shihua",
"author_email": "15021408795@163.com",
"download_url": "https://files.pythonhosted.org/packages/ed/f2/08315d28ca5146b6d2bd5c0e18677f4fd1a60c001d961b31fc2debe1806b/shihua-cuber-0.1.tar.gz",
"platform": null,
"description": "# Cuber\n   \n\n\n\n## \u4ecb\u7ecd\n+ cuber\u662f\u4e00\u4e2a\u96c6\u6210\u5b66\u4e60\u6846\u67b6\uff0c\u4e3b\u8981\u7528\u4e8e\u5404\u79cd\u96c6\u6210\u5b66\u4e60\u7b97\u6cd5\u7684\u5f00\u53d1\uff0c\u5177\u6709\u7075\u6d3b\u52a8\u6001\u53ef\u914d\u7f6e\u7684\u7279\u70b9\u3002cuber\u4e3b\u8981\u7531\u4e09\u5927\u6a21\u5757\u7ec4\u6210\uff0c\u63a7\u5236\u5f15\u64ce\u3001\u8ba1\u7b97\u5f15\u64ce\u548c\u8c03\u5ea6\u5f15\u64ce\u3002\u63a7\u5236\u5f15\u64ce\u4f9d\u6258\u4e8enetworkx\u7684\u6709\u5411\u65e0\u73af\u56fe\u6280\u672f\uff0c\u9700\u8981\u4ee5\u8ba1\u7b97\u5f15\u64ce\u548c\u8c03\u5ea6\u5f15\u64ce\u4e3a\u57fa\u7840\uff0c\u8fd0\u884c\u65f6\u52a0\u8f7d\u3002\u8ba1\u7b97\u5f15\u64ce\u652f\u6301Ray,Dask\uff1b\u8c03\u5ea6\u5f15\u64ce\u652f\u6301Kahn\u7b97\u6cd5\u3002\n\n\n## \u5b89\u88c5\n+ Cuber\u91c7\u7528Python\u5f00\u53d1\uff0c\u5f97\u76ca\u4e8ePython\u826f\u597d\u7684\u793e\u533a\u73af\u5883\uff0c\u5b89\u88c5\u652f\u6301Pythonic\u98ce\u683c\u7684\u5404\u79cd\u7ba1\u7406\u5668\u3002\n```bash\n$ pip install cuber-0.1-xxxxxxxxxxxx.whl\n```\n\n\n\n## \u5feb\u901f\u6307\u5357\n+ cuber\u4f7f\u7528\u4e3b\u8981\u5206\u4e3a\u4e09\u5927\u6b65\uff0c\u9996\u5148\u521d\u59cb\u5316cuber\u5b9e\u4f8b\uff0c\u52a0\u8f7d\u8ba1\u7b97\u5f15\u64ce\u548c\u8c03\u5ea6\u5f15\u64ce\uff0c\u83b7\u53d6cuber\u63a7\u5236\u5668\u5b9e\u4f8b\uff1b\u7136\u540e\u4f7f\u7528\u88c5\u9970\u5668\u6ce8\u518c\u76ee\u6807\u8282\u70b9\u7684\u51fd\u6570\uff1b\u6700\u540e\u8c03\u7528cuber\u63a7\u5236\u5668\u6267\u884c\n\n+ \u4ee5\u4e0b\u662fcuber\u4e3b\u7a0b\u811a\u672c\u4ee3\u7801\u793a\u4f8b\uff1a\n\n```python\n\n\t### \u8f7d\u5165\u7a0b\u5e8f\u5305\n\tfrom cuber.interface import Cube\n\timport time\n\n\n\t### cuber\u5b9e\u4f8b\u521b\u5efa\n\tcuber = Cube(cuber_runner='ray',\n\t cuber_runner_address='ray://192.168.1.51:10001',\n\t cuber_scheduler='kahn')\n\n\n\t### \u521b\u5efacuber\u63a7\u5236\u5668\n\tcuber_controller = cuber.get_cuber_controller()\n\n\n\t### \u6ce8\u518c\u76ee\u6807\u51fd\u6570\u5230\u6307\u5b9acuber\u63a7\u5236\u5668\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_a():\n\t time.sleep(10)\n\t print(2)\n\t return 'a'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_aa():\n\t time.sleep(10)\n\t print(2)\n\t return 'aa'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_b():\n\t time.sleep(10)\n\t print(2)\n\t return 'b'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_bb():\n\t time.sleep(10)\n\t print(2)\n\t return 'bb'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_c():\n\t time.sleep(10)\n\t print(2)\n\t return 'c'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_cc():\n\t time.sleep(10)\n\t print(2)\n\t return 'cc'\n\n\t@cuber_controller.register(controller_obj=cuber_controller)\n\tdef test_d():\n\t time.sleep(10)\n\t return 'd'\n\n\n\t### \u6ce8\u518c\u76ee\u6807\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u5230\u6307\u5b9acuber\u63a7\u5236\u5668\n\ttest_a >> test_b >> test_c >> test_d\n\ttest_aa >> test_b >> test_d\n\ttest_bb >> test_c >> test_d\n\ttest_cc >> test_d\n\n\n\t### \u5c55\u793a\u8282\u70b9\u548c\u8fb9\u60c5\u51b5\n\tprint('~~~~~~',cuber_controller.get_graph_obj())\n\tprint('------',cuber_controller.show_nodes())\n\tprint('======',cuber_controller.show_edges())\n\n\n\t### \u4f7f\u7528\u4e8c\u7ea7\u7edf\u4e00API\n\ttime_start = time.time()\n\texec_result = cuber_controller.execute()\n\ttime_end = time.time()\n\tprint('============================== Parallel function running',time_end - time_start)\n\n\n\t### \u4e32\u884c\u51fd\u6570\u8fd0\u884c\n\ttime_start = time.time()\n\ttest_a()\n\ttest_aa()\n\ttest_bb()\n\ttest_cc()\n\ttest_b()\n\ttest_c()\n\ttest_d()\n\ttime_end = time.time()\n\tprint('============================== Serial function operation',time_end - time_start)\n```\n\n\n## \u8bbe\u8ba1\n+ \u5927\u91cf\u4f7f\u7528\u5143\u7f16\u7a0b\u6280\u672f\uff0c\u63d0\u9ad8\u4ee3\u7801\u7075\u6d3b\u6027\u3001\u53ef\u8bfb\u6027\u548c\u7ef4\u62a4\u8d28\u91cf\n+ \u8bbe\u8ba1\u4e86\u63a7\u5236\u5f15\u64ce\u3001\u8ba1\u7b97\u5f15\u64ce\u548c\u8c03\u5ea6\u5f15\u64ce\uff0c\u5b9e\u73b0\u7075\u6d3b\u52a8\u6001\u53ef\u6269\u5c55\n+ \u5929\u7136\u652f\u6301\u5206\u5e03\u5f0f\n+ \u4e09\u7ea7API\u8bbe\u8ba1\uff0c\u4f7f\u7528\u65b9\u4fbf\uff0c\u9002\u5e94\u4e0d\u540c\u7a0b\u5ea6\u7684\u4f7f\u7528\u4eba\u5458\n+ \u6280\u672f\u5217\u8868\n\t+ __new__\u6280\u672f\n\t+ __init__\u6280\u672f\n\t+ __prepare__\u6280\u672f\n\t+ __call__\u6280\u672f\n\t+ type\u5143\u7c7b\n\t+ \u63cf\u8ff0\u7b26\u6280\u672f\n\t+ Mixin\n\t+ \u88c5\u9970\u5668\u6280\u672f\n\t+ namedtuple\n\t+ Networkx\n\t+ FSM-transitions\n\t+ \u8fd0\u7b97\u7b26\u91cd\u8f7d\n\t+ __slots__\u6280\u672f\n\t+ Ray\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Cuber is an ensemble learning frame tool.",
"version": "0.1",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a64bfaeddbadd74e990f53817bbec0eec98f98029423511c1357524595ce61c7",
"md5": "c3c4c77a67ca1bede13bd14da8ad3443",
"sha256": "aa3515d7fb59abaf8f581ec71c772f158ca4c9ddea11edbf5a0bb07a34e7d299"
},
"downloads": -1,
"filename": "shihua_cuber-0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c3c4c77a67ca1bede13bd14da8ad3443",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9.12",
"size": 28144,
"upload_time": "2023-03-14T09:37:31",
"upload_time_iso_8601": "2023-03-14T09:37:31.806047Z",
"url": "https://files.pythonhosted.org/packages/a6/4b/faeddbadd74e990f53817bbec0eec98f98029423511c1357524595ce61c7/shihua_cuber-0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "edf208315d28ca5146b6d2bd5c0e18677f4fd1a60c001d961b31fc2debe1806b",
"md5": "1f07fb853f969f65dfad82fad1449ee3",
"sha256": "63c94120b8d55587110bb8c26061aec4793aaa4851ba2241c13e98fcb0c24174"
},
"downloads": -1,
"filename": "shihua-cuber-0.1.tar.gz",
"has_sig": false,
"md5_digest": "1f07fb853f969f65dfad82fad1449ee3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9.12",
"size": 19788,
"upload_time": "2023-03-14T09:37:33",
"upload_time_iso_8601": "2023-03-14T09:37:33.996030Z",
"url": "https://files.pythonhosted.org/packages/ed/f2/08315d28ca5146b6d2bd5c0e18677f4fd1a60c001d961b31fc2debe1806b/shihua-cuber-0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-14 09:37:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "redblue0216",
"github_project": "Cuber",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "shihua-cuber"
}