| @@ -7,13 +7,13 @@ __pycache__/ | |||
| *.so | |||
| *.ipynb | |||
| .ipynb_checkpoints | |||
| _build | |||
| # _build | |||
| build/ | |||
| dist/ | |||
| *.pkl | |||
| *.hd5 | |||
| *.csv | |||
| *.html | |||
| # *.html | |||
| *.xml | |||
| .env | |||
| .vim | |||
| @@ -30,8 +30,5 @@ dist/ | |||
| .idea/ | |||
| .DS_Store | |||
| node_modules/ | |||
| build/ | |||
| _build/ | |||
| dist/ | |||
| cache/ | |||
| tmp/ | |||
| @@ -1,40 +1,3 @@ | |||
| # Learnware Market 规范 | |||
| ## 1 提交规范 | |||
| # Learnware Market | |||
| ### 1.1 Commit 内容 | |||
| 请按照以下方式提交: | |||
| 按照 前缀 + Space + 后缀 的方法提交 | |||
| * 前缀有三种选择,可使用逗号链接 | |||
| * [ENH]:表示 enhancement,意味着增加新功能 | |||
| * [DOC]:表示修改了文档 | |||
| * [FIX]:表示修改了 bug,修改了 tyoo | |||
| * [MNT]:表示其他小修改,比如更新版本号 | |||
| * 后缀表示具体修改的内容,首字母大写 | |||
| * 举例:一下都合法 | |||
| * [DOC] Fix the document | |||
| * [FIX, ENT] Fix the bug and add some feature | |||
| ### 1.2 格式 | |||
| 提交前使用以下命令进行format: | |||
| ``` | |||
| black -l 120 . | |||
| ``` | |||
| 其中black安装命令为: | |||
| ``` | |||
| pip install black | |||
| ``` | |||
| ## 2 以开发模式安装方法 | |||
| 使用以下方式进行安装开发: | |||
| * 使用 python 3.8 进行开发 | |||
| * 安装代码(代码根目录运行 | |||
| ``` | |||
| python setup.py develop | |||
| ``` | |||
| * 直接增加,删除修改对应文件即可 | |||
| This is learnware market project. | |||
| @@ -0,0 +1,28 @@ | |||
| # Learnware Market 提交规范 | |||
| ## 1.1 comments 格式 | |||
| 请按照以下方式提交: | |||
| 按照 前缀 + Space + 后缀 的方法提交 | |||
| * 前缀有三种选择,可使用逗号链接 | |||
| * [ENH]:表示 enhancement,意味着增加新功能 | |||
| * [DOC]:表示修改了文档 | |||
| * [FIX]:表示修改了 bug,修改了 tyoo | |||
| * [MNT]:表示其他小修改,比如更新版本号 | |||
| * 后缀表示具体修改的内容,首字母大写 | |||
| * 举例:一下都合法 | |||
| * [DOC] Fix the document | |||
| * [FIX, ENT] Fix the bug and add some feature | |||
| ### 1.2 format 代码 | |||
| 提交前使用以下命令进行format: | |||
| ``` | |||
| black -l 120 . | |||
| ``` | |||
| 其中black安装命令为: | |||
| ``` | |||
| pip install black | |||
| ``` | |||
| @@ -0,0 +1,9 @@ | |||
| # Learnware Market 开发模式安装方法 | |||
| 使用以下方式进行安装开发: | |||
| * 使用 python 3.8 进行开发 | |||
| * 安装代码(代码根目录运行 | |||
| ``` | |||
| python setup.py develop | |||
| ``` | |||
| * 直接增加,删除修改对应文件即可实时修改 import 的包功能 | |||
| @@ -0,0 +1,51 @@ | |||
| # Learnware Market 代码规范 | |||
| ## 1 类和函数命名 | |||
| * 关于类名使用大驼峰方法 | |||
| * 函数使用小写和下划线的形式 | |||
| ## 2 相对引用和绝对引用 | |||
| * 在learnware包内务必使用相对 import 的方法 | |||
| * 在learnware包外使用绝对 import 的方法 | |||
| ## 3 如果读取通用配置 | |||
| * 在需要一些全局配置时使用下属语句进行获取全局配置 (包内相对引用使用) | |||
| ```python | |||
| from learnware.config import C | |||
| print(C.root_path) # 获取项目全局路径 | |||
| ``` | |||
| * 如果要修改或者增添全局配置,直接在 learnware.config 的 _DEFAULT_CONFIG 中进行增删和修改即可 | |||
| ## 4 关于路径硬编码 | |||
| * 请勿使用路径硬编码 | |||
| * 例如我想的到当前文件的文件夹路径,我可以用下述语句: | |||
| ```python | |||
| os.path.dirname(os.path.abspath(__file__)) | |||
| ``` | |||
| * 例如我想获取文件根目录路径下的cache文件夹,我可以使用下述语句: | |||
| ```python | |||
| from learnware.config import C | |||
| cache_dirpath = os.path.join(C.root_path, 'cache') | |||
| ``` | |||
| ## 5 关于通用函数的位置 | |||
| * 全局通用函数请写在 learn.utils 中 | |||
| * 如果是子包通用函数,写在该子包的 utils 中即可,例如 learnware.specification.utils 中存放了 generate_stat_spec 作为该子包通用函数 | |||
| ## 6 关于如何打 log | |||
| * 当出现一些不符合期待行为(例如参数缺失等),请使用 logger 功能 (包内相对引用使用) | |||
| * 例子: | |||
| ```python | |||
| from learnware.logger import get_module_logger | |||
| def function(self): | |||
| self.logger = get_module_logger(self.__class__.__name__) | |||
| self.logger.info("this is a info") | |||
| self.logger.warning("this is a warning") | |||
| ``` | |||
| @@ -1,12 +1,12 @@ | |||
| # Minimal makefile for Sphinx documentation | |||
| # | |||
| # You can set these variables from the command line, and also | |||
| # from the environment for the first two. | |||
| SPHINXOPTS ?= | |||
| SPHINXBUILD ?= sphinx-build | |||
| SOURCEDIR = source | |||
| BUILDDIR = build | |||
| # You can set these variables from the command line. | |||
| SPHINXOPTS = | |||
| SPHINXBUILD = python3 -msphinx | |||
| SPHINXPROJ = learnware | |||
| SOURCEDIR = . | |||
| BUILDDIR = _build | |||
| # Put it first so that "make" without argument is like "make help". | |||
| help: | |||
| @@ -17,4 +17,4 @@ help: | |||
| # Catch-all target: route all unknown targets to Sphinx using the new | |||
| # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). | |||
| %: Makefile | |||
| @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) | |||
| @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) | |||
| @@ -0,0 +1,4 @@ | |||
| # Sphinx build info version 1 | |||
| # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. | |||
| config: b5cd31d294cf0ae8d96bb2ee3edfd253 | |||
| tags: 645f666f9bcd5a90fca523b33c5a78b7 | |||
| @@ -0,0 +1,5 @@ | |||
| .. _market: | |||
| ================================ | |||
| Market | |||
| ================================ | |||
| @@ -0,0 +1,5 @@ | |||
| .. _spec: | |||
| ================================ | |||
| Specification | |||
| ================================ | |||
| @@ -0,0 +1,39 @@ | |||
| .. learnware documentation master file, created by | |||
| sphinx-quickstart on Tue Mar 28 22:06:47 2023. | |||
| You can adapt this file completely to your liking, but it should at least | |||
| contain the root `toctree` directive. | |||
| ============================================================ | |||
| ``Learnware`` Documentation | |||
| ============================================================ | |||
| ``Learnware`` is ... | |||
| .. _user_guide: | |||
| Document Structure | |||
| ==================== | |||
| .. toctree:: | |||
| :hidden: | |||
| Home <self> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: GETTING STARTED: | |||
| Introduction <introduction/intro.rst> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: COMPONENTS: | |||
| Market <components/market.rst> | |||
| Specification <components/spec.rst> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: REFERENCES: | |||
| API <references/api.rst> | |||
| @@ -0,0 +1,5 @@ | |||
| .. _intro: | |||
| ================================ | |||
| Introduction | |||
| ================================ | |||
| @@ -0,0 +1,33 @@ | |||
| .. _api: | |||
| ================================ | |||
| API Reference | |||
| ================================ | |||
| Here you can find all ``learnware`` interfaces. | |||
| Market | |||
| ==================== | |||
| .. autoclass:: learnware.market.LearnwareMarket | |||
| :members: | |||
| Learnware | |||
| ==================== | |||
| .. autoclass:: learnware.learnware.Learnware | |||
| :members: | |||
| Specification | |||
| ==================== | |||
| .. autoclass:: learnware.specification.Specification | |||
| :members: | |||
| .. autoclass:: learnware.specification.StatSpecification | |||
| :members: | |||
| @@ -0,0 +1,903 @@ | |||
| /* | |||
| * basic.css | |||
| * ~~~~~~~~~ | |||
| * | |||
| * Sphinx stylesheet -- basic theme. | |||
| * | |||
| * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| /* -- main layout ----------------------------------------------------------- */ | |||
| div.clearer { | |||
| clear: both; | |||
| } | |||
| div.section::after { | |||
| display: block; | |||
| content: ''; | |||
| clear: left; | |||
| } | |||
| /* -- relbar ---------------------------------------------------------------- */ | |||
| div.related { | |||
| width: 100%; | |||
| font-size: 90%; | |||
| } | |||
| div.related h3 { | |||
| display: none; | |||
| } | |||
| div.related ul { | |||
| margin: 0; | |||
| padding: 0 0 0 10px; | |||
| list-style: none; | |||
| } | |||
| div.related li { | |||
| display: inline; | |||
| } | |||
| div.related li.right { | |||
| float: right; | |||
| margin-right: 5px; | |||
| } | |||
| /* -- sidebar --------------------------------------------------------------- */ | |||
| div.sphinxsidebarwrapper { | |||
| padding: 10px 5px 0 10px; | |||
| } | |||
| div.sphinxsidebar { | |||
| float: left; | |||
| width: 230px; | |||
| margin-left: -100%; | |||
| font-size: 90%; | |||
| word-wrap: break-word; | |||
| overflow-wrap : break-word; | |||
| } | |||
| div.sphinxsidebar ul { | |||
| list-style: none; | |||
| } | |||
| div.sphinxsidebar ul ul, | |||
| div.sphinxsidebar ul.want-points { | |||
| margin-left: 20px; | |||
| list-style: square; | |||
| } | |||
| div.sphinxsidebar ul ul { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| } | |||
| div.sphinxsidebar form { | |||
| margin-top: 10px; | |||
| } | |||
| div.sphinxsidebar input { | |||
| border: 1px solid #98dbcc; | |||
| font-family: sans-serif; | |||
| font-size: 1em; | |||
| } | |||
| div.sphinxsidebar #searchbox form.search { | |||
| overflow: hidden; | |||
| } | |||
| div.sphinxsidebar #searchbox input[type="text"] { | |||
| float: left; | |||
| width: 80%; | |||
| padding: 0.25em; | |||
| box-sizing: border-box; | |||
| } | |||
| div.sphinxsidebar #searchbox input[type="submit"] { | |||
| float: left; | |||
| width: 20%; | |||
| border-left: none; | |||
| padding: 0.25em; | |||
| box-sizing: border-box; | |||
| } | |||
| img { | |||
| border: 0; | |||
| max-width: 100%; | |||
| } | |||
| /* -- search page ----------------------------------------------------------- */ | |||
| ul.search { | |||
| margin: 10px 0 0 20px; | |||
| padding: 0; | |||
| } | |||
| ul.search li { | |||
| padding: 5px 0 5px 20px; | |||
| background-image: url(file.png); | |||
| background-repeat: no-repeat; | |||
| background-position: 0 7px; | |||
| } | |||
| ul.search li a { | |||
| font-weight: bold; | |||
| } | |||
| ul.search li p.context { | |||
| color: #888; | |||
| margin: 2px 0 0 30px; | |||
| text-align: left; | |||
| } | |||
| ul.keywordmatches li.goodmatch a { | |||
| font-weight: bold; | |||
| } | |||
| /* -- index page ------------------------------------------------------------ */ | |||
| table.contentstable { | |||
| width: 90%; | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| table.contentstable p.biglink { | |||
| line-height: 150%; | |||
| } | |||
| a.biglink { | |||
| font-size: 1.3em; | |||
| } | |||
| span.linkdescr { | |||
| font-style: italic; | |||
| padding-top: 5px; | |||
| font-size: 90%; | |||
| } | |||
| /* -- general index --------------------------------------------------------- */ | |||
| table.indextable { | |||
| width: 100%; | |||
| } | |||
| table.indextable td { | |||
| text-align: left; | |||
| vertical-align: top; | |||
| } | |||
| table.indextable ul { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| list-style-type: none; | |||
| } | |||
| table.indextable > tbody > tr > td > ul { | |||
| padding-left: 0em; | |||
| } | |||
| table.indextable tr.pcap { | |||
| height: 10px; | |||
| } | |||
| table.indextable tr.cap { | |||
| margin-top: 10px; | |||
| background-color: #f2f2f2; | |||
| } | |||
| img.toggler { | |||
| margin-right: 3px; | |||
| margin-top: 3px; | |||
| cursor: pointer; | |||
| } | |||
| div.modindex-jumpbox { | |||
| border-top: 1px solid #ddd; | |||
| border-bottom: 1px solid #ddd; | |||
| margin: 1em 0 1em 0; | |||
| padding: 0.4em; | |||
| } | |||
| div.genindex-jumpbox { | |||
| border-top: 1px solid #ddd; | |||
| border-bottom: 1px solid #ddd; | |||
| margin: 1em 0 1em 0; | |||
| padding: 0.4em; | |||
| } | |||
| /* -- domain module index --------------------------------------------------- */ | |||
| table.modindextable td { | |||
| padding: 2px; | |||
| border-collapse: collapse; | |||
| } | |||
| /* -- general body styles --------------------------------------------------- */ | |||
| div.body { | |||
| min-width: 360px; | |||
| max-width: 800px; | |||
| } | |||
| div.body p, div.body dd, div.body li, div.body blockquote { | |||
| -moz-hyphens: auto; | |||
| -ms-hyphens: auto; | |||
| -webkit-hyphens: auto; | |||
| hyphens: auto; | |||
| } | |||
| a.headerlink { | |||
| visibility: hidden; | |||
| } | |||
| h1:hover > a.headerlink, | |||
| h2:hover > a.headerlink, | |||
| h3:hover > a.headerlink, | |||
| h4:hover > a.headerlink, | |||
| h5:hover > a.headerlink, | |||
| h6:hover > a.headerlink, | |||
| dt:hover > a.headerlink, | |||
| caption:hover > a.headerlink, | |||
| p.caption:hover > a.headerlink, | |||
| div.code-block-caption:hover > a.headerlink { | |||
| visibility: visible; | |||
| } | |||
| div.body p.caption { | |||
| text-align: inherit; | |||
| } | |||
| div.body td { | |||
| text-align: left; | |||
| } | |||
| .first { | |||
| margin-top: 0 !important; | |||
| } | |||
| p.rubric { | |||
| margin-top: 30px; | |||
| font-weight: bold; | |||
| } | |||
| img.align-left, figure.align-left, .figure.align-left, object.align-left { | |||
| clear: left; | |||
| float: left; | |||
| margin-right: 1em; | |||
| } | |||
| img.align-right, figure.align-right, .figure.align-right, object.align-right { | |||
| clear: right; | |||
| float: right; | |||
| margin-left: 1em; | |||
| } | |||
| img.align-center, figure.align-center, .figure.align-center, object.align-center { | |||
| display: block; | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| img.align-default, figure.align-default, .figure.align-default { | |||
| display: block; | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| .align-left { | |||
| text-align: left; | |||
| } | |||
| .align-center { | |||
| text-align: center; | |||
| } | |||
| .align-default { | |||
| text-align: center; | |||
| } | |||
| .align-right { | |||
| text-align: right; | |||
| } | |||
| /* -- sidebars -------------------------------------------------------------- */ | |||
| div.sidebar, | |||
| aside.sidebar { | |||
| margin: 0 0 0.5em 1em; | |||
| border: 1px solid #ddb; | |||
| padding: 7px; | |||
| background-color: #ffe; | |||
| width: 40%; | |||
| float: right; | |||
| clear: right; | |||
| overflow-x: auto; | |||
| } | |||
| p.sidebar-title { | |||
| font-weight: bold; | |||
| } | |||
| nav.contents, | |||
| aside.topic, | |||
| div.admonition, div.topic, blockquote { | |||
| clear: left; | |||
| } | |||
| /* -- topics ---------------------------------------------------------------- */ | |||
| nav.contents, | |||
| aside.topic, | |||
| div.topic { | |||
| border: 1px solid #ccc; | |||
| padding: 7px; | |||
| margin: 10px 0 10px 0; | |||
| } | |||
| p.topic-title { | |||
| font-size: 1.1em; | |||
| font-weight: bold; | |||
| margin-top: 10px; | |||
| } | |||
| /* -- admonitions ----------------------------------------------------------- */ | |||
| div.admonition { | |||
| margin-top: 10px; | |||
| margin-bottom: 10px; | |||
| padding: 7px; | |||
| } | |||
| div.admonition dt { | |||
| font-weight: bold; | |||
| } | |||
| p.admonition-title { | |||
| margin: 0px 10px 5px 0px; | |||
| font-weight: bold; | |||
| } | |||
| div.body p.centered { | |||
| text-align: center; | |||
| margin-top: 25px; | |||
| } | |||
| /* -- content of sidebars/topics/admonitions -------------------------------- */ | |||
| div.sidebar > :last-child, | |||
| aside.sidebar > :last-child, | |||
| nav.contents > :last-child, | |||
| aside.topic > :last-child, | |||
| div.topic > :last-child, | |||
| div.admonition > :last-child { | |||
| margin-bottom: 0; | |||
| } | |||
| div.sidebar::after, | |||
| aside.sidebar::after, | |||
| nav.contents::after, | |||
| aside.topic::after, | |||
| div.topic::after, | |||
| div.admonition::after, | |||
| blockquote::after { | |||
| display: block; | |||
| content: ''; | |||
| clear: both; | |||
| } | |||
| /* -- tables ---------------------------------------------------------------- */ | |||
| table.docutils { | |||
| margin-top: 10px; | |||
| margin-bottom: 10px; | |||
| border: 0; | |||
| border-collapse: collapse; | |||
| } | |||
| table.align-center { | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| table.align-default { | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| table caption span.caption-number { | |||
| font-style: italic; | |||
| } | |||
| table caption span.caption-text { | |||
| } | |||
| table.docutils td, table.docutils th { | |||
| padding: 1px 8px 1px 5px; | |||
| border-top: 0; | |||
| border-left: 0; | |||
| border-right: 0; | |||
| border-bottom: 1px solid #aaa; | |||
| } | |||
| th { | |||
| text-align: left; | |||
| padding-right: 5px; | |||
| } | |||
| table.citation { | |||
| border-left: solid 1px gray; | |||
| margin-left: 1px; | |||
| } | |||
| table.citation td { | |||
| border-bottom: none; | |||
| } | |||
| th > :first-child, | |||
| td > :first-child { | |||
| margin-top: 0px; | |||
| } | |||
| th > :last-child, | |||
| td > :last-child { | |||
| margin-bottom: 0px; | |||
| } | |||
| /* -- figures --------------------------------------------------------------- */ | |||
| div.figure, figure { | |||
| margin: 0.5em; | |||
| padding: 0.5em; | |||
| } | |||
| div.figure p.caption, figcaption { | |||
| padding: 0.3em; | |||
| } | |||
| div.figure p.caption span.caption-number, | |||
| figcaption span.caption-number { | |||
| font-style: italic; | |||
| } | |||
| div.figure p.caption span.caption-text, | |||
| figcaption span.caption-text { | |||
| } | |||
| /* -- field list styles ----------------------------------------------------- */ | |||
| table.field-list td, table.field-list th { | |||
| border: 0 !important; | |||
| } | |||
| .field-list ul { | |||
| margin: 0; | |||
| padding-left: 1em; | |||
| } | |||
| .field-list p { | |||
| margin: 0; | |||
| } | |||
| .field-name { | |||
| -moz-hyphens: manual; | |||
| -ms-hyphens: manual; | |||
| -webkit-hyphens: manual; | |||
| hyphens: manual; | |||
| } | |||
| /* -- hlist styles ---------------------------------------------------------- */ | |||
| table.hlist { | |||
| margin: 1em 0; | |||
| } | |||
| table.hlist td { | |||
| vertical-align: top; | |||
| } | |||
| /* -- object description styles --------------------------------------------- */ | |||
| .sig { | |||
| font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; | |||
| } | |||
| .sig-name, code.descname { | |||
| background-color: transparent; | |||
| font-weight: bold; | |||
| } | |||
| .sig-name { | |||
| font-size: 1.1em; | |||
| } | |||
| code.descname { | |||
| font-size: 1.2em; | |||
| } | |||
| .sig-prename, code.descclassname { | |||
| background-color: transparent; | |||
| } | |||
| .optional { | |||
| font-size: 1.3em; | |||
| } | |||
| .sig-paren { | |||
| font-size: larger; | |||
| } | |||
| .sig-param.n { | |||
| font-style: italic; | |||
| } | |||
| /* C++ specific styling */ | |||
| .sig-inline.c-texpr, | |||
| .sig-inline.cpp-texpr { | |||
| font-family: unset; | |||
| } | |||
| .sig.c .k, .sig.c .kt, | |||
| .sig.cpp .k, .sig.cpp .kt { | |||
| color: #0033B3; | |||
| } | |||
| .sig.c .m, | |||
| .sig.cpp .m { | |||
| color: #1750EB; | |||
| } | |||
| .sig.c .s, .sig.c .sc, | |||
| .sig.cpp .s, .sig.cpp .sc { | |||
| color: #067D17; | |||
| } | |||
| /* -- other body styles ----------------------------------------------------- */ | |||
| ol.arabic { | |||
| list-style: decimal; | |||
| } | |||
| ol.loweralpha { | |||
| list-style: lower-alpha; | |||
| } | |||
| ol.upperalpha { | |||
| list-style: upper-alpha; | |||
| } | |||
| ol.lowerroman { | |||
| list-style: lower-roman; | |||
| } | |||
| ol.upperroman { | |||
| list-style: upper-roman; | |||
| } | |||
| :not(li) > ol > li:first-child > :first-child, | |||
| :not(li) > ul > li:first-child > :first-child { | |||
| margin-top: 0px; | |||
| } | |||
| :not(li) > ol > li:last-child > :last-child, | |||
| :not(li) > ul > li:last-child > :last-child { | |||
| margin-bottom: 0px; | |||
| } | |||
| ol.simple ol p, | |||
| ol.simple ul p, | |||
| ul.simple ol p, | |||
| ul.simple ul p { | |||
| margin-top: 0; | |||
| } | |||
| ol.simple > li:not(:first-child) > p, | |||
| ul.simple > li:not(:first-child) > p { | |||
| margin-top: 0; | |||
| } | |||
| ol.simple p, | |||
| ul.simple p { | |||
| margin-bottom: 0; | |||
| } | |||
| aside.footnote > span, | |||
| div.citation > span { | |||
| float: left; | |||
| } | |||
| aside.footnote > span:last-of-type, | |||
| div.citation > span:last-of-type { | |||
| padding-right: 0.5em; | |||
| } | |||
| aside.footnote > p { | |||
| margin-left: 2em; | |||
| } | |||
| div.citation > p { | |||
| margin-left: 4em; | |||
| } | |||
| aside.footnote > p:last-of-type, | |||
| div.citation > p:last-of-type { | |||
| margin-bottom: 0em; | |||
| } | |||
| aside.footnote > p:last-of-type:after, | |||
| div.citation > p:last-of-type:after { | |||
| content: ""; | |||
| clear: both; | |||
| } | |||
| dl.field-list { | |||
| display: grid; | |||
| grid-template-columns: fit-content(30%) auto; | |||
| } | |||
| dl.field-list > dt { | |||
| font-weight: bold; | |||
| word-break: break-word; | |||
| padding-left: 0.5em; | |||
| padding-right: 5px; | |||
| } | |||
| dl.field-list > dd { | |||
| padding-left: 0.5em; | |||
| margin-top: 0em; | |||
| margin-left: 0em; | |||
| margin-bottom: 0em; | |||
| } | |||
| dl { | |||
| margin-bottom: 15px; | |||
| } | |||
| dd > :first-child { | |||
| margin-top: 0px; | |||
| } | |||
| dd ul, dd table { | |||
| margin-bottom: 10px; | |||
| } | |||
| dd { | |||
| margin-top: 3px; | |||
| margin-bottom: 10px; | |||
| margin-left: 30px; | |||
| } | |||
| dl > dd:last-child, | |||
| dl > dd:last-child > :last-child { | |||
| margin-bottom: 0; | |||
| } | |||
| dt:target, span.highlighted { | |||
| background-color: #fbe54e; | |||
| } | |||
| rect.highlighted { | |||
| fill: #fbe54e; | |||
| } | |||
| dl.glossary dt { | |||
| font-weight: bold; | |||
| font-size: 1.1em; | |||
| } | |||
| .versionmodified { | |||
| font-style: italic; | |||
| } | |||
| .system-message { | |||
| background-color: #fda; | |||
| padding: 5px; | |||
| border: 3px solid red; | |||
| } | |||
| .footnote:target { | |||
| background-color: #ffa; | |||
| } | |||
| .line-block { | |||
| display: block; | |||
| margin-top: 1em; | |||
| margin-bottom: 1em; | |||
| } | |||
| .line-block .line-block { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| margin-left: 1.5em; | |||
| } | |||
| .guilabel, .menuselection { | |||
| font-family: sans-serif; | |||
| } | |||
| .accelerator { | |||
| text-decoration: underline; | |||
| } | |||
| .classifier { | |||
| font-style: oblique; | |||
| } | |||
| .classifier:before { | |||
| font-style: normal; | |||
| margin: 0 0.5em; | |||
| content: ":"; | |||
| display: inline-block; | |||
| } | |||
| abbr, acronym { | |||
| border-bottom: dotted 1px; | |||
| cursor: help; | |||
| } | |||
| /* -- code displays --------------------------------------------------------- */ | |||
| pre { | |||
| overflow: auto; | |||
| overflow-y: hidden; /* fixes display issues on Chrome browsers */ | |||
| } | |||
| pre, div[class*="highlight-"] { | |||
| clear: both; | |||
| } | |||
| span.pre { | |||
| -moz-hyphens: none; | |||
| -ms-hyphens: none; | |||
| -webkit-hyphens: none; | |||
| hyphens: none; | |||
| white-space: nowrap; | |||
| } | |||
| div[class*="highlight-"] { | |||
| margin: 1em 0; | |||
| } | |||
| td.linenos pre { | |||
| border: 0; | |||
| background-color: transparent; | |||
| color: #aaa; | |||
| } | |||
| table.highlighttable { | |||
| display: block; | |||
| } | |||
| table.highlighttable tbody { | |||
| display: block; | |||
| } | |||
| table.highlighttable tr { | |||
| display: flex; | |||
| } | |||
| table.highlighttable td { | |||
| margin: 0; | |||
| padding: 0; | |||
| } | |||
| table.highlighttable td.linenos { | |||
| padding-right: 0.5em; | |||
| } | |||
| table.highlighttable td.code { | |||
| flex: 1; | |||
| overflow: hidden; | |||
| } | |||
| .highlight .hll { | |||
| display: block; | |||
| } | |||
| div.highlight pre, | |||
| table.highlighttable pre { | |||
| margin: 0; | |||
| } | |||
| div.code-block-caption + div { | |||
| margin-top: 0; | |||
| } | |||
| div.code-block-caption { | |||
| margin-top: 1em; | |||
| padding: 2px 5px; | |||
| font-size: small; | |||
| } | |||
| div.code-block-caption code { | |||
| background-color: transparent; | |||
| } | |||
| table.highlighttable td.linenos, | |||
| span.linenos, | |||
| div.highlight span.gp { /* gp: Generic.Prompt */ | |||
| user-select: none; | |||
| -webkit-user-select: text; /* Safari fallback only */ | |||
| -webkit-user-select: none; /* Chrome/Safari */ | |||
| -moz-user-select: none; /* Firefox */ | |||
| -ms-user-select: none; /* IE10+ */ | |||
| } | |||
| div.code-block-caption span.caption-number { | |||
| padding: 0.1em 0.3em; | |||
| font-style: italic; | |||
| } | |||
| div.code-block-caption span.caption-text { | |||
| } | |||
| div.literal-block-wrapper { | |||
| margin: 1em 0; | |||
| } | |||
| code.xref, a code { | |||
| background-color: transparent; | |||
| font-weight: bold; | |||
| } | |||
| h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { | |||
| background-color: transparent; | |||
| } | |||
| .viewcode-link { | |||
| float: right; | |||
| } | |||
| .viewcode-back { | |||
| float: right; | |||
| font-family: sans-serif; | |||
| } | |||
| div.viewcode-block:target { | |||
| margin: -1px -10px; | |||
| padding: 0 10px; | |||
| } | |||
| /* -- math display ---------------------------------------------------------- */ | |||
| img.math { | |||
| vertical-align: middle; | |||
| } | |||
| div.body div.math p { | |||
| text-align: center; | |||
| } | |||
| span.eqno { | |||
| float: right; | |||
| } | |||
| span.eqno a.headerlink { | |||
| position: absolute; | |||
| z-index: 1; | |||
| } | |||
| div.math:hover a.headerlink { | |||
| visibility: visible; | |||
| } | |||
| /* -- printout stylesheet --------------------------------------------------- */ | |||
| @media print { | |||
| div.document, | |||
| div.documentwrapper, | |||
| div.bodywrapper { | |||
| margin: 0 !important; | |||
| width: 100%; | |||
| } | |||
| div.sphinxsidebar, | |||
| div.related, | |||
| div.footer, | |||
| #top-link { | |||
| display: none; | |||
| } | |||
| } | |||
| @@ -0,0 +1 @@ | |||
| .clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} | |||
| @@ -0,0 +1,156 @@ | |||
| /* | |||
| * doctools.js | |||
| * ~~~~~~~~~~~ | |||
| * | |||
| * Base JavaScript utilities for all Sphinx HTML documentation. | |||
| * | |||
| * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| "use strict"; | |||
| const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ | |||
| "TEXTAREA", | |||
| "INPUT", | |||
| "SELECT", | |||
| "BUTTON", | |||
| ]); | |||
| const _ready = (callback) => { | |||
| if (document.readyState !== "loading") { | |||
| callback(); | |||
| } else { | |||
| document.addEventListener("DOMContentLoaded", callback); | |||
| } | |||
| }; | |||
| /** | |||
| * Small JavaScript module for the documentation. | |||
| */ | |||
| const Documentation = { | |||
| init: () => { | |||
| Documentation.initDomainIndexTable(); | |||
| Documentation.initOnKeyListeners(); | |||
| }, | |||
| /** | |||
| * i18n support | |||
| */ | |||
| TRANSLATIONS: {}, | |||
| PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), | |||
| LOCALE: "unknown", | |||
| // gettext and ngettext don't access this so that the functions | |||
| // can safely bound to a different name (_ = Documentation.gettext) | |||
| gettext: (string) => { | |||
| const translated = Documentation.TRANSLATIONS[string]; | |||
| switch (typeof translated) { | |||
| case "undefined": | |||
| return string; // no translation | |||
| case "string": | |||
| return translated; // translation exists | |||
| default: | |||
| return translated[0]; // (singular, plural) translation tuple exists | |||
| } | |||
| }, | |||
| ngettext: (singular, plural, n) => { | |||
| const translated = Documentation.TRANSLATIONS[singular]; | |||
| if (typeof translated !== "undefined") | |||
| return translated[Documentation.PLURAL_EXPR(n)]; | |||
| return n === 1 ? singular : plural; | |||
| }, | |||
| addTranslations: (catalog) => { | |||
| Object.assign(Documentation.TRANSLATIONS, catalog.messages); | |||
| Documentation.PLURAL_EXPR = new Function( | |||
| "n", | |||
| `return (${catalog.plural_expr})` | |||
| ); | |||
| Documentation.LOCALE = catalog.locale; | |||
| }, | |||
| /** | |||
| * helper function to focus on search bar | |||
| */ | |||
| focusSearchBar: () => { | |||
| document.querySelectorAll("input[name=q]")[0]?.focus(); | |||
| }, | |||
| /** | |||
| * Initialise the domain index toggle buttons | |||
| */ | |||
| initDomainIndexTable: () => { | |||
| const toggler = (el) => { | |||
| const idNumber = el.id.substr(7); | |||
| const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); | |||
| if (el.src.substr(-9) === "minus.png") { | |||
| el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; | |||
| toggledRows.forEach((el) => (el.style.display = "none")); | |||
| } else { | |||
| el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; | |||
| toggledRows.forEach((el) => (el.style.display = "")); | |||
| } | |||
| }; | |||
| const togglerElements = document.querySelectorAll("img.toggler"); | |||
| togglerElements.forEach((el) => | |||
| el.addEventListener("click", (event) => toggler(event.currentTarget)) | |||
| ); | |||
| togglerElements.forEach((el) => (el.style.display = "")); | |||
| if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); | |||
| }, | |||
| initOnKeyListeners: () => { | |||
| // only install a listener if it is really needed | |||
| if ( | |||
| !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && | |||
| !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS | |||
| ) | |||
| return; | |||
| document.addEventListener("keydown", (event) => { | |||
| // bail for input elements | |||
| if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; | |||
| // bail with special keys | |||
| if (event.altKey || event.ctrlKey || event.metaKey) return; | |||
| if (!event.shiftKey) { | |||
| switch (event.key) { | |||
| case "ArrowLeft": | |||
| if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; | |||
| const prevLink = document.querySelector('link[rel="prev"]'); | |||
| if (prevLink && prevLink.href) { | |||
| window.location.href = prevLink.href; | |||
| event.preventDefault(); | |||
| } | |||
| break; | |||
| case "ArrowRight": | |||
| if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; | |||
| const nextLink = document.querySelector('link[rel="next"]'); | |||
| if (nextLink && nextLink.href) { | |||
| window.location.href = nextLink.href; | |||
| event.preventDefault(); | |||
| } | |||
| break; | |||
| } | |||
| } | |||
| // some keyboard layouts may need Shift to get / | |||
| switch (event.key) { | |||
| case "/": | |||
| if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; | |||
| Documentation.focusSearchBar(); | |||
| event.preventDefault(); | |||
| } | |||
| }); | |||
| }, | |||
| }; | |||
| // quick alias for translations | |||
| const _ = Documentation.gettext; | |||
| _ready(Documentation.init); | |||
| @@ -0,0 +1,14 @@ | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), | |||
| VERSION: '0.1.0.99', | |||
| LANGUAGE: 'en-US', | |||
| COLLAPSE_INDEX: false, | |||
| BUILDER: 'html', | |||
| FILE_SUFFIX: '.html', | |||
| LINK_SUFFIX: '.html', | |||
| HAS_SOURCE: true, | |||
| SOURCELINK_SUFFIX: '.txt', | |||
| NAVIGATION_WITH_KEYS: false, | |||
| SHOW_SEARCH_SUMMARY: true, | |||
| ENABLE_SEARCH_SHORTCUTS: true, | |||
| }; | |||
| @@ -0,0 +1 @@ | |||
| !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); | |||
| @@ -0,0 +1,4 @@ | |||
| /** | |||
| * @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed | |||
| */ | |||
| !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); | |||
| @@ -0,0 +1,4 @@ | |||
| /** | |||
| * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed | |||
| */ | |||
| !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); | |||
| @@ -0,0 +1,199 @@ | |||
| /* | |||
| * language_data.js | |||
| * ~~~~~~~~~~~~~~~~ | |||
| * | |||
| * This script contains the language-specific data used by searchtools.js, | |||
| * namely the list of stopwords, stemmer, scorer and splitter. | |||
| * | |||
| * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; | |||
| /* Non-minified version is copied as a separate JS file, is available */ | |||
| /** | |||
| * Porter Stemmer | |||
| */ | |||
| var Stemmer = function() { | |||
| var step2list = { | |||
| ational: 'ate', | |||
| tional: 'tion', | |||
| enci: 'ence', | |||
| anci: 'ance', | |||
| izer: 'ize', | |||
| bli: 'ble', | |||
| alli: 'al', | |||
| entli: 'ent', | |||
| eli: 'e', | |||
| ousli: 'ous', | |||
| ization: 'ize', | |||
| ation: 'ate', | |||
| ator: 'ate', | |||
| alism: 'al', | |||
| iveness: 'ive', | |||
| fulness: 'ful', | |||
| ousness: 'ous', | |||
| aliti: 'al', | |||
| iviti: 'ive', | |||
| biliti: 'ble', | |||
| logi: 'log' | |||
| }; | |||
| var step3list = { | |||
| icate: 'ic', | |||
| ative: '', | |||
| alize: 'al', | |||
| iciti: 'ic', | |||
| ical: 'ic', | |||
| ful: '', | |||
| ness: '' | |||
| }; | |||
| var c = "[^aeiou]"; // consonant | |||
| var v = "[aeiouy]"; // vowel | |||
| var C = c + "[^aeiouy]*"; // consonant sequence | |||
| var V = v + "[aeiou]*"; // vowel sequence | |||
| var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 | |||
| var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 | |||
| var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 | |||
| var s_v = "^(" + C + ")?" + v; // vowel in stem | |||
| this.stemWord = function (w) { | |||
| var stem; | |||
| var suffix; | |||
| var firstch; | |||
| var origword = w; | |||
| if (w.length < 3) | |||
| return w; | |||
| var re; | |||
| var re2; | |||
| var re3; | |||
| var re4; | |||
| firstch = w.substr(0,1); | |||
| if (firstch == "y") | |||
| w = firstch.toUpperCase() + w.substr(1); | |||
| // Step 1a | |||
| re = /^(.+?)(ss|i)es$/; | |||
| re2 = /^(.+?)([^s])s$/; | |||
| if (re.test(w)) | |||
| w = w.replace(re,"$1$2"); | |||
| else if (re2.test(w)) | |||
| w = w.replace(re2,"$1$2"); | |||
| // Step 1b | |||
| re = /^(.+?)eed$/; | |||
| re2 = /^(.+?)(ed|ing)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| re = new RegExp(mgr0); | |||
| if (re.test(fp[1])) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| } | |||
| else if (re2.test(w)) { | |||
| var fp = re2.exec(w); | |||
| stem = fp[1]; | |||
| re2 = new RegExp(s_v); | |||
| if (re2.test(stem)) { | |||
| w = stem; | |||
| re2 = /(at|bl|iz)$/; | |||
| re3 = new RegExp("([^aeiouylsz])\\1$"); | |||
| re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | |||
| if (re2.test(w)) | |||
| w = w + "e"; | |||
| else if (re3.test(w)) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| else if (re4.test(w)) | |||
| w = w + "e"; | |||
| } | |||
| } | |||
| // Step 1c | |||
| re = /^(.+?)y$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(s_v); | |||
| if (re.test(stem)) | |||
| w = stem + "i"; | |||
| } | |||
| // Step 2 | |||
| re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| suffix = fp[2]; | |||
| re = new RegExp(mgr0); | |||
| if (re.test(stem)) | |||
| w = stem + step2list[suffix]; | |||
| } | |||
| // Step 3 | |||
| re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| suffix = fp[2]; | |||
| re = new RegExp(mgr0); | |||
| if (re.test(stem)) | |||
| w = stem + step3list[suffix]; | |||
| } | |||
| // Step 4 | |||
| re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; | |||
| re2 = /^(.+?)(s|t)(ion)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(mgr1); | |||
| if (re.test(stem)) | |||
| w = stem; | |||
| } | |||
| else if (re2.test(w)) { | |||
| var fp = re2.exec(w); | |||
| stem = fp[1] + fp[2]; | |||
| re2 = new RegExp(mgr1); | |||
| if (re2.test(stem)) | |||
| w = stem; | |||
| } | |||
| // Step 5 | |||
| re = /^(.+?)e$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(mgr1); | |||
| re2 = new RegExp(meq1); | |||
| re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | |||
| if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) | |||
| w = stem; | |||
| } | |||
| re = /ll$/; | |||
| re2 = new RegExp(mgr1); | |||
| if (re.test(w) && re2.test(w)) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| // and turn initial Y back to y | |||
| if (firstch == "y") | |||
| w = firstch.toLowerCase() + w.substr(1); | |||
| return w; | |||
| } | |||
| } | |||
| @@ -0,0 +1,74 @@ | |||
| pre { line-height: 125%; } | |||
| td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } | |||
| span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } | |||
| td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } | |||
| span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } | |||
| .highlight .hll { background-color: #ffffcc } | |||
| .highlight { background: #eeffcc; } | |||
| .highlight .c { color: #408090; font-style: italic } /* Comment */ | |||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | |||
| .highlight .k { color: #007020; font-weight: bold } /* Keyword */ | |||
| .highlight .o { color: #666666 } /* Operator */ | |||
| .highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ | |||
| .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ | |||
| .highlight .cp { color: #007020 } /* Comment.Preproc */ | |||
| .highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ | |||
| .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ | |||
| .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ | |||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | |||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | |||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | |||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | |||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | |||
| .highlight .go { color: #333333 } /* Generic.Output */ | |||
| .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ | |||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | |||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | |||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | |||
| .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ | |||
| .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ | |||
| .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ | |||
| .highlight .kp { color: #007020 } /* Keyword.Pseudo */ | |||
| .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ | |||
| .highlight .kt { color: #902000 } /* Keyword.Type */ | |||
| .highlight .m { color: #208050 } /* Literal.Number */ | |||
| .highlight .s { color: #4070a0 } /* Literal.String */ | |||
| .highlight .na { color: #4070a0 } /* Name.Attribute */ | |||
| .highlight .nb { color: #007020 } /* Name.Builtin */ | |||
| .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ | |||
| .highlight .no { color: #60add5 } /* Name.Constant */ | |||
| .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ | |||
| .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ | |||
| .highlight .ne { color: #007020 } /* Name.Exception */ | |||
| .highlight .nf { color: #06287e } /* Name.Function */ | |||
| .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ | |||
| .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ | |||
| .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ | |||
| .highlight .nv { color: #bb60d5 } /* Name.Variable */ | |||
| .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ | |||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | |||
| .highlight .mb { color: #208050 } /* Literal.Number.Bin */ | |||
| .highlight .mf { color: #208050 } /* Literal.Number.Float */ | |||
| .highlight .mh { color: #208050 } /* Literal.Number.Hex */ | |||
| .highlight .mi { color: #208050 } /* Literal.Number.Integer */ | |||
| .highlight .mo { color: #208050 } /* Literal.Number.Oct */ | |||
| .highlight .sa { color: #4070a0 } /* Literal.String.Affix */ | |||
| .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ | |||
| .highlight .sc { color: #4070a0 } /* Literal.String.Char */ | |||
| .highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ | |||
| .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ | |||
| .highlight .s2 { color: #4070a0 } /* Literal.String.Double */ | |||
| .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ | |||
| .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ | |||
| .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ | |||
| .highlight .sx { color: #c65d09 } /* Literal.String.Other */ | |||
| .highlight .sr { color: #235388 } /* Literal.String.Regex */ | |||
| .highlight .s1 { color: #4070a0 } /* Literal.String.Single */ | |||
| .highlight .ss { color: #517918 } /* Literal.String.Symbol */ | |||
| .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ | |||
| .highlight .fm { color: #06287e } /* Name.Function.Magic */ | |||
| .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ | |||
| .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ | |||
| .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ | |||
| .highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ | |||
| .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ | |||
| @@ -0,0 +1,566 @@ | |||
| /* | |||
| * searchtools.js | |||
| * ~~~~~~~~~~~~~~~~ | |||
| * | |||
| * Sphinx JavaScript utilities for the full-text search. | |||
| * | |||
| * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| "use strict"; | |||
| /** | |||
| * Simple result scoring code. | |||
| */ | |||
| if (typeof Scorer === "undefined") { | |||
| var Scorer = { | |||
| // Implement the following function to further tweak the score for each result | |||
| // The function takes a result array [docname, title, anchor, descr, score, filename] | |||
| // and returns the new score. | |||
| /* | |||
| score: result => { | |||
| const [docname, title, anchor, descr, score, filename] = result | |||
| return score | |||
| }, | |||
| */ | |||
| // query matches the full name of an object | |||
| objNameMatch: 11, | |||
| // or matches in the last dotted part of the object name | |||
| objPartialMatch: 6, | |||
| // Additive scores depending on the priority of the object | |||
| objPrio: { | |||
| 0: 15, // used to be importantResults | |||
| 1: 5, // used to be objectResults | |||
| 2: -5, // used to be unimportantResults | |||
| }, | |||
| // Used when the priority is not in the mapping. | |||
| objPrioDefault: 0, | |||
| // query found in title | |||
| title: 15, | |||
| partialTitle: 7, | |||
| // query found in terms | |||
| term: 5, | |||
| partialTerm: 2, | |||
| }; | |||
| } | |||
| const _removeChildren = (element) => { | |||
| while (element && element.lastChild) element.removeChild(element.lastChild); | |||
| }; | |||
| /** | |||
| * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping | |||
| */ | |||
| const _escapeRegExp = (string) => | |||
| string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string | |||
| const _displayItem = (item, searchTerms) => { | |||
| const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; | |||
| const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; | |||
| const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; | |||
| const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; | |||
| const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; | |||
| const [docName, title, anchor, descr, score, _filename] = item; | |||
| let listItem = document.createElement("li"); | |||
| let requestUrl; | |||
| let linkUrl; | |||
| if (docBuilder === "dirhtml") { | |||
| // dirhtml builder | |||
| let dirname = docName + "/"; | |||
| if (dirname.match(/\/index\/$/)) | |||
| dirname = dirname.substring(0, dirname.length - 6); | |||
| else if (dirname === "index/") dirname = ""; | |||
| requestUrl = docUrlRoot + dirname; | |||
| linkUrl = requestUrl; | |||
| } else { | |||
| // normal html builders | |||
| requestUrl = docUrlRoot + docName + docFileSuffix; | |||
| linkUrl = docName + docLinkSuffix; | |||
| } | |||
| let linkEl = listItem.appendChild(document.createElement("a")); | |||
| linkEl.href = linkUrl + anchor; | |||
| linkEl.dataset.score = score; | |||
| linkEl.innerHTML = title; | |||
| if (descr) | |||
| listItem.appendChild(document.createElement("span")).innerHTML = | |||
| " (" + descr + ")"; | |||
| else if (showSearchSummary) | |||
| fetch(requestUrl) | |||
| .then((responseData) => responseData.text()) | |||
| .then((data) => { | |||
| if (data) | |||
| listItem.appendChild( | |||
| Search.makeSearchSummary(data, searchTerms) | |||
| ); | |||
| }); | |||
| Search.output.appendChild(listItem); | |||
| }; | |||
| const _finishSearch = (resultCount) => { | |||
| Search.stopPulse(); | |||
| Search.title.innerText = _("Search Results"); | |||
| if (!resultCount) | |||
| Search.status.innerText = Documentation.gettext( | |||
| "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." | |||
| ); | |||
| else | |||
| Search.status.innerText = _( | |||
| `Search finished, found ${resultCount} page(s) matching the search query.` | |||
| ); | |||
| }; | |||
| const _displayNextItem = ( | |||
| results, | |||
| resultCount, | |||
| searchTerms | |||
| ) => { | |||
| // results left, load the summary and display it | |||
| // this is intended to be dynamic (don't sub resultsCount) | |||
| if (results.length) { | |||
| _displayItem(results.pop(), searchTerms); | |||
| setTimeout( | |||
| () => _displayNextItem(results, resultCount, searchTerms), | |||
| 5 | |||
| ); | |||
| } | |||
| // search finished, update title and status message | |||
| else _finishSearch(resultCount); | |||
| }; | |||
| /** | |||
| * Default splitQuery function. Can be overridden in ``sphinx.search`` with a | |||
| * custom function per language. | |||
| * | |||
| * The regular expression works by splitting the string on consecutive characters | |||
| * that are not Unicode letters, numbers, underscores, or emoji characters. | |||
| * This is the same as ``\W+`` in Python, preserving the surrogate pair area. | |||
| */ | |||
| if (typeof splitQuery === "undefined") { | |||
| var splitQuery = (query) => query | |||
| .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) | |||
| .filter(term => term) // remove remaining empty strings | |||
| } | |||
| /** | |||
| * Search Module | |||
| */ | |||
| const Search = { | |||
| _index: null, | |||
| _queued_query: null, | |||
| _pulse_status: -1, | |||
| htmlToText: (htmlString) => { | |||
| const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); | |||
| htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); | |||
| const docContent = htmlElement.querySelector('[role="main"]'); | |||
| if (docContent !== undefined) return docContent.textContent; | |||
| console.warn( | |||
| "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." | |||
| ); | |||
| return ""; | |||
| }, | |||
| init: () => { | |||
| const query = new URLSearchParams(window.location.search).get("q"); | |||
| document | |||
| .querySelectorAll('input[name="q"]') | |||
| .forEach((el) => (el.value = query)); | |||
| if (query) Search.performSearch(query); | |||
| }, | |||
| loadIndex: (url) => | |||
| (document.body.appendChild(document.createElement("script")).src = url), | |||
| setIndex: (index) => { | |||
| Search._index = index; | |||
| if (Search._queued_query !== null) { | |||
| const query = Search._queued_query; | |||
| Search._queued_query = null; | |||
| Search.query(query); | |||
| } | |||
| }, | |||
| hasIndex: () => Search._index !== null, | |||
| deferQuery: (query) => (Search._queued_query = query), | |||
| stopPulse: () => (Search._pulse_status = -1), | |||
| startPulse: () => { | |||
| if (Search._pulse_status >= 0) return; | |||
| const pulse = () => { | |||
| Search._pulse_status = (Search._pulse_status + 1) % 4; | |||
| Search.dots.innerText = ".".repeat(Search._pulse_status); | |||
| if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); | |||
| }; | |||
| pulse(); | |||
| }, | |||
| /** | |||
| * perform a search for something (or wait until index is loaded) | |||
| */ | |||
| performSearch: (query) => { | |||
| // create the required interface elements | |||
| const searchText = document.createElement("h2"); | |||
| searchText.textContent = _("Searching"); | |||
| const searchSummary = document.createElement("p"); | |||
| searchSummary.classList.add("search-summary"); | |||
| searchSummary.innerText = ""; | |||
| const searchList = document.createElement("ul"); | |||
| searchList.classList.add("search"); | |||
| const out = document.getElementById("search-results"); | |||
| Search.title = out.appendChild(searchText); | |||
| Search.dots = Search.title.appendChild(document.createElement("span")); | |||
| Search.status = out.appendChild(searchSummary); | |||
| Search.output = out.appendChild(searchList); | |||
| const searchProgress = document.getElementById("search-progress"); | |||
| // Some themes don't use the search progress node | |||
| if (searchProgress) { | |||
| searchProgress.innerText = _("Preparing search..."); | |||
| } | |||
| Search.startPulse(); | |||
| // index already loaded, the browser was quick! | |||
| if (Search.hasIndex()) Search.query(query); | |||
| else Search.deferQuery(query); | |||
| }, | |||
| /** | |||
| * execute search (requires search index to be loaded) | |||
| */ | |||
| query: (query) => { | |||
| const filenames = Search._index.filenames; | |||
| const docNames = Search._index.docnames; | |||
| const titles = Search._index.titles; | |||
| const allTitles = Search._index.alltitles; | |||
| const indexEntries = Search._index.indexentries; | |||
| // stem the search terms and add them to the correct list | |||
| const stemmer = new Stemmer(); | |||
| const searchTerms = new Set(); | |||
| const excludedTerms = new Set(); | |||
| const highlightTerms = new Set(); | |||
| const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); | |||
| splitQuery(query.trim()).forEach((queryTerm) => { | |||
| const queryTermLower = queryTerm.toLowerCase(); | |||
| // maybe skip this "word" | |||
| // stopwords array is from language_data.js | |||
| if ( | |||
| stopwords.indexOf(queryTermLower) !== -1 || | |||
| queryTerm.match(/^\d+$/) | |||
| ) | |||
| return; | |||
| // stem the word | |||
| let word = stemmer.stemWord(queryTermLower); | |||
| // select the correct list | |||
| if (word[0] === "-") excludedTerms.add(word.substr(1)); | |||
| else { | |||
| searchTerms.add(word); | |||
| highlightTerms.add(queryTermLower); | |||
| } | |||
| }); | |||
| if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js | |||
| localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) | |||
| } | |||
| // console.debug("SEARCH: searching for:"); | |||
| // console.info("required: ", [...searchTerms]); | |||
| // console.info("excluded: ", [...excludedTerms]); | |||
| // array of [docname, title, anchor, descr, score, filename] | |||
| let results = []; | |||
| _removeChildren(document.getElementById("search-progress")); | |||
| const queryLower = query.toLowerCase(); | |||
| for (const [title, foundTitles] of Object.entries(allTitles)) { | |||
| if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { | |||
| for (const [file, id] of foundTitles) { | |||
| let score = Math.round(100 * queryLower.length / title.length) | |||
| results.push([ | |||
| docNames[file], | |||
| titles[file] !== title ? `${titles[file]} > ${title}` : title, | |||
| id !== null ? "#" + id : "", | |||
| null, | |||
| score, | |||
| filenames[file], | |||
| ]); | |||
| } | |||
| } | |||
| } | |||
| // search for explicit entries in index directives | |||
| for (const [entry, foundEntries] of Object.entries(indexEntries)) { | |||
| if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { | |||
| for (const [file, id] of foundEntries) { | |||
| let score = Math.round(100 * queryLower.length / entry.length) | |||
| results.push([ | |||
| docNames[file], | |||
| titles[file], | |||
| id ? "#" + id : "", | |||
| null, | |||
| score, | |||
| filenames[file], | |||
| ]); | |||
| } | |||
| } | |||
| } | |||
| // lookup as object | |||
| objectTerms.forEach((term) => | |||
| results.push(...Search.performObjectSearch(term, objectTerms)) | |||
| ); | |||
| // lookup as search terms in fulltext | |||
| results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); | |||
| // let the scorer override scores with a custom scoring function | |||
| if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); | |||
| // now sort the results by score (in opposite order of appearance, since the | |||
| // display function below uses pop() to retrieve items) and then | |||
| // alphabetically | |||
| results.sort((a, b) => { | |||
| const leftScore = a[4]; | |||
| const rightScore = b[4]; | |||
| if (leftScore === rightScore) { | |||
| // same score: sort alphabetically | |||
| const leftTitle = a[1].toLowerCase(); | |||
| const rightTitle = b[1].toLowerCase(); | |||
| if (leftTitle === rightTitle) return 0; | |||
| return leftTitle > rightTitle ? -1 : 1; // inverted is intentional | |||
| } | |||
| return leftScore > rightScore ? 1 : -1; | |||
| }); | |||
| // remove duplicate search results | |||
| // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept | |||
| let seen = new Set(); | |||
| results = results.reverse().reduce((acc, result) => { | |||
| let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); | |||
| if (!seen.has(resultStr)) { | |||
| acc.push(result); | |||
| seen.add(resultStr); | |||
| } | |||
| return acc; | |||
| }, []); | |||
| results = results.reverse(); | |||
| // for debugging | |||
| //Search.lastresults = results.slice(); // a copy | |||
| // console.info("search results:", Search.lastresults); | |||
| // print the results | |||
| _displayNextItem(results, results.length, searchTerms); | |||
| }, | |||
| /** | |||
| * search for object names | |||
| */ | |||
| performObjectSearch: (object, objectTerms) => { | |||
| const filenames = Search._index.filenames; | |||
| const docNames = Search._index.docnames; | |||
| const objects = Search._index.objects; | |||
| const objNames = Search._index.objnames; | |||
| const titles = Search._index.titles; | |||
| const results = []; | |||
| const objectSearchCallback = (prefix, match) => { | |||
| const name = match[4] | |||
| const fullname = (prefix ? prefix + "." : "") + name; | |||
| const fullnameLower = fullname.toLowerCase(); | |||
| if (fullnameLower.indexOf(object) < 0) return; | |||
| let score = 0; | |||
| const parts = fullnameLower.split("."); | |||
| // check for different match types: exact matches of full name or | |||
| // "last name" (i.e. last dotted part) | |||
| if (fullnameLower === object || parts.slice(-1)[0] === object) | |||
| score += Scorer.objNameMatch; | |||
| else if (parts.slice(-1)[0].indexOf(object) > -1) | |||
| score += Scorer.objPartialMatch; // matches in last name | |||
| const objName = objNames[match[1]][2]; | |||
| const title = titles[match[0]]; | |||
| // If more than one term searched for, we require other words to be | |||
| // found in the name/title/description | |||
| const otherTerms = new Set(objectTerms); | |||
| otherTerms.delete(object); | |||
| if (otherTerms.size > 0) { | |||
| const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); | |||
| if ( | |||
| [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) | |||
| ) | |||
| return; | |||
| } | |||
| let anchor = match[3]; | |||
| if (anchor === "") anchor = fullname; | |||
| else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; | |||
| const descr = objName + _(", in ") + title; | |||
| // add custom score for some objects according to scorer | |||
| if (Scorer.objPrio.hasOwnProperty(match[2])) | |||
| score += Scorer.objPrio[match[2]]; | |||
| else score += Scorer.objPrioDefault; | |||
| results.push([ | |||
| docNames[match[0]], | |||
| fullname, | |||
| "#" + anchor, | |||
| descr, | |||
| score, | |||
| filenames[match[0]], | |||
| ]); | |||
| }; | |||
| Object.keys(objects).forEach((prefix) => | |||
| objects[prefix].forEach((array) => | |||
| objectSearchCallback(prefix, array) | |||
| ) | |||
| ); | |||
| return results; | |||
| }, | |||
| /** | |||
| * search for full-text terms in the index | |||
| */ | |||
| performTermsSearch: (searchTerms, excludedTerms) => { | |||
| // prepare search | |||
| const terms = Search._index.terms; | |||
| const titleTerms = Search._index.titleterms; | |||
| const filenames = Search._index.filenames; | |||
| const docNames = Search._index.docnames; | |||
| const titles = Search._index.titles; | |||
| const scoreMap = new Map(); | |||
| const fileMap = new Map(); | |||
| // perform the search on the required terms | |||
| searchTerms.forEach((word) => { | |||
| const files = []; | |||
| const arr = [ | |||
| { files: terms[word], score: Scorer.term }, | |||
| { files: titleTerms[word], score: Scorer.title }, | |||
| ]; | |||
| // add support for partial matches | |||
| if (word.length > 2) { | |||
| const escapedWord = _escapeRegExp(word); | |||
| Object.keys(terms).forEach((term) => { | |||
| if (term.match(escapedWord) && !terms[word]) | |||
| arr.push({ files: terms[term], score: Scorer.partialTerm }); | |||
| }); | |||
| Object.keys(titleTerms).forEach((term) => { | |||
| if (term.match(escapedWord) && !titleTerms[word]) | |||
| arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); | |||
| }); | |||
| } | |||
| // no match but word was a required one | |||
| if (arr.every((record) => record.files === undefined)) return; | |||
| // found search word in contents | |||
| arr.forEach((record) => { | |||
| if (record.files === undefined) return; | |||
| let recordFiles = record.files; | |||
| if (recordFiles.length === undefined) recordFiles = [recordFiles]; | |||
| files.push(...recordFiles); | |||
| // set score for the word in each file | |||
| recordFiles.forEach((file) => { | |||
| if (!scoreMap.has(file)) scoreMap.set(file, {}); | |||
| scoreMap.get(file)[word] = record.score; | |||
| }); | |||
| }); | |||
| // create the mapping | |||
| files.forEach((file) => { | |||
| if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) | |||
| fileMap.get(file).push(word); | |||
| else fileMap.set(file, [word]); | |||
| }); | |||
| }); | |||
| // now check if the files don't contain excluded terms | |||
| const results = []; | |||
| for (const [file, wordList] of fileMap) { | |||
| // check if all requirements are matched | |||
| // as search terms with length < 3 are discarded | |||
| const filteredTermCount = [...searchTerms].filter( | |||
| (term) => term.length > 2 | |||
| ).length; | |||
| if ( | |||
| wordList.length !== searchTerms.size && | |||
| wordList.length !== filteredTermCount | |||
| ) | |||
| continue; | |||
| // ensure that none of the excluded terms is in the search result | |||
| if ( | |||
| [...excludedTerms].some( | |||
| (term) => | |||
| terms[term] === file || | |||
| titleTerms[term] === file || | |||
| (terms[term] || []).includes(file) || | |||
| (titleTerms[term] || []).includes(file) | |||
| ) | |||
| ) | |||
| break; | |||
| // select one (max) score for the file. | |||
| const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); | |||
| // add result to the result list | |||
| results.push([ | |||
| docNames[file], | |||
| titles[file], | |||
| "", | |||
| null, | |||
| score, | |||
| filenames[file], | |||
| ]); | |||
| } | |||
| return results; | |||
| }, | |||
| /** | |||
| * helper function to return a node containing the | |||
| * search summary for a given text. keywords is a list | |||
| * of stemmed words. | |||
| */ | |||
| makeSearchSummary: (htmlText, keywords) => { | |||
| const text = Search.htmlToText(htmlText); | |||
| if (text === "") return null; | |||
| const textLower = text.toLowerCase(); | |||
| const actualStartPosition = [...keywords] | |||
| .map((k) => textLower.indexOf(k.toLowerCase())) | |||
| .filter((i) => i > -1) | |||
| .slice(-1)[0]; | |||
| const startWithContext = Math.max(actualStartPosition - 120, 0); | |||
| const top = startWithContext === 0 ? "" : "..."; | |||
| const tail = startWithContext + 240 < text.length ? "..." : ""; | |||
| let summary = document.createElement("p"); | |||
| summary.classList.add("context"); | |||
| summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; | |||
| return summary; | |||
| }, | |||
| }; | |||
| _ready(Search.init); | |||
| @@ -0,0 +1,144 @@ | |||
| /* Highlighting utilities for Sphinx HTML documentation. */ | |||
| "use strict"; | |||
| const SPHINX_HIGHLIGHT_ENABLED = true | |||
| /** | |||
| * highlight a given string on a node by wrapping it in | |||
| * span elements with the given class name. | |||
| */ | |||
| const _highlight = (node, addItems, text, className) => { | |||
| if (node.nodeType === Node.TEXT_NODE) { | |||
| const val = node.nodeValue; | |||
| const parent = node.parentNode; | |||
| const pos = val.toLowerCase().indexOf(text); | |||
| if ( | |||
| pos >= 0 && | |||
| !parent.classList.contains(className) && | |||
| !parent.classList.contains("nohighlight") | |||
| ) { | |||
| let span; | |||
| const closestNode = parent.closest("body, svg, foreignObject"); | |||
| const isInSVG = closestNode && closestNode.matches("svg"); | |||
| if (isInSVG) { | |||
| span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); | |||
| } else { | |||
| span = document.createElement("span"); | |||
| span.classList.add(className); | |||
| } | |||
| span.appendChild(document.createTextNode(val.substr(pos, text.length))); | |||
| parent.insertBefore( | |||
| span, | |||
| parent.insertBefore( | |||
| document.createTextNode(val.substr(pos + text.length)), | |||
| node.nextSibling | |||
| ) | |||
| ); | |||
| node.nodeValue = val.substr(0, pos); | |||
| if (isInSVG) { | |||
| const rect = document.createElementNS( | |||
| "http://www.w3.org/2000/svg", | |||
| "rect" | |||
| ); | |||
| const bbox = parent.getBBox(); | |||
| rect.x.baseVal.value = bbox.x; | |||
| rect.y.baseVal.value = bbox.y; | |||
| rect.width.baseVal.value = bbox.width; | |||
| rect.height.baseVal.value = bbox.height; | |||
| rect.setAttribute("class", className); | |||
| addItems.push({ parent: parent, target: rect }); | |||
| } | |||
| } | |||
| } else if (node.matches && !node.matches("button, select, textarea")) { | |||
| node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); | |||
| } | |||
| }; | |||
| const _highlightText = (thisNode, text, className) => { | |||
| let addItems = []; | |||
| _highlight(thisNode, addItems, text, className); | |||
| addItems.forEach((obj) => | |||
| obj.parent.insertAdjacentElement("beforebegin", obj.target) | |||
| ); | |||
| }; | |||
| /** | |||
| * Small JavaScript module for the documentation. | |||
| */ | |||
| const SphinxHighlight = { | |||
| /** | |||
| * highlight the search words provided in localstorage in the text | |||
| */ | |||
| highlightSearchWords: () => { | |||
| if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight | |||
| // get and clear terms from localstorage | |||
| const url = new URL(window.location); | |||
| const highlight = | |||
| localStorage.getItem("sphinx_highlight_terms") | |||
| || url.searchParams.get("highlight") | |||
| || ""; | |||
| localStorage.removeItem("sphinx_highlight_terms") | |||
| url.searchParams.delete("highlight"); | |||
| window.history.replaceState({}, "", url); | |||
| // get individual terms from highlight string | |||
| const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); | |||
| if (terms.length === 0) return; // nothing to do | |||
| // There should never be more than one element matching "div.body" | |||
| const divBody = document.querySelectorAll("div.body"); | |||
| const body = divBody.length ? divBody[0] : document.querySelector("body"); | |||
| window.setTimeout(() => { | |||
| terms.forEach((term) => _highlightText(body, term, "highlighted")); | |||
| }, 10); | |||
| const searchBox = document.getElementById("searchbox"); | |||
| if (searchBox === null) return; | |||
| searchBox.appendChild( | |||
| document | |||
| .createRange() | |||
| .createContextualFragment( | |||
| '<p class="highlight-link">' + | |||
| '<a href="javascript:SphinxHighlight.hideSearchWords()">' + | |||
| _("Hide Search Matches") + | |||
| "</a></p>" | |||
| ) | |||
| ); | |||
| }, | |||
| /** | |||
| * helper function to hide the search marks again | |||
| */ | |||
| hideSearchWords: () => { | |||
| document | |||
| .querySelectorAll("#searchbox .highlight-link") | |||
| .forEach((el) => el.remove()); | |||
| document | |||
| .querySelectorAll("span.highlighted") | |||
| .forEach((el) => el.classList.remove("highlighted")); | |||
| localStorage.removeItem("sphinx_highlight_terms") | |||
| }, | |||
| initEscapeListener: () => { | |||
| // only install a listener if it is really needed | |||
| if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; | |||
| document.addEventListener("keydown", (event) => { | |||
| // bail for input elements | |||
| if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; | |||
| // bail with special keys | |||
| if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; | |||
| if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { | |||
| SphinxHighlight.hideSearchWords(); | |||
| event.preventDefault(); | |||
| } | |||
| }); | |||
| }, | |||
| }; | |||
| _ready(SphinxHighlight.highlightSearchWords); | |||
| _ready(SphinxHighlight.initEscapeListener); | |||
| @@ -0,0 +1,122 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Market — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="../_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | |||
| <script src="../_static/doctools.js"></script> | |||
| <script src="../_static/sphinx_highlight.js"></script> | |||
| <script src="../_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="../genindex.html" /> | |||
| <link rel="search" title="Search" href="../search.html" /> | |||
| <link rel="next" title="Specification" href="spec.html" /> | |||
| <link rel="prev" title="Introduction" href="../introduction/intro.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="../index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul class="current"> | |||
| <li class="toctree-l1 current"><a class="current reference internal" href="#">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="../references/api.html#market">Market</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="../index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Market</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| <a href="../_sources/components/market.rst.txt" rel="nofollow"> View page source</a> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <section id="market"> | |||
| <span id="id1"></span><h1>Market<a class="headerlink" href="#market" title="Permalink to this heading"></a></h1> | |||
| </section> | |||
| </div> | |||
| </div> | |||
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | |||
| <a href="../introduction/intro.html" class="btn btn-neutral float-left" title="Introduction" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | |||
| <a href="spec.html" class="btn btn-neutral float-right" title="Specification" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | |||
| </div> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,122 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Specification — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="../_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | |||
| <script src="../_static/doctools.js"></script> | |||
| <script src="../_static/sphinx_highlight.js"></script> | |||
| <script src="../_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="../genindex.html" /> | |||
| <link rel="search" title="Search" href="../search.html" /> | |||
| <link rel="next" title="API Reference" href="../references/api.html" /> | |||
| <link rel="prev" title="Market" href="market.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="../index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul class="current"> | |||
| <li class="toctree-l1"><a class="reference internal" href="market.html">Market</a></li> | |||
| <li class="toctree-l1 current"><a class="current reference internal" href="#">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="../references/api.html#market">Market</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="../index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Specification</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| <a href="../_sources/components/spec.rst.txt" rel="nofollow"> View page source</a> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <section id="specification"> | |||
| <span id="spec"></span><h1>Specification<a class="headerlink" href="#specification" title="Permalink to this heading"></a></h1> | |||
| </section> | |||
| </div> | |||
| </div> | |||
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | |||
| <a href="market.html" class="btn btn-neutral float-left" title="Market" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | |||
| <a href="../references/api.html" class="btn btn-neutral float-right" title="API Reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | |||
| </div> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,207 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Index — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> | |||
| <script src="_static/doctools.js"></script> | |||
| <script src="_static/sphinx_highlight.js"></script> | |||
| <script src="_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="#" /> | |||
| <link rel="search" title="Search" href="search.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#market">Market</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.market.LearnwareMarket"><code class="docutils literal notranslate"><span class="pre">LearnwareMarket</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#learnware">Learnware</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.learnware.Learnware"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#specification">Specification</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.Specification"><code class="docutils literal notranslate"><span class="pre">Specification</span></code></a></li> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.StatSpecification"><code class="docutils literal notranslate"><span class="pre">StatSpecification</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Index</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <h1 id="index">Index</h1> | |||
| <div class="genindex-jumpbox"> | |||
| <a href="#A"><strong>A</strong></a> | |||
| | <a href="#D"><strong>D</strong></a> | |||
| | <a href="#G"><strong>G</strong></a> | |||
| | <a href="#L"><strong>L</strong></a> | |||
| | <a href="#R"><strong>R</strong></a> | |||
| | <a href="#S"><strong>S</strong></a> | |||
| | <a href="#U"><strong>U</strong></a> | |||
| </div> | |||
| <h2 id="A">A</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.add_learnware">add_learnware() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="D">D</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.delete_learnware">delete_learnware() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="G">G</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.get_learnware_by_ids">get_learnware_by_ids() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.get_property_list">get_property_list() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="L">L</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.learnware.Learnware">Learnware (class in learnware.learnware)</a> | |||
| </li> | |||
| </ul></td> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket">LearnwareMarket (class in learnware.market)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="R">R</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.reload_market">reload_market() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="S">S</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.search_learnware">search_learnware() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.specification.Specification">Specification (class in learnware.specification)</a> | |||
| </li> | |||
| <li><a href="references/api.html#learnware.specification.StatSpecification">StatSpecification (class in learnware.specification)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| <h2 id="U">U</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%; vertical-align: top;"><ul> | |||
| <li><a href="references/api.html#learnware.market.LearnwareMarket.update_learnware">update_learnware() (learnware.market.LearnwareMarket method)</a> | |||
| </li> | |||
| </ul></td> | |||
| </tr></table> | |||
| </div> | |||
| </div> | |||
| <footer> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,172 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Learnware Documentation — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> | |||
| <script src="_static/doctools.js"></script> | |||
| <script src="_static/sphinx_highlight.js"></script> | |||
| <script src="_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="genindex.html" /> | |||
| <link rel="search" title="Search" href="search.html" /> | |||
| <link rel="next" title="Introduction" href="introduction/intro.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="#"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul class="current"> | |||
| <li class="toctree-l1 current"><a class="current reference internal" href="#">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#market">Market</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.market.LearnwareMarket"><code class="docutils literal notranslate"><span class="pre">LearnwareMarket</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#learnware">Learnware</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.learnware.Learnware"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#specification">Specification</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.Specification"><code class="docutils literal notranslate"><span class="pre">Specification</span></code></a></li> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.StatSpecification"><code class="docutils literal notranslate"><span class="pre">StatSpecification</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="#">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="#" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code> Documentation</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <section id="learnware-documentation"> | |||
| <h1><code class="docutils literal notranslate"><span class="pre">Learnware</span></code> Documentation<a class="headerlink" href="#learnware-documentation" title="Permalink to this heading"></a></h1> | |||
| <p><code class="docutils literal notranslate"><span class="pre">Learnware</span></code> is …</p> | |||
| <section id="document-structure"> | |||
| <span id="user-guide"></span><h2>Document Structure<a class="headerlink" href="#document-structure" title="Permalink to this heading"></a></h2> | |||
| <div class="toctree-wrapper compound"> | |||
| </div> | |||
| <div class="toctree-wrapper compound"> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| </div> | |||
| <div class="toctree-wrapper compound"> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/spec.html">Specification</a></li> | |||
| </ul> | |||
| </div> | |||
| <div class="toctree-wrapper compound"> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#market">Market</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.market.LearnwareMarket"><code class="docutils literal notranslate"><span class="pre">LearnwareMarket</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#learnware">Learnware</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.learnware.Learnware"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#specification">Specification</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.Specification"><code class="docutils literal notranslate"><span class="pre">Specification</span></code></a></li> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.StatSpecification"><code class="docutils literal notranslate"><span class="pre">StatSpecification</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </section> | |||
| </section> | |||
| </div> | |||
| </div> | |||
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | |||
| <a href="introduction/intro.html" class="btn btn-neutral float-right" title="Introduction" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | |||
| </div> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,122 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Introduction — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="../_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | |||
| <script src="../_static/doctools.js"></script> | |||
| <script src="../_static/sphinx_highlight.js"></script> | |||
| <script src="../_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="../genindex.html" /> | |||
| <link rel="search" title="Search" href="../search.html" /> | |||
| <link rel="next" title="Market" href="../components/market.html" /> | |||
| <link rel="prev" title="Learnware Documentation" href="../index.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="../index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul class="current"> | |||
| <li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="../components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="../references/api.html#market">Market</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="../index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Introduction</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| <a href="../_sources/introduction/intro.rst.txt" rel="nofollow"> View page source</a> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <section id="introduction"> | |||
| <span id="intro"></span><h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading"></a></h1> | |||
| </section> | |||
| </div> | |||
| </div> | |||
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | |||
| <a href="../index.html" class="btn btn-neutral float-left" title="Learnware Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | |||
| <a href="../components/market.html" class="btn btn-neutral float-right" title="Market" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | |||
| </div> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,139 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Python Module Index — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> | |||
| <script src="_static/doctools.js"></script> | |||
| <script src="_static/sphinx_highlight.js"></script> | |||
| <script src="_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="genindex.html" /> | |||
| <link rel="search" title="Search" href="search.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#module-learnware.market">Market</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#learnware">Learnware</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Python Module Index</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <h1>Python Module Index</h1> | |||
| <div class="modindex-jumpbox"> | |||
| <a href="#cap-l"><strong>l</strong></a> | |||
| </div> | |||
| <table class="indextable modindextable"> | |||
| <tr class="pcap"><td></td><td> </td><td></td></tr> | |||
| <tr class="cap" id="cap-l"><td></td><td> | |||
| <strong>l</strong></td><td></td></tr> | |||
| <tr> | |||
| <td><img src="_static/minus.png" class="toggler" | |||
| id="toggle-1" style="display: none" alt="-" /></td> | |||
| <td> | |||
| <code class="xref">learnware</code></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td>    | |||
| <a href="references/api.html#module-learnware.market"><code class="xref">learnware.market</code></a></td><td> | |||
| <em></em></td></tr> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <footer> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,334 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>API Reference — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="../_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | |||
| <script src="../_static/doctools.js"></script> | |||
| <script src="../_static/sphinx_highlight.js"></script> | |||
| <script src="../_static/js/theme.js"></script> | |||
| <link rel="index" title="Index" href="../genindex.html" /> | |||
| <link rel="search" title="Search" href="../search.html" /> | |||
| <link rel="prev" title="Specification" href="../components/spec.html" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="../index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="../components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="../components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul class="current"> | |||
| <li class="toctree-l1 current"><a class="current reference internal" href="#">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="#market">Market</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="#learnware.market.LearnwareMarket"><code class="docutils literal notranslate"><span class="pre">LearnwareMarket</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="#learnware">Learnware</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="#learnware.learnware.Learnware"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="#specification">Specification</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="#learnware.specification.Specification"><code class="docutils literal notranslate"><span class="pre">Specification</span></code></a></li> | |||
| <li class="toctree-l3"><a class="reference internal" href="#learnware.specification.StatSpecification"><code class="docutils literal notranslate"><span class="pre">StatSpecification</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="../index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">API Reference</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| <a href="../_sources/references/api.rst.txt" rel="nofollow"> View page source</a> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <section id="api-reference"> | |||
| <span id="api"></span><h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this heading"></a></h1> | |||
| <p>Here you can find all <code class="docutils literal notranslate"><span class="pre">learnware</span></code> interfaces.</p> | |||
| <section id="market"> | |||
| <h2>Market<a class="headerlink" href="#market" title="Permalink to this heading"></a></h2> | |||
| <dl class="py class"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket"> | |||
| <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">learnware.market.</span></span><span class="sig-name descname"><span class="pre">LearnwareMarket</span></span><a class="headerlink" href="#learnware.market.LearnwareMarket" title="Permalink to this definition"></a></dt> | |||
| <dd><p>Market for Learnware</p> | |||
| <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Provide some python examples</span> | |||
| <span class="n">learnmarket</span> <span class="o">=</span> <span class="n">LearnwareMarket</span><span class="p">()</span> | |||
| </pre></div> | |||
| </div> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.add_learnware"> | |||
| <span class="sig-name descname"><span class="pre">add_learnware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">learnware_name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stat_spec_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">properties</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">desc</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">bool</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.add_learnware" title="Permalink to this definition"></a></dt> | |||
| <dd><p>Add a learnware into the market.</p> | |||
| <div class="admonition note"> | |||
| <p class="admonition-title">Note</p> | |||
| <p>Given a prediction of a certain time, all signals before this time will be prepared well.</p> | |||
| </div> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><ul class="simple"> | |||
| <li><p><strong>learnware_name</strong> (<em>str</em>) – Name of new learnware.</p></li> | |||
| <li><p><strong>model_path</strong> (<em>str</em>) – Filepath for learnware model, a zipped file.</p></li> | |||
| <li><p><strong>stat_spec_path</strong> (<em>str</em>) – Filepath for statistical specification, a ‘.npy’ file. | |||
| How to pass parameters requires further discussion.</p></li> | |||
| <li><p><strong>properties</strong> (<em>dict</em>) – property for new learnware, in dictionary format.</p></li> | |||
| <li><p><strong>desc</strong> (<em>str</em>) – Brief desciption for new learnware.</p></li> | |||
| </ul> | |||
| </dd> | |||
| <dt class="field-even">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p>str indicating model_id, bool indicating whether the learnware is added successfully.</p> | |||
| </dd> | |||
| <dt class="field-odd">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>Tuple[str, bool]</p> | |||
| </dd> | |||
| <dt class="field-even">Raises<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p><strong>FileNotFoundError</strong> – file for model or statistical specification not found</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.delete_learnware"> | |||
| <span class="sig-name descname"><span class="pre">delete_learnware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.delete_learnware" title="Permalink to this definition"></a></dt> | |||
| <dd><blockquote> | |||
| <div><p>deleted a learnware from market</p> | |||
| </div></blockquote> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p><strong>id</strong> (<em>str</em>) – id of learnware to be deleted</p> | |||
| </dd> | |||
| <dt class="field-even">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p>True if the target learnware is deleted successfully.</p> | |||
| </dd> | |||
| <dt class="field-odd">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>bool</p> | |||
| </dd> | |||
| <dt class="field-even">Raises<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p><strong>Exception</strong> – Raise an excpetion when give id is NOT found in learnware list</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.get_learnware_by_ids"> | |||
| <span class="sig-name descname"><span class="pre">get_learnware_by_ids</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference internal" href="#learnware.learnware.Learnware" title="learnware.learnware.base.Learnware"><span class="pre">Learnware</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#learnware.learnware.Learnware" title="learnware.learnware.base.Learnware"><span class="pre">Learnware</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.get_learnware_by_ids" title="Permalink to this definition"></a></dt> | |||
| <dd><blockquote> | |||
| <div><p>Get Learnware from market by id</p> | |||
| </div></blockquote> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p><strong>id</strong> (<em>Union</em><em>[</em><em>str</em><em>, </em><em>List</em><em>[</em><em>str</em><em>]</em><em>]</em>) – Given one id or a list of ids as target.</p> | |||
| </dd> | |||
| <dt class="field-even">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p><p>Return a Learnware object or a list of Learnware objects based on the type of input param.</p> | |||
| <ul class="simple"> | |||
| <li><p>The returned items are search results.</p></li> | |||
| <li><p>’None’ indicating the target id not found.</p></li> | |||
| </ul> | |||
| </p> | |||
| </dd> | |||
| <dt class="field-odd">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>Union[<a class="reference internal" href="#learnware.learnware.Learnware" title="learnware.learnware.Learnware">Learnware</a>, List[<a class="reference internal" href="#learnware.learnware.Learnware" title="learnware.learnware.Learnware">Learnware</a>]]</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.get_property_list"> | |||
| <span class="sig-name descname"><span class="pre">get_property_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.get_property_list" title="Permalink to this definition"></a></dt> | |||
| <dd><p>Return all properties available</p> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>All properties in dictionary format</p> | |||
| </dd> | |||
| <dt class="field-even">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p>dict</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.reload_market"> | |||
| <span class="sig-name descname"><span class="pre">reload_market</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">market_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">property_list_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">load_mode</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'database'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.reload_market" title="Permalink to this definition"></a></dt> | |||
| <dd><p>Reload the market when server restared.</p> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><ul class="simple"> | |||
| <li><p><strong>market_path</strong> (<em>str</em>) – Directory for market data. ‘_IP_:_port_’ for loading from database.</p></li> | |||
| <li><p><strong>property_list_path</strong> (<em>str</em>) – Directory for available properties. Should be a json file.</p></li> | |||
| <li><p><strong>load_mode</strong> (<em>str</em><em>, </em><em>optional</em>) – Type of reload source. Currently, only ‘database’ is available. Defaults to ‘database’, by default “database”</p></li> | |||
| </ul> | |||
| </dd> | |||
| <dt class="field-even">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p>A flag indicating whether the market is reload successfully.</p> | |||
| </dd> | |||
| <dt class="field-odd">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>bool</p> | |||
| </dd> | |||
| <dt class="field-even">Raises<span class="colon">:</span></dt> | |||
| <dd class="field-even"><ul class="simple"> | |||
| <li><p><strong>NotImplementedError</strong> – Reload method NOT implemented. Currently, only loading from database is supported.</p></li> | |||
| <li><p><strong>FileNotFoundError</strong> – Loading source/property_list NOT found. Check whether the source and property_list are available.</p></li> | |||
| </ul> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.search_learnware"> | |||
| <span class="sig-name descname"><span class="pre">search_learnware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target_properties</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target_stat_specification</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">Any</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.search_learnware" title="Permalink to this definition"></a></dt> | |||
| <dd><blockquote> | |||
| <div><p>Search Learnware based on properties and statistical specification.</p> | |||
| <ul class="simple"> | |||
| <li><p>Return random learnwares when both target_properties and target_stat_specification is None</p></li> | |||
| <li><p>Search only based on properties when target_stat_specification is None</p></li> | |||
| <li><p>Filter through properties and rank according to statistical specification otherwise</p></li> | |||
| </ul> | |||
| </div></blockquote> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><ul class="simple"> | |||
| <li><p><strong>target_properties</strong> (<em>dict</em><em>, </em><em>optional</em>) – Properties selected by user, by default None</p></li> | |||
| <li><p><strong>target_stat_specification</strong> (<em>str</em><em>, </em><em>optional</em>) – statistical specification uploaded by user, by default None</p></li> | |||
| </ul> | |||
| </dd> | |||
| <dt class="field-even">Returns<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p><p>return two items:</p> | |||
| <ul class="simple"> | |||
| <li><p>first is recommended combination, None when no recommended combination is calculated or statistical specification is not provided.</p></li> | |||
| <li><p>second is a list of matched learnwares</p></li> | |||
| </ul> | |||
| </p> | |||
| </dd> | |||
| <dt class="field-odd">Return type<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p>Tuple[Any, Dict[str, List[Any]]]</p> | |||
| </dd> | |||
| <dt class="field-even">Raises<span class="colon">:</span></dt> | |||
| <dd class="field-even"><p><strong>FileNotFoundError</strong> – Give file path is empty.</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| <dl class="py method"> | |||
| <dt class="sig sig-object py" id="learnware.market.LearnwareMarket.update_learnware"> | |||
| <span class="sig-name descname"><span class="pre">update_learnware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#learnware.market.LearnwareMarket.update_learnware" title="Permalink to this definition"></a></dt> | |||
| <dd><blockquote> | |||
| <div><p>Update Learnware with id and content to be updated. | |||
| Empty interface. TODO</p> | |||
| </div></blockquote> | |||
| <dl class="field-list simple"> | |||
| <dt class="field-odd">Parameters<span class="colon">:</span></dt> | |||
| <dd class="field-odd"><p><strong>id</strong> (<em>str</em>) – id of target learnware.</p> | |||
| </dd> | |||
| </dl> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| </section> | |||
| <section id="learnware"> | |||
| <h2>Learnware<a class="headerlink" href="#learnware" title="Permalink to this heading"></a></h2> | |||
| <dl class="py class"> | |||
| <dt class="sig sig-object py" id="learnware.learnware.Learnware"> | |||
| <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">learnware.learnware.</span></span><span class="sig-name descname"><span class="pre">Learnware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">specification</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#learnware.specification.Specification" title="learnware.specification.base.Specification"><span class="pre">Specification</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">desc</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#learnware.learnware.Learnware" title="Permalink to this definition"></a></dt> | |||
| <dd></dd></dl> | |||
| </section> | |||
| <section id="specification"> | |||
| <h2>Specification<a class="headerlink" href="#specification" title="Permalink to this heading"></a></h2> | |||
| <dl class="py class"> | |||
| <dt class="sig sig-object py" id="learnware.specification.Specification"> | |||
| <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">learnware.specification.</span></span><span class="sig-name descname"><span class="pre">Specification</span></span><a class="headerlink" href="#learnware.specification.Specification" title="Permalink to this definition"></a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="py class"> | |||
| <dt class="sig sig-object py" id="learnware.specification.StatSpecification"> | |||
| <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">learnware.specification.</span></span><span class="sig-name descname"><span class="pre">StatSpecification</span></span><a class="headerlink" href="#learnware.specification.StatSpecification" title="Permalink to this definition"></a></dt> | |||
| <dd></dd></dl> | |||
| </section> | |||
| </section> | |||
| </div> | |||
| </div> | |||
| <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | |||
| <a href="../components/spec.html" class="btn btn-neutral float-left" title="Specification" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | |||
| </div> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,145 @@ | |||
| <!DOCTYPE html> | |||
| <html class="writer-html5" lang="en-US" > | |||
| <head> | |||
| <meta charset="utf-8" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>Search — learnware 0.1.0.99 documentation</title> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> | |||
| <!--[if lt IE 9]> | |||
| <script src="_static/js/html5shiv.min.js"></script> | |||
| <![endif]--> | |||
| <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> | |||
| <script src="_static/doctools.js"></script> | |||
| <script src="_static/sphinx_highlight.js"></script> | |||
| <script src="_static/js/theme.js"></script> | |||
| <script src="_static/searchtools.js"></script> | |||
| <script src="_static/language_data.js"></script> | |||
| <link rel="index" title="Index" href="genindex.html" /> | |||
| <link rel="search" title="Search" href="#" /> | |||
| </head> | |||
| <body class="wy-body-for-nav"> | |||
| <div class="wy-grid-for-nav"> | |||
| <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |||
| <div class="wy-side-scroll"> | |||
| <div class="wy-side-nav-search" > | |||
| <a href="index.html"> | |||
| </a> | |||
| <div role="search"> | |||
| <form id="rtd-search-form" class="wy-form" action="#" method="get"> | |||
| <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| </div> | |||
| </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="index.html">Home</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">GETTING STARTED:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="introduction/intro.html">Introduction</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">COMPONENTS:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/market.html">Market</a></li> | |||
| <li class="toctree-l1"><a class="reference internal" href="components/spec.html">Specification</a></li> | |||
| </ul> | |||
| <p class="caption" role="heading"><span class="caption-text">REFERENCES:</span></p> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="references/api.html">API</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#market">Market</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.market.LearnwareMarket"><code class="docutils literal notranslate"><span class="pre">LearnwareMarket</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#learnware">Learnware</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.learnware.Learnware"><code class="docutils literal notranslate"><span class="pre">Learnware</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| <li class="toctree-l2"><a class="reference internal" href="references/api.html#specification">Specification</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.Specification"><code class="docutils literal notranslate"><span class="pre">Specification</span></code></a></li> | |||
| <li class="toctree-l3"><a class="reference internal" href="references/api.html#learnware.specification.StatSpecification"><code class="docutils literal notranslate"><span class="pre">StatSpecification</span></code></a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | |||
| <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |||
| <a href="index.html">learnware</a> | |||
| </nav> | |||
| <div class="wy-nav-content"> | |||
| <div class="rst-content"> | |||
| <div role="navigation" aria-label="Page navigation"> | |||
| <ul class="wy-breadcrumbs"> | |||
| <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li> | |||
| <li class="breadcrumb-item active">Search</li> | |||
| <li class="wy-breadcrumbs-aside"> | |||
| </li> | |||
| </ul> | |||
| <hr/> | |||
| </div> | |||
| <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |||
| <div itemprop="articleBody"> | |||
| <noscript> | |||
| <div id="fallback" class="admonition warning"> | |||
| <p class="last"> | |||
| Please activate JavaScript to enable the search functionality. | |||
| </p> | |||
| </div> | |||
| </noscript> | |||
| <div id="search-results"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <footer> | |||
| <hr/> | |||
| <div role="contentinfo"> | |||
| <p>© Copyright 2023, LAMDA Group.</p> | |||
| </div> | |||
| Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |||
| <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |||
| provided by <a href="https://readthedocs.org">Read the Docs</a>. | |||
| </footer> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| <script> | |||
| jQuery(function () { | |||
| SphinxRtdTheme.Navigation.enable(true); | |||
| }); | |||
| </script> | |||
| <script> | |||
| jQuery(function() { Search.loadIndex("searchindex.js"); }); | |||
| </script> | |||
| <script id="searchindexloader"></script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,5 @@ | |||
| .. _market: | |||
| ================================ | |||
| Market | |||
| ================================ | |||
| @@ -0,0 +1,5 @@ | |||
| .. _spec: | |||
| ================================ | |||
| Specification | |||
| ================================ | |||
| @@ -0,0 +1,113 @@ | |||
| import pkg_resources | |||
| # Configuration file for the Sphinx documentation builder. | |||
| # | |||
| # For the full list of built-in configuration values, see the documentation: | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html | |||
| # -- General configuration ------------------------------------------------ | |||
| # If your documentation needs a minimal Sphinx version, state it here. | |||
| # | |||
| # needs_sphinx = '1.0' | |||
| # Add any Sphinx extension module names here, as strings. They can be | |||
| # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom | |||
| # ones. | |||
| extensions = [ | |||
| "sphinx.ext.autodoc", | |||
| "sphinx.ext.todo", | |||
| "sphinx.ext.mathjax", | |||
| "sphinx.ext.napoleon", | |||
| ] | |||
| language = "en_US" | |||
| # Add any paths that contain templates here, relative to this directory. | |||
| templates_path = ["_templates"] | |||
| # The suffix(es) of source filenames. | |||
| # You can specify multiple suffix as a list of string: | |||
| # | |||
| # source_suffix = ['.rst', '.md'] | |||
| source_suffix = ".rst" | |||
| # The master toctree document. | |||
| master_doc = "index" | |||
| # -- Project information ----------------------------------------------------- | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information | |||
| project = "learnware" | |||
| copyright = "2023, LAMDA Group" | |||
| author = "LAMDA Group" | |||
| # The version info for the project you're documenting, acts as replacement for | |||
| # |version| and |release|, also used in various other places throughout the | |||
| # built documents. | |||
| # | |||
| # The short X.Y version. | |||
| version = pkg_resources.get_distribution("learnware").version | |||
| # The full version, including alpha/beta/rc tags. | |||
| release = pkg_resources.get_distribution("learnware").version | |||
| release = "0.1.0.99" | |||
| # -- Options for HTML output ------------------------------------------------- | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output | |||
| # List of patterns, relative to source directory, that match files and | |||
| # directories to ignore when looking for source files. | |||
| # This patterns also effect to html_static_path and html_extra_path | |||
| exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] | |||
| # The name of the Pygments (syntax highlighting) style to use. | |||
| pygments_style = "sphinx" | |||
| # If true, `todo` and `todoList` produce output, else they produce nothing. | |||
| todo_include_todos = False | |||
| # If true, '()' will be appended to :func: etc. cross-reference text. | |||
| add_function_parentheses = False | |||
| # If true, the current module name will be prepended to all description | |||
| # unit titles (such as .. function::). | |||
| add_module_names = True | |||
| # If true, `todo` and `todoList` produce output, else they produce nothing. | |||
| todo_include_todos = True | |||
| # -- Options for HTML output ---------------------------------------------- | |||
| # The theme to use for HTML and HTML Help pages. See the documentation for | |||
| # a list of builtin themes. | |||
| # | |||
| html_theme = "sphinx_rtd_theme" | |||
| # html_logo = '_static/img/logo/1.png' | |||
| # Theme options are theme-specific and customize the look and feel of a theme | |||
| # further. For a list of options available for each theme, see the | |||
| # documentation. | |||
| # html_context = { | |||
| # "display_github": False, | |||
| # "last_updated": True, | |||
| # "commit": True, | |||
| # "github_user": "Microsoft", | |||
| # "github_repo": "QLib", | |||
| # 'github_version': 'master', | |||
| # 'conf_py_path': '/docs/', | |||
| # } | |||
| # | |||
| html_theme_options = { | |||
| "logo_only": True, | |||
| "collapse_navigation": False, | |||
| "display_version": False, | |||
| "navigation_depth": 3, | |||
| } | |||
| @@ -0,0 +1,39 @@ | |||
| .. learnware documentation master file, created by | |||
| sphinx-quickstart on Tue Mar 28 22:06:47 2023. | |||
| You can adapt this file completely to your liking, but it should at least | |||
| contain the root `toctree` directive. | |||
| ============================================================ | |||
| ``Learnware`` Documentation | |||
| ============================================================ | |||
| ``Learnware`` is ... | |||
| .. _user_guide: | |||
| Document Structure | |||
| ==================== | |||
| .. toctree:: | |||
| :hidden: | |||
| Home <self> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: GETTING STARTED: | |||
| Introduction <introduction/intro.rst> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: COMPONENTS: | |||
| Market <components/market.rst> | |||
| Specification <components/spec.rst> | |||
| .. toctree:: | |||
| :maxdepth: 3 | |||
| :caption: REFERENCES: | |||
| API <references/api.rst> | |||
| @@ -0,0 +1,5 @@ | |||
| .. _intro: | |||
| ================================ | |||
| Introduction | |||
| ================================ | |||
| @@ -1,35 +0,0 @@ | |||
| @ECHO OFF | |||
| pushd %~dp0 | |||
| REM Command file for Sphinx documentation | |||
| if "%SPHINXBUILD%" == "" ( | |||
| set SPHINXBUILD=sphinx-build | |||
| ) | |||
| set SOURCEDIR=source | |||
| set BUILDDIR=build | |||
| %SPHINXBUILD% >NUL 2>NUL | |||
| if errorlevel 9009 ( | |||
| echo. | |||
| echo.The 'sphinx-build' command was not found. Make sure you have Sphinx | |||
| echo.installed, then set the SPHINXBUILD environment variable to point | |||
| echo.to the full path of the 'sphinx-build' executable. Alternatively you | |||
| echo.may add the Sphinx directory to PATH. | |||
| echo. | |||
| echo.If you don't have Sphinx installed, grab it from | |||
| echo.https://www.sphinx-doc.org/ | |||
| exit /b 1 | |||
| ) | |||
| if "%1" == "" goto help | |||
| %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% | |||
| goto end | |||
| :help | |||
| %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% | |||
| :end | |||
| popd | |||
| @@ -0,0 +1,33 @@ | |||
| .. _api: | |||
| ================================ | |||
| API Reference | |||
| ================================ | |||
| Here you can find all ``learnware`` interfaces. | |||
| Market | |||
| ==================== | |||
| .. autoclass:: learnware.market.LearnwareMarket | |||
| :members: | |||
| Learnware | |||
| ==================== | |||
| .. autoclass:: learnware.learnware.Learnware | |||
| :members: | |||
| Specification | |||
| ==================== | |||
| .. autoclass:: learnware.specification.Specification | |||
| :members: | |||
| .. autoclass:: learnware.specification.StatSpecification | |||
| :members: | |||
| @@ -1,28 +0,0 @@ | |||
| # Configuration file for the Sphinx documentation builder. | |||
| # | |||
| # For the full list of built-in configuration values, see the documentation: | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html | |||
| # -- Project information ----------------------------------------------------- | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information | |||
| project = "learnware" | |||
| copyright = "2023, LAMDA Group" | |||
| author = "LAMDA Group" | |||
| release = "0.1.0.99" | |||
| # -- General configuration --------------------------------------------------- | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration | |||
| extensions = [] | |||
| templates_path = ["_templates"] | |||
| exclude_patterns = [] | |||
| language = "zh_CN" | |||
| # -- Options for HTML output ------------------------------------------------- | |||
| # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output | |||
| html_theme = "alabaster" | |||
| html_static_path = ["_static"] | |||
| @@ -1,20 +0,0 @@ | |||
| .. learnware documentation master file, created by | |||
| sphinx-quickstart on Tue Mar 28 22:06:47 2023. | |||
| You can adapt this file completely to your liking, but it should at least | |||
| contain the root `toctree` directive. | |||
| Welcome to learnware's documentation! | |||
| ===================================== | |||
| .. toctree:: | |||
| :maxdepth: 2 | |||
| :caption: Contents: | |||
| Indices and tables | |||
| ================== | |||
| * :ref:`genindex` | |||
| * :ref:`modindex` | |||
| * :ref:`search` | |||
| @@ -0,0 +1,57 @@ | |||
| import os | |||
| import copy | |||
| class Config: | |||
| def __init__(self, default_conf): | |||
| self.__dict__["_default_config"] = copy.deepcopy(default_conf) # avoiding conflictions with __getattr__ | |||
| self.reset() | |||
| def __getitem__(self, key): | |||
| return self.__dict__["_config"][key] | |||
| def __getattr__(self, attr): | |||
| if attr in self.__dict__["_config"]: | |||
| return self.__dict__["_config"][attr] | |||
| raise AttributeError(f"No such {attr} in self._config") | |||
| def get(self, key, default=None): | |||
| return self.__dict__["_config"].get(key, default) | |||
| def __setitem__(self, key, value): | |||
| self.__dict__["_config"][key] = value | |||
| def __setattr__(self, attr, value): | |||
| self.__dict__["_config"][attr] = value | |||
| def __contains__(self, item): | |||
| return item in self.__dict__["_config"] | |||
| def __getstate__(self): | |||
| return self.__dict__ | |||
| def __setstate__(self, state): | |||
| self.__dict__.update(state) | |||
| def __str__(self): | |||
| return str(self.__dict__["_config"]) | |||
| def __repr__(self): | |||
| return str(self.__dict__["_config"]) | |||
| def reset(self): | |||
| self.__dict__["_config"] = copy.deepcopy(self._default_config) | |||
| def update(self, *args, **kwargs): | |||
| self.__dict__["_config"].update(*args, **kwargs) | |||
| ROOT_DIRPATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |||
| _DEFAULT_CONFIG = { | |||
| "root_path": ROOT_DIRPATH, | |||
| "logging_level": "INFO", | |||
| } | |||
| C = Config(_DEFAULT_CONFIG) | |||
| @@ -1,3 +1 @@ | |||
| class BaseLearnware: | |||
| def __init__(self) -> None: | |||
| pass | |||
| from .base import Learnware | |||
| @@ -23,4 +23,4 @@ class Learnware: | |||
| def update(self): | |||
| # Empty Interface. | |||
| raise Exception("'update' Method NOT Implemented.") | |||
| raise NotImplementedError("'update' Method NOT Implemented.") | |||
| @@ -0,0 +1,25 @@ | |||
| import logging | |||
| import logging.handlers | |||
| from .config import C | |||
| def get_module_logger(module_name, level=None): | |||
| """ | |||
| Get a logger for a specific module. | |||
| :param module_name: str | |||
| Logic module name. | |||
| :param level: int | |||
| :param sh_level: int | |||
| Stream handler log level. | |||
| :param log_format: str | |||
| :return: Logger | |||
| Logger object. | |||
| """ | |||
| if level is None: | |||
| level = C.logging_level | |||
| # Get logger. | |||
| module_logger = logging.getLogger(module_name) | |||
| module_logger.setLevel(level) | |||
| return module_logger | |||
| @@ -1 +1 @@ | |||
| from .base_market import LearnwareMarket | |||
| from .base import LearnwareMarket | |||
| @@ -2,21 +2,28 @@ import numpy as np | |||
| import pandas as pd | |||
| from typing import Tuple, Any, List, Union, Dict | |||
| import os | |||
| from ..learnware import BaseLearnware | |||
| from ..learnware import Learnware | |||
| class LearnwareMarket: | |||
| """Market for Learnware | |||
| .. code-block:: python | |||
| # Provide some python examples | |||
| learnmarket = LearnwareMarket() | |||
| """ | |||
| def __init__(self): | |||
| """ | |||
| Initializing an empty market | |||
| """ | |||
| self.learnware_list = {} # id:BaseLearnware | |||
| """Initializing an empty market""" | |||
| self.learnware_list = {} # id:Learnware | |||
| self.count = 0 | |||
| self.property_list = None | |||
| def reload_market(self, market_path: str, property_list_path: str, load_mode: str = "database") -> bool: | |||
| """ | |||
| Reload the market when server restared. | |||
| """Reload the market when server restared. | |||
| Parameters | |||
| ---------- | |||
| @@ -54,9 +61,12 @@ class LearnwareMarket: | |||
| def add_learnware( | |||
| self, learnware_name: str, model_path: str, stat_spec_path: str, properties: dict, desc: str | |||
| ) -> Tuple[str, bool]: | |||
| """ | |||
| Add a learnware into the market. | |||
| Market will pack contents into a BaseLearnware object and assign an id automatically. | |||
| """Add a learnware into the market. | |||
| .. note:: | |||
| Given a prediction of a certain time, all signals before this time will be prepared well. | |||
| Parameters | |||
| ---------- | |||
| @@ -89,12 +99,13 @@ class LearnwareMarket: | |||
| def search_learnware( | |||
| self, target_properties: dict = None, target_stat_specification: str = None | |||
| ) -> Tuple[Any, Dict[str : List[Any]]]: | |||
| ) -> Tuple[Any, Dict[str, List[Any]]]: | |||
| """ | |||
| Search Learnware based on properties and statistical specification. | |||
| Return random learnwares when both target_properties and target_stat_specification is None, | |||
| Search only based on properties when target_stat_specification is None, | |||
| Filter through properties and rank according to statistical specification otherwise. | |||
| - Return random learnwares when both target_properties and target_stat_specification is None | |||
| - Search only based on properties when target_stat_specification is None | |||
| - Filter through properties and rank according to statistical specification otherwise | |||
| Parameters | |||
| ---------- | |||
| @@ -105,10 +116,11 @@ class LearnwareMarket: | |||
| Returns | |||
| ------- | |||
| Tuple[Any, Dict[str:List[Any]]] | |||
| Tuple[Any, Dict[str, List[Any]]] | |||
| return two items: | |||
| first is recommended combination, None when no recommended combination is calculated or statistical specification is not provided. | |||
| second is a list of matched learnwares | |||
| - first is recommended combination, None when no recommended combination is calculated or statistical specification is not provided. | |||
| - second is a list of matched learnwares | |||
| Raises | |||
| ------ | |||
| @@ -122,7 +134,7 @@ class LearnwareMarket: | |||
| ) | |||
| return None, [] | |||
| def get_learnware_by_ids(self, id: Union[str, List[str]]) -> Union[BaseLearnware, List[BaseLearnware]]: | |||
| def get_learnware_by_ids(self, id: Union[str, List[str]]) -> Union[Learnware, List[Learnware]]: | |||
| """ | |||
| Get Learnware from market by id | |||
| @@ -133,10 +145,11 @@ class LearnwareMarket: | |||
| Returns | |||
| ------- | |||
| Union[BaseLearnware, List[BaseLearnware]] | |||
| Return a BaseLearnware object or a list of BaseLearnware objects based on the type of input param. | |||
| The returned items are search results. | |||
| 'None' indicating the target id not found. | |||
| Union[Learnware, List[Learnware]] | |||
| Return a Learnware object or a list of Learnware objects based on the type of input param. | |||
| - The returned items are search results. | |||
| - 'None' indicating the target id not found. | |||
| """ | |||
| return None | |||
| @@ -1,2 +1,2 @@ | |||
| from .functional_tools import generate_stat_spec | |||
| from .base_specification import Specification, StatSpecification | |||
| from .utils import generate_stat_spec | |||
| from .base import Specification, StatSpecification | |||
| @@ -1,5 +1,5 @@ | |||
| import numpy as np | |||
| from .base_specification import StatSpecification | |||
| from .base import StatSpecification | |||
| def generate_stat_spec(X: np.ndarray) -> StatSpecification: | |||
| @@ -0,0 +1,11 @@ | |||
| import os | |||
| from .logger import get_module_logger | |||
| logger = get_module_logger("utils") | |||
| def make_dir_by_path(dirpath): | |||
| if not os.path.exists(dirpath): | |||
| os.makedirs(dirpath) | |||
| else: | |||
| logger.warning(f"Directorty {dirpath} has been exited, ignore mkdir") | |||
| @@ -32,7 +32,11 @@ if os.path.exists("MANIFEST"): | |||
| # What packages are required for this module to be executed? | |||
| # `estimator` may depend on other packages. In order to reduce dependencies, it is not written here. | |||
| REQUIRED = [ | |||
| "numpy>=1.16.0,<1.20.0", | |||
| "numpy>=1.12.0", | |||
| "pandas>=0.25.1", | |||
| "scipy>=1.0.0", | |||
| "matplotlib==3.1.3", | |||
| "tqdm", | |||
| ] | |||
| here = os.path.abspath(os.path.dirname(__file__)) | |||