Browse Source

[ENH] Add many docs, modify some class and file names

tags/v0.3.2
bxdd 2 years ago
parent
commit
85aa357a32
81 changed files with 6635 additions and 165 deletions
  1. +2
    -5
      .gitignore
  2. +2
    -39
      README.md
  3. +28
    -0
      dev/1. 提交规范.md
  4. +9
    -0
      dev/2. 开发模式安装项目方法.md
  5. +51
    -0
      dev/3. 代码规范.md
  6. +7
    -7
      docs/Makefile
  7. BIN
      docs/_build/doctrees/components/market.doctree
  8. BIN
      docs/_build/doctrees/components/spec.doctree
  9. BIN
      docs/_build/doctrees/environment.pickle
  10. BIN
      docs/_build/doctrees/index.doctree
  11. BIN
      docs/_build/doctrees/introduction/intro.doctree
  12. BIN
      docs/_build/doctrees/references/api.doctree
  13. +4
    -0
      docs/_build/html/.buildinfo
  14. +5
    -0
      docs/_build/html/_sources/components/market.rst.txt
  15. +5
    -0
      docs/_build/html/_sources/components/spec.rst.txt
  16. +39
    -0
      docs/_build/html/_sources/index.rst.txt
  17. +5
    -0
      docs/_build/html/_sources/introduction/intro.rst.txt
  18. +33
    -0
      docs/_build/html/_sources/references/api.rst.txt
  19. +903
    -0
      docs/_build/html/_static/basic.css
  20. +1
    -0
      docs/_build/html/_static/css/badge_only.css
  21. BIN
      docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff
  22. BIN
      docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2
  23. BIN
      docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff
  24. BIN
      docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2
  25. BIN
      docs/_build/html/_static/css/fonts/fontawesome-webfont.eot
  26. +2671
    -0
      docs/_build/html/_static/css/fonts/fontawesome-webfont.svg
  27. BIN
      docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf
  28. BIN
      docs/_build/html/_static/css/fonts/fontawesome-webfont.woff
  29. BIN
      docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2
  30. BIN
      docs/_build/html/_static/css/fonts/lato-bold-italic.woff
  31. BIN
      docs/_build/html/_static/css/fonts/lato-bold-italic.woff2
  32. BIN
      docs/_build/html/_static/css/fonts/lato-bold.woff
  33. BIN
      docs/_build/html/_static/css/fonts/lato-bold.woff2
  34. BIN
      docs/_build/html/_static/css/fonts/lato-normal-italic.woff
  35. BIN
      docs/_build/html/_static/css/fonts/lato-normal-italic.woff2
  36. BIN
      docs/_build/html/_static/css/fonts/lato-normal.woff
  37. BIN
      docs/_build/html/_static/css/fonts/lato-normal.woff2
  38. +4
    -0
      docs/_build/html/_static/css/theme.css
  39. +156
    -0
      docs/_build/html/_static/doctools.js
  40. +14
    -0
      docs/_build/html/_static/documentation_options.js
  41. BIN
      docs/_build/html/_static/file.png
  42. +1
    -0
      docs/_build/html/_static/js/badge_only.js
  43. +4
    -0
      docs/_build/html/_static/js/html5shiv-printshiv.min.js
  44. +4
    -0
      docs/_build/html/_static/js/html5shiv.min.js
  45. +1
    -0
      docs/_build/html/_static/js/theme.js
  46. +199
    -0
      docs/_build/html/_static/language_data.js
  47. BIN
      docs/_build/html/_static/minus.png
  48. BIN
      docs/_build/html/_static/plus.png
  49. +74
    -0
      docs/_build/html/_static/pygments.css
  50. +566
    -0
      docs/_build/html/_static/searchtools.js
  51. +144
    -0
      docs/_build/html/_static/sphinx_highlight.js
  52. +122
    -0
      docs/_build/html/components/market.html
  53. +122
    -0
      docs/_build/html/components/spec.html
  54. +207
    -0
      docs/_build/html/genindex.html
  55. +172
    -0
      docs/_build/html/index.html
  56. +122
    -0
      docs/_build/html/introduction/intro.html
  57. BIN
      docs/_build/html/objects.inv
  58. +139
    -0
      docs/_build/html/py-modindex.html
  59. +334
    -0
      docs/_build/html/references/api.html
  60. +145
    -0
      docs/_build/html/search.html
  61. +1
    -0
      docs/_build/html/searchindex.js
  62. +5
    -0
      docs/components/market.rst
  63. +5
    -0
      docs/components/spec.rst
  64. +113
    -0
      docs/conf.py
  65. +39
    -0
      docs/index.rst
  66. +5
    -0
      docs/introduction/intro.rst
  67. +0
    -35
      docs/make.bat
  68. +33
    -0
      docs/references/api.rst
  69. +0
    -28
      docs/source/conf.py
  70. +0
    -20
      docs/source/index.rst
  71. +57
    -0
      learnware/config.py
  72. +1
    -3
      learnware/learnware/__init__.py
  73. +1
    -1
      learnware/learnware/base.py
  74. +25
    -0
      learnware/logger.py
  75. +1
    -1
      learnware/market/__init__.py
  76. +35
    -22
      learnware/market/base.py
  77. +2
    -2
      learnware/specification/__init__.py
  78. +0
    -0
      learnware/specification/base.py
  79. +1
    -1
      learnware/specification/utils.py
  80. +11
    -0
      learnware/utils.py
  81. +5
    -1
      setup.py

