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 *.so
*.ipynb *.ipynb
.ipynb_checkpoints .ipynb_checkpoints
_build
# _build
build/ build/
dist/ dist/
*.pkl *.pkl
*.hd5 *.hd5
*.csv *.csv
*.html
# *.html
*.xml *.xml
.env .env
.vim .vim
@@ -30,8 +30,5 @@ dist/
.idea/ .idea/
.DS_Store .DS_Store
node_modules/ node_modules/
build/
_build/
dist/
cache/ cache/
tmp/ 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 # 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". # Put it first so that "make" without argument is like "make help".
help: help:
@@ -17,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new # Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile %: 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): def update(self):
# Empty Interface. # 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 import pandas as pd
from typing import Tuple, Any, List, Union, Dict from typing import Tuple, Any, List, Union, Dict
import os import os
from ..learnware import BaseLearnware
from ..learnware import Learnware




class LearnwareMarket: class LearnwareMarket:
"""Market for Learnware

.. code-block:: python

# Provide some python examples
learnmarket = LearnwareMarket()


"""

def __init__(self): 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.count = 0
self.property_list = None self.property_list = None


def reload_market(self, market_path: str, property_list_path: str, load_mode: str = "database") -> bool: 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 Parameters
---------- ----------
@@ -54,9 +61,12 @@ class LearnwareMarket:
def add_learnware( def add_learnware(
self, learnware_name: str, model_path: str, stat_spec_path: str, properties: dict, desc: str self, learnware_name: str, model_path: str, stat_spec_path: str, properties: dict, desc: str
) -> Tuple[str, bool]: ) -> 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 Parameters
---------- ----------
@@ -89,12 +99,13 @@ class LearnwareMarket:


def search_learnware( def search_learnware(
self, target_properties: dict = None, target_stat_specification: str = None 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. 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 Parameters
---------- ----------
@@ -105,10 +116,11 @@ class LearnwareMarket:


Returns Returns
------- -------
Tuple[Any, Dict[str:List[Any]]]
Tuple[Any, Dict[str, List[Any]]]
return two items: 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 Raises
------ ------
@@ -122,7 +134,7 @@ class LearnwareMarket:
) )
return None, [] 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 Get Learnware from market by id


@@ -133,10 +145,11 @@ class LearnwareMarket:


Returns 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 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 import numpy as np
from .base_specification import StatSpecification
from .base import StatSpecification




def generate_stat_spec(X: np.ndarray) -> 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? # 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. # `estimator` may depend on other packages. In order to reduce dependencies, it is not written here.
REQUIRED = [ 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__)) here = os.path.abspath(os.path.dirname(__file__))


Loading…
Cancel
Save