+ 2
- 5
.gitignore View File

@@ -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/

+ 2
- 39
README.md View File

@@ -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.

+ 28
- 0
dev/1. 提交规范.md View File

@@ -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
```

+ 9
- 0
dev/2. 开发模式安装项目方法.md View File

@@ -0,0 +1,9 @@
# Learnware Market 开发模式安装方法

使用以下方式进行安装开发:
* 使用 python 3.8 进行开发
* 安装代码(代码根目录运行
```
python setup.py develop
```
* 直接增加,删除修改对应文件即可实时修改 import 的包功能

+ 51
- 0
dev/3. 代码规范.md View File

@@ -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")
```

+ 7
- 7
docs/Makefile View File

@@ -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)

BIN
docs/_build/doctrees/components/market.doctree View File


BIN
docs/_build/doctrees/components/spec.doctree View File


BIN
docs/_build/doctrees/environment.pickle View File


BIN
docs/_build/doctrees/index.doctree View File


BIN
docs/_build/doctrees/introduction/intro.doctree View File


BIN
docs/_build/doctrees/references/api.doctree View File


+ 4
- 0
docs/_build/html/.buildinfo View File

@@ -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

+ 5
- 0
docs/_build/html/_sources/components/market.rst.txt View File

@@ -0,0 +1,5 @@
.. _market:
================================
Market
================================


+ 5
- 0
docs/_build/html/_sources/components/spec.rst.txt View File

@@ -0,0 +1,5 @@
.. _spec:
================================
Specification
================================


+ 39
- 0
docs/_build/html/_sources/index.rst.txt View File

@@ -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>

+ 5
- 0
docs/_build/html/_sources/introduction/intro.rst.txt View File

@@ -0,0 +1,5 @@
.. _intro:
================================
Introduction
================================


+ 33
- 0
docs/_build/html/_sources/references/api.rst.txt View File

@@ -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:

+ 903
- 0
docs/_build/html/_static/basic.css View File

@@ -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;
}
}

+ 1
- 0
docs/_build/html/_static/css/badge_only.css View File

@@ -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}}

BIN
docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff View File


BIN
docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 View File


BIN
docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff View File


BIN
docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 View File


BIN
docs/_build/html/_static/css/fonts/fontawesome-webfont.eot View File


+ 2671
- 0
docs/_build/html/_static/css/fonts/fontawesome-webfont.svg
File diff suppressed because it is too large
View File


BIN
docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf View File


BIN
docs/_build/html/_static/css/fonts/fontawesome-webfont.woff View File


BIN
docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 View File


BIN
docs/_build/html/_static/css/fonts/lato-bold-italic.woff View File


BIN
docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 View File


BIN
docs/_build/html/_static/css/fonts/lato-bold.woff View File


BIN
docs/_build/html/_static/css/fonts/lato-bold.woff2 View File


BIN
docs/_build/html/_static/css/fonts/lato-normal-italic.woff View File


BIN
docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 View File


BIN
docs/_build/html/_static/css/fonts/lato-normal.woff View File


BIN
docs/_build/html/_static/css/fonts/lato-normal.woff2 View File


+ 4
- 0
docs/_build/html/_static/css/theme.css
File diff suppressed because it is too large
View File


+ 156
- 0
docs/_build/html/_static/doctools.js View File

@@ -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);

+ 14
- 0
docs/_build/html/_static/documentation_options.js View File

@@ -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,
};

BIN
docs/_build/html/_static/file.png View File

Before After
Width: 16  |  Height: 16  |  Size: 286 B

+ 1
- 0
docs/_build/html/_static/js/badge_only.js View File

@@ -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){}});

+ 4
- 0
docs/_build/html/_static/js/html5shiv-printshiv.min.js View File

@@ -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);

+ 4
- 0
docs/_build/html/_static/js/html5shiv.min.js View File

@@ -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);

+ 1
- 0
docs/_build/html/_static/js/theme.js
File diff suppressed because it is too large
View File


+ 199
- 0
docs/_build/html/_static/language_data.js View File

@@ -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;
}
}


BIN
docs/_build/html/_static/minus.png View File

Before After
Width: 11  |  Height: 11  |  Size: 90 B

BIN
docs/_build/html/_static/plus.png View File

Before After
Width: 11  |  Height: 11  |  Size: 90 B

+ 74
- 0
docs/_build/html/_static/pygments.css View File

@@ -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 */

+ 566
- 0
docs/_build/html/_static/searchtools.js View File

@@ -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);

+ 144
- 0
docs/_build/html/_static/sphinx_highlight.js View File

@@ -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);

+ 122
- 0
docs/_build/html/components/market.html View File

@@ -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 &mdash; 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>&#169; 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>

+ 122
- 0
docs/_build/html/components/spec.html View File

@@ -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 &mdash; 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>&#169; 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>

+ 207
- 0
docs/_build/html/genindex.html View File

@@ -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 &mdash; 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>&#169; 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>

+ 172
- 0
docs/_build/html/index.html View File

@@ -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 &mdash; 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>&#169; 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>

+ 122
- 0
docs/_build/html/introduction/intro.html View File

@@ -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 &mdash; 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>&#169; 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>

BIN
docs/_build/html/objects.inv View File


+ 139
- 0
docs/_build/html/py-modindex.html View File

@@ -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 &mdash; 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>&#160;</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>&#160;&#160;&#160;
<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>&#169; 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>

+ 334
- 0
docs/_build/html/references/api.html View File

@@ -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 &mdash; 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">&#x2192;</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">&#x2192;</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">&#x2192;</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">&#x2192;</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">&#x2192;</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">&#x2192;</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">&#x2192;</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>&#169; 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>

+ 145
- 0
docs/_build/html/search.html View File

@@ -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 &mdash; 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>&#169; 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>

+ 1
- 0
docs/_build/html/searchindex.js
File diff suppressed because it is too large
View File


+ 5
- 0
docs/components/market.rst View File

@@ -0,0 +1,5 @@
.. _market:
================================
Market
================================


+ 5
- 0
docs/components/spec.rst View File

@@ -0,0 +1,5 @@
.. _spec:
================================
Specification
================================


+ 113
- 0
docs/conf.py View File

@@ -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,
}

+ 39
- 0
docs/index.rst View File

@@ -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>

+ 5
- 0
docs/introduction/intro.rst View File

@@ -0,0 +1,5 @@
.. _intro:
================================
Introduction
================================


+ 0
- 35
docs/make.bat View File

@@ -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

+ 33
- 0
docs/references/api.rst View File

@@ -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
- 28
docs/source/conf.py View File

@@ -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"]

+ 0
- 20
docs/source/index.rst View File

@@ -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`

+ 57
- 0
learnware/config.py View File

@@ -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
learnware/learnware/__init__.py View File

@@ -1,3 +1 @@
class BaseLearnware:
def __init__(self) -> None:
pass
from .base import Learnware

learnware/learnware/base_learnware.py → learnware/learnware/base.py View File

@@ -23,4 +23,4 @@ class Learnware:

def update(self):
# Empty Interface.
raise Exception("'update' Method NOT Implemented.")
raise NotImplementedError("'update' Method NOT Implemented.")

+ 25
- 0
learnware/logger.py View File

@@ -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
learnware/market/__init__.py View File

@@ -1 +1 @@
from .base_market import LearnwareMarket
from .base import LearnwareMarket

learnware/market/base_market.py → learnware/market/base.py View File

@@ -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


+ 2
- 2
learnware/specification/__init__.py View File

@@ -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

learnware/specification/base_specification.py → learnware/specification/base.py View File


learnware/specification/functional_tools.py → learnware/specification/utils.py View File

@@ -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:

+ 11
- 0
learnware/utils.py View File

@@ -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")

+ 5
- 1
setup.py View File

@@ -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__))


Loading…
Cancel
Save