Upload 114 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +2 -0
- Dockerfile +27 -0
- LICENSE +121 -0
- README.rst +64 -0
- assets/AIM-CU-Overview.drawio.png +3 -0
- assets/AIM-CU-Overview.drawio.xml +0 -0
- assets/params.csv +9 -0
- config/config.toml +42 -0
- config/spec-60-60.csv +121 -0
- docs/Makefile +20 -0
- docs/README.rst +26 -0
- docs/build/doctrees/environment.pickle +3 -0
- docs/build/doctrees/index.doctree +0 -0
- docs/build/doctrees/ref_cusum.doctree +0 -0
- docs/build/doctrees/ref_method.doctree +0 -0
- docs/build/doctrees/ref_theoretical.doctree +0 -0
- docs/build/doctrees/ref_utils.doctree +0 -0
- docs/build/html/.buildinfo +4 -0
- docs/build/html/_sources/index.rst.txt +52 -0
- docs/build/html/_sources/ref_cusum.rst.txt +5 -0
- docs/build/html/_sources/ref_method.rst.txt +32 -0
- docs/build/html/_sources/ref_theoretical.rst.txt +5 -0
- docs/build/html/_sources/ref_utils.rst.txt +5 -0
- docs/build/html/_static/alabaster.css +663 -0
- docs/build/html/_static/basic.css +914 -0
- docs/build/html/_static/custom.css +1 -0
- docs/build/html/_static/doctools.js +149 -0
- docs/build/html/_static/documentation_options.js +13 -0
- docs/build/html/_static/file.png +0 -0
- docs/build/html/_static/github-banner.svg +5 -0
- docs/build/html/_static/language_data.js +192 -0
- docs/build/html/_static/minus.png +0 -0
- docs/build/html/_static/plus.png +0 -0
- docs/build/html/_static/pygments.css +84 -0
- docs/build/html/_static/searchtools.js +632 -0
- docs/build/html/_static/sphinx_highlight.js +154 -0
- docs/build/html/_static/tabs.css +89 -0
- docs/build/html/_static/tabs.js +145 -0
- docs/build/html/genindex.html +231 -0
- docs/build/html/index.html +173 -0
- docs/build/html/objects.inv +0 -0
- docs/build/html/py-modindex.html +143 -0
- docs/build/html/ref_cusum.html +252 -0
- docs/build/html/ref_method.html +179 -0
- docs/build/html/ref_theoretical.html +208 -0
- docs/build/html/ref_utils.html +180 -0
- docs/build/html/search.html +131 -0
- docs/build/html/searchindex.js +1 -0
- docs/build/latex/LICRcyr2utf8.xdy +101 -0
- docs/build/latex/LICRlatin2utf8.xdy +239 -0
.gitattributes
CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
assets/AIM-CU-Overview.drawio.png filter=lfs diff=lfs merge=lfs -text
|
37 |
+
docs/build/latex/aim-cu.pdf filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM ubuntu:22.04
|
2 |
+
|
3 |
+
ENV DEBIAN_FRONTEND=noninteractive
|
4 |
+
RUN apt-get update && apt-get install -y software-properties-common dirmngr wget
|
5 |
+
|
6 |
+
RUN apt-get update && apt-get install -y python3 python3-distutils python3-dev
|
7 |
+
RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py
|
8 |
+
|
9 |
+
RUN wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
|
10 |
+
RUN add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
|
11 |
+
RUN apt-get install -y --no-install-recommends r-base r-base-dev
|
12 |
+
|
13 |
+
# setup R configs
|
14 |
+
RUN echo "r <- getOption('repos'); r['CRAN'] <- 'http://cran.us.r-project.org'; options(repos = r);" > ~/.Rprofile
|
15 |
+
RUN Rscript -e "install.packages('ggplot2')"
|
16 |
+
RUN Rscript -e "install.packages('hexbin')"
|
17 |
+
RUN Rscript -e "install.packages('lazyeval')"
|
18 |
+
RUN Rscript -e "install.packages('cusumcharter')"
|
19 |
+
RUN Rscript -e "install.packages('RcppCNPy')"
|
20 |
+
RUN Rscript -e "install.packages('spc')"
|
21 |
+
|
22 |
+
WORKDIR /app/src/package
|
23 |
+
COPY . /app/
|
24 |
+
|
25 |
+
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
|
26 |
+
|
27 |
+
CMD ["python3", "app.py"]
|
LICENSE
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Creative Commons Legal Code
|
2 |
+
|
3 |
+
CC0 1.0 Universal
|
4 |
+
|
5 |
+
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
6 |
+
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
7 |
+
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
8 |
+
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
9 |
+
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
10 |
+
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
11 |
+
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
12 |
+
HEREUNDER.
|
13 |
+
|
14 |
+
Statement of Purpose
|
15 |
+
|
16 |
+
The laws of most jurisdictions throughout the world automatically confer
|
17 |
+
exclusive Copyright and Related Rights (defined below) upon the creator
|
18 |
+
and subsequent owner(s) (each and all, an "owner") of an original work of
|
19 |
+
authorship and/or a database (each, a "Work").
|
20 |
+
|
21 |
+
Certain owners wish to permanently relinquish those rights to a Work for
|
22 |
+
the purpose of contributing to a commons of creative, cultural and
|
23 |
+
scientific works ("Commons") that the public can reliably and without fear
|
24 |
+
of later claims of infringement build upon, modify, incorporate in other
|
25 |
+
works, reuse and redistribute as freely as possible in any form whatsoever
|
26 |
+
and for any purposes, including without limitation commercial purposes.
|
27 |
+
These owners may contribute to the Commons to promote the ideal of a free
|
28 |
+
culture and the further production of creative, cultural and scientific
|
29 |
+
works, or to gain reputation or greater distribution for their Work in
|
30 |
+
part through the use and efforts of others.
|
31 |
+
|
32 |
+
For these and/or other purposes and motivations, and without any
|
33 |
+
expectation of additional consideration or compensation, the person
|
34 |
+
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
35 |
+
is an owner of Copyright and Related Rights in the Work, voluntarily
|
36 |
+
elects to apply CC0 to the Work and publicly distribute the Work under its
|
37 |
+
terms, with knowledge of his or her Copyright and Related Rights in the
|
38 |
+
Work and the meaning and intended legal effect of CC0 on those rights.
|
39 |
+
|
40 |
+
1. Copyright and Related Rights. A Work made available under CC0 may be
|
41 |
+
protected by copyright and related or neighboring rights ("Copyright and
|
42 |
+
Related Rights"). Copyright and Related Rights include, but are not
|
43 |
+
limited to, the following:
|
44 |
+
|
45 |
+
i. the right to reproduce, adapt, distribute, perform, display,
|
46 |
+
communicate, and translate a Work;
|
47 |
+
ii. moral rights retained by the original author(s) and/or performer(s);
|
48 |
+
iii. publicity and privacy rights pertaining to a person's image or
|
49 |
+
likeness depicted in a Work;
|
50 |
+
iv. rights protecting against unfair competition in regards to a Work,
|
51 |
+
subject to the limitations in paragraph 4(a), below;
|
52 |
+
v. rights protecting the extraction, dissemination, use and reuse of data
|
53 |
+
in a Work;
|
54 |
+
vi. database rights (such as those arising under Directive 96/9/EC of the
|
55 |
+
European Parliament and of the Council of 11 March 1996 on the legal
|
56 |
+
protection of databases, and under any national implementation
|
57 |
+
thereof, including any amended or successor version of such
|
58 |
+
directive); and
|
59 |
+
vii. other similar, equivalent or corresponding rights throughout the
|
60 |
+
world based on applicable law or treaty, and any national
|
61 |
+
implementations thereof.
|
62 |
+
|
63 |
+
2. Waiver. To the greatest extent permitted by, but not in contravention
|
64 |
+
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
65 |
+
irrevocably and unconditionally waives, abandons, and surrenders all of
|
66 |
+
Affirmer's Copyright and Related Rights and associated claims and causes
|
67 |
+
of action, whether now known or unknown (including existing as well as
|
68 |
+
future claims and causes of action), in the Work (i) in all territories
|
69 |
+
worldwide, (ii) for the maximum duration provided by applicable law or
|
70 |
+
treaty (including future time extensions), (iii) in any current or future
|
71 |
+
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
72 |
+
including without limitation commercial, advertising or promotional
|
73 |
+
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
74 |
+
member of the public at large and to the detriment of Affirmer's heirs and
|
75 |
+
successors, fully intending that such Waiver shall not be subject to
|
76 |
+
revocation, rescission, cancellation, termination, or any other legal or
|
77 |
+
equitable action to disrupt the quiet enjoyment of the Work by the public
|
78 |
+
as contemplated by Affirmer's express Statement of Purpose.
|
79 |
+
|
80 |
+
3. Public License Fallback. Should any part of the Waiver for any reason
|
81 |
+
be judged legally invalid or ineffective under applicable law, then the
|
82 |
+
Waiver shall be preserved to the maximum extent permitted taking into
|
83 |
+
account Affirmer's express Statement of Purpose. In addition, to the
|
84 |
+
extent the Waiver is so judged Affirmer hereby grants to each affected
|
85 |
+
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
86 |
+
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
87 |
+
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
88 |
+
maximum duration provided by applicable law or treaty (including future
|
89 |
+
time extensions), (iii) in any current or future medium and for any number
|
90 |
+
of copies, and (iv) for any purpose whatsoever, including without
|
91 |
+
limitation commercial, advertising or promotional purposes (the
|
92 |
+
"License"). The License shall be deemed effective as of the date CC0 was
|
93 |
+
applied by Affirmer to the Work. Should any part of the License for any
|
94 |
+
reason be judged legally invalid or ineffective under applicable law, such
|
95 |
+
partial invalidity or ineffectiveness shall not invalidate the remainder
|
96 |
+
of the License, and in such case Affirmer hereby affirms that he or she
|
97 |
+
will not (i) exercise any of his or her remaining Copyright and Related
|
98 |
+
Rights in the Work or (ii) assert any associated claims and causes of
|
99 |
+
action with respect to the Work, in either case contrary to Affirmer's
|
100 |
+
express Statement of Purpose.
|
101 |
+
|
102 |
+
4. Limitations and Disclaimers.
|
103 |
+
|
104 |
+
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
105 |
+
surrendered, licensed or otherwise affected by this document.
|
106 |
+
b. Affirmer offers the Work as-is and makes no representations or
|
107 |
+
warranties of any kind concerning the Work, express, implied,
|
108 |
+
statutory or otherwise, including without limitation warranties of
|
109 |
+
title, merchantability, fitness for a particular purpose, non
|
110 |
+
infringement, or the absence of latent or other defects, accuracy, or
|
111 |
+
the present or absence of errors, whether or not discoverable, all to
|
112 |
+
the greatest extent permissible under applicable law.
|
113 |
+
c. Affirmer disclaims responsibility for clearing rights of other persons
|
114 |
+
that may apply to the Work or any use thereof, including without
|
115 |
+
limitation any person's Copyright and Related Rights in the Work.
|
116 |
+
Further, Affirmer disclaims responsibility for obtaining any necessary
|
117 |
+
consents, permissions or other rights required for any use of the
|
118 |
+
Work.
|
119 |
+
d. Affirmer understands and acknowledges that Creative Commons is not a
|
120 |
+
party to this document and has no duty or obligation with respect to
|
121 |
+
this CC0 or use of the Work.
|
README.rst
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
AIM-CU : A CUSUM-based tool for AI Monitoring
|
2 |
+
======
|
3 |
+
|
4 |
+
.. image:: assets/AIM-CU-Overview.drawio.png
|
5 |
+
:width: 800
|
6 |
+
:align: center
|
7 |
+
:alt: AIM-CU flowchart
|
8 |
+
|
9 |
+
Monitoring a clinically deployed AI device to detect performance drift is an essential step to
|
10 |
+
ensure the safety and effectiveness of AI.
|
11 |
+
|
12 |
+
AIM-CU is a statistical tool for AI monitoring using cumulative sum (AIM-CU).
|
13 |
+
AIM-CU computes:
|
14 |
+
|
15 |
+
* The parameter choices for change-point detection based on an acceptable false alarm rate
|
16 |
+
* Detection delay estimates for a given displacement of the performance metric from the target for those parameter choices.
|
17 |
+
|
18 |
+
Code execution
|
19 |
+
--------------
|
20 |
+
Clone AIM-CU repository.
|
21 |
+
|
22 |
+
.. code-block:: shell
|
23 |
+
|
24 |
+
git clone https://github.com/DIDSR/AIM-CU.git
|
25 |
+
|
26 |
+
Run the following commands to install required dependencies (Python = 3.10 is used).
|
27 |
+
|
28 |
+
.. code-block:: shell
|
29 |
+
|
30 |
+
apt-get -y install python3
|
31 |
+
apt-get -y install pip
|
32 |
+
cd AIM-CU
|
33 |
+
pip install -r requirements.txt
|
34 |
+
|
35 |
+
Run AIM-CU.
|
36 |
+
|
37 |
+
.. code-block:: shell
|
38 |
+
|
39 |
+
python3 app.py
|
40 |
+
|
41 |
+
Open the URL http://0.0.0.0:7860 that is running the AIM-CU locally.
|
42 |
+
|
43 |
+
Example code execution
|
44 |
+
----------------------
|
45 |
+
Example code can be run in a Jupyter Notebook after opening it with ``jupyter notebook`` command from ``/src/package`` directory.
|
46 |
+
|
47 |
+
Demo
|
48 |
+
----
|
49 |
+
AIM-CU can also be run through the demo available at https://huggingface.co/spaces/didsr/AIM-CU. If Space is paused, click on Restart button.
|
50 |
+
|
51 |
+
Related References
|
52 |
+
------------------
|
53 |
+
* Smriti Prathapan, Ravi K. Samala, Nathan Hadjiyski, Pierre‑François D’Haese, Nicholas Petrick, Jana Delfino, Fabien Maldonado, Brandon Nelson, Ghada Zamzmi, Phuong Nguyen, Yelena Yesha, and Berkman Sahiner, "Detecting performance drift in AI models for medical image analysis using CUSUM chart" (Journal Draft in-progress 2025)
|
54 |
+
|
55 |
+
* Prathapan, S., Sahiner, B., Kadia, D., and Samala, R.K. 2025, AIM-CU: A statistical tool for AI Monitoring. In Medical Imaging 2025: Computer-Aided Diagnosis. SPIE. (Accepted)
|
56 |
+
|
57 |
+
* Prathapan, S., Samala, R.K., Hadjiyski, N., D’Haese, P.F., Maldonado, F., Nguyen, P., Yesha, Y. and Sahiner, B., 2024, April. Quantifying input data drift in medical machine learning models by detecting change-points in time-series data. In Medical Imaging 2024: Computer-Aided Diagnosis (Vol. 12927, pp. 67-76). SPIE. https://doi.org/10.1117/12.3008771
|
58 |
+
|
59 |
+
* Smriti Prathapan, Ravi K. Samala, Nathan Hadjiyski, Pierre‑François D’Haese, Nicholas Petrick, Jana Delfino, Fabien Maldonado, Brandon Nelson, Ghada Zamzmi, Phuong Nguyen, Yelena Yesha, and Berkman Sahiner, "Post-market Monitoring of AI-enabled Medical Devices for Radiology and Healthcare Applications" (FDA-UMiami Collaboration Poster, September 2023)
|
60 |
+
|
61 |
+
|
62 |
+
Disclaimer
|
63 |
+
----------
|
64 |
+
This software and documentation was developed at the Food and Drug Administration (FDA) by employees of the Federal Government in the course of their official duties. Pursuant to Title 17, Section 105 of the United States Code, this work is not subject to copyright protection and is in the public domain. Permission is hereby granted, free of charge, to any person obtaining a copy of the Software, to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software or derivatives, and to permit persons to whom the Software is furnished to do so. FDA assumes no responsibility whatsoever for use by other parties of the Software, its source code, documentation or compiled executables, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. Further, use of this code in no way implies endorsement by the FDA or confers any advantage in regulatory decisions. Although this software can be redistributed and/or modified freely, we ask that any derivative works bear some notice that they are derived from it, and any modified versions bear some notice that they have been modified.
|
assets/AIM-CU-Overview.drawio.png
ADDED
![]() |
Git LFS Details
|
assets/AIM-CU-Overview.drawio.xml
ADDED
The diff for this file is too large to render.
See raw diff
|
|
assets/params.csv
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Parameter,Description
|
2 |
+
μ_in,"The mean of the performance metric when the process is in-control, i.e., when there is no performance drift"
|
3 |
+
ARL_0,Number of observations before the control chart signals a false detection
|
4 |
+
σ_in,The in-control standard deviation of the metric
|
5 |
+
ARL_1,Number of observations before the control chart signals a true detection
|
6 |
+
k,"The normalized reference value, which is related to the magnitude of change that one is interested in detecting. k = 0.5 is the default choice for detecting a unit standard deviation change"
|
7 |
+
S_hi,Cumulative sum of positive changes in the metric
|
8 |
+
h,The normalized threshold or control limit (default =4). This threshold determines when the control chart signals a detection
|
9 |
+
S_lo,Cumulative sum of negative changes in the metric
|
config/config.toml
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# paths to input files
|
2 |
+
[path_input]
|
3 |
+
path_df_metric = "config/spec-60-60.csv"
|
4 |
+
|
5 |
+
# paths to output files
|
6 |
+
[path_output]
|
7 |
+
path_figure = "figure/"
|
8 |
+
|
9 |
+
# primary colors
|
10 |
+
[color]
|
11 |
+
blue_005 = "#F3F9FC"
|
12 |
+
blue_020 = "#D0E4F0"
|
13 |
+
blue_040 = "#A3CAE1"
|
14 |
+
blue_060 = "#77B0D2"
|
15 |
+
blue_080 = "#4F96C4"
|
16 |
+
blue_100 = "#007CBA"
|
17 |
+
|
18 |
+
# controls
|
19 |
+
[control]
|
20 |
+
save_figure = "false"
|
21 |
+
|
22 |
+
# CUSUM parameters
|
23 |
+
[params_cusum]
|
24 |
+
list_ARL_0 = [50, 100, 150, 200, 300, 400, 500, 1000]
|
25 |
+
shift_in_mean = [
|
26 |
+
0.1,
|
27 |
+
0.2,
|
28 |
+
0.3,
|
29 |
+
0.4,
|
30 |
+
0.5,
|
31 |
+
0.6,
|
32 |
+
0.7,
|
33 |
+
0.8,
|
34 |
+
0.9,
|
35 |
+
1.0,
|
36 |
+
1.1,
|
37 |
+
1.2,
|
38 |
+
1.3,
|
39 |
+
1.4,
|
40 |
+
1.5,
|
41 |
+
1.6,
|
42 |
+
]
|
config/spec-60-60.csv
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
x,y
|
2 |
+
0,0.8426395939086294
|
3 |
+
1,0.8913043478260869
|
4 |
+
2,0.8826530612244898
|
5 |
+
3,0.8308457711442786
|
6 |
+
4,0.7679558011049724
|
7 |
+
5,0.8444444444444444
|
8 |
+
6,0.8306878306878307
|
9 |
+
7,0.8308457711442786
|
10 |
+
8,0.8936170212765957
|
11 |
+
9,0.8138297872340425
|
12 |
+
10,0.7747252747252747
|
13 |
+
11,0.8052631578947368
|
14 |
+
12,0.8090452261306532
|
15 |
+
13,0.8317757009345794
|
16 |
+
14,0.8958333333333334
|
17 |
+
15,0.8306878306878307
|
18 |
+
16,0.8556701030927835
|
19 |
+
17,0.8387096774193549
|
20 |
+
18,0.7894736842105263
|
21 |
+
19,0.8563829787234043
|
22 |
+
20,0.8186813186813187
|
23 |
+
21,0.8306878306878307
|
24 |
+
22,0.7918781725888325
|
25 |
+
23,0.8823529411764706
|
26 |
+
24,0.8737373737373737
|
27 |
+
25,0.8666666666666667
|
28 |
+
26,0.8518518518518519
|
29 |
+
27,0.8659217877094972
|
30 |
+
28,0.8232044198895028
|
31 |
+
29,0.8764044943820225
|
32 |
+
30,0.8167539267015707
|
33 |
+
31,0.8478260869565217
|
34 |
+
32,0.8363636363636363
|
35 |
+
33,0.797752808988764
|
36 |
+
34,0.8309859154929577
|
37 |
+
35,0.875
|
38 |
+
36,0.8
|
39 |
+
37,0.8608247422680413
|
40 |
+
38,0.8288770053475936
|
41 |
+
39,0.8556149732620321
|
42 |
+
40,0.8153846153846154
|
43 |
+
41,0.859375
|
44 |
+
42,0.8324607329842932
|
45 |
+
43,0.9043062200956937
|
46 |
+
44,0.8279569892473119
|
47 |
+
45,0.8197674418604651
|
48 |
+
46,0.7795698924731183
|
49 |
+
47,0.8135593220338984
|
50 |
+
48,0.8481675392670157
|
51 |
+
49,0.8134715025906736
|
52 |
+
50,0.7864583333333334
|
53 |
+
51,0.8548387096774194
|
54 |
+
52,0.8370786516853933
|
55 |
+
53,0.7157360406091371
|
56 |
+
54,0.8324607329842932
|
57 |
+
55,0.8296703296703297
|
58 |
+
56,0.8844221105527639
|
59 |
+
57,0.7884615384615384
|
60 |
+
58,0.935
|
61 |
+
59,0.8840579710144928
|
62 |
+
60,0.75
|
63 |
+
61,0.8324607329842932
|
64 |
+
62,0.7939698492462312
|
65 |
+
63,0.7272727272727273
|
66 |
+
64,0.8284313725490197
|
67 |
+
65,0.7692307692307693
|
68 |
+
66,0.8010204081632653
|
69 |
+
67,0.8235294117647058
|
70 |
+
68,0.7277486910994765
|
71 |
+
69,0.775
|
72 |
+
70,0.8361581920903954
|
73 |
+
71,0.7959183673469388
|
74 |
+
72,0.8489583333333334
|
75 |
+
73,0.8465346534653465
|
76 |
+
74,0.812807881773399
|
77 |
+
75,0.7475247524752475
|
78 |
+
76,0.8491620111731844
|
79 |
+
77,0.6989247311827957
|
80 |
+
78,0.7967914438502673
|
81 |
+
79,0.7236180904522613
|
82 |
+
80,0.746031746031746
|
83 |
+
81,0.7371428571428571
|
84 |
+
82,0.7839195979899497
|
85 |
+
83,0.7921348314606742
|
86 |
+
84,0.8258706467661692
|
87 |
+
85,0.8121827411167513
|
88 |
+
86,0.8258426966292135
|
89 |
+
87,0.7675675675675676
|
90 |
+
88,0.6666666666666666
|
91 |
+
89,0.7872340425531915
|
92 |
+
90,0.8325123152709359
|
93 |
+
91,0.8247422680412371
|
94 |
+
92,0.7619047619047619
|
95 |
+
93,0.7967032967032966
|
96 |
+
94,0.867816091954023
|
97 |
+
95,0.8010471204188482
|
98 |
+
96,0.625
|
99 |
+
97,0.7684210526315789
|
100 |
+
98,0.7409326424870466
|
101 |
+
99,0.7593582887700535
|
102 |
+
100,0.8041237113402062
|
103 |
+
101,0.8160919540229885
|
104 |
+
102,0.803030303030303
|
105 |
+
103,0.6898395721925134
|
106 |
+
104,0.7037037037037037
|
107 |
+
105,0.8219895287958116
|
108 |
+
106,0.8153846153846154
|
109 |
+
107,0.712707182320442
|
110 |
+
108,0.7548076923076923
|
111 |
+
109,0.8258426966292135
|
112 |
+
110,0.8
|
113 |
+
111,0.7444444444444445
|
114 |
+
112,0.7604166666666666
|
115 |
+
113,0.7446808510638298
|
116 |
+
114,0.7845303867403315
|
117 |
+
115,0.7616279069767442
|
118 |
+
116,0.7525773195876289
|
119 |
+
117,0.7213930348258707
|
120 |
+
118,0.8222222222222222
|
121 |
+
119,0.817258883248731
|
docs/Makefile
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Minimal makefile for Sphinx documentation
|
2 |
+
#
|
3 |
+
|
4 |
+
# You can set these variables from the command line, and also
|
5 |
+
# from the environment for the first two.
|
6 |
+
SPHINXOPTS ?=
|
7 |
+
SPHINXBUILD ?= sphinx-build
|
8 |
+
SOURCEDIR = source
|
9 |
+
BUILDDIR = build
|
10 |
+
|
11 |
+
# Put it first so that "make" without argument is like "make help".
|
12 |
+
help:
|
13 |
+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
14 |
+
|
15 |
+
.PHONY: help Makefile
|
16 |
+
|
17 |
+
# Catch-all target: route all unknown targets to Sphinx using the new
|
18 |
+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
19 |
+
%: Makefile
|
20 |
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
docs/README.rst
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Documentation
|
2 |
+
=============
|
3 |
+
|
4 |
+
Read the documentation
|
5 |
+
----------------------
|
6 |
+
Access the documentation from `index.html <build/html/index.html>`_
|
7 |
+
|
8 |
+
Generate Sphinx documentation
|
9 |
+
-----------------------------
|
10 |
+
Run the below command from ``/src/package``.
|
11 |
+
|
12 |
+
HTML format:
|
13 |
+
|
14 |
+
.. code-block:: shell
|
15 |
+
|
16 |
+
sphinx-build -M html ../../docs/source ../../docs/build --fail-on-warning
|
17 |
+
|
18 |
+
As a PDF file:
|
19 |
+
|
20 |
+
Required: Install latex - ``sudo apt-get install texlive-full``
|
21 |
+
|
22 |
+
.. code-block:: shell
|
23 |
+
|
24 |
+
sphinx-build -M latexpdf ../../docs/source ../../docs/build --fail-on-warning
|
25 |
+
|
26 |
+
Access it from `aim-cu.pdf <build/latex/aim-cu.pdf>`_
|
docs/build/doctrees/environment.pickle
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:73a5f70cee490be573c5c2a1614594bb93b5aa232863c9f4004a876906fc4d13
|
3 |
+
size 34605
|
docs/build/doctrees/index.doctree
ADDED
Binary file (7.51 kB). View file
|
|
docs/build/doctrees/ref_cusum.doctree
ADDED
Binary file (46.1 kB). View file
|
|
docs/build/doctrees/ref_method.doctree
ADDED
Binary file (12.2 kB). View file
|
|
docs/build/doctrees/ref_theoretical.doctree
ADDED
Binary file (31.6 kB). View file
|
|
docs/build/doctrees/ref_utils.doctree
ADDED
Binary file (20.2 kB). View file
|
|
docs/build/html/.buildinfo
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Sphinx build info version 1
|
2 |
+
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
|
3 |
+
config: d98e84fc2d439aaf1e5c362e015e369c
|
4 |
+
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
docs/build/html/_sources/index.rst.txt
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.. AIM-CU documentation master file, created by
|
2 |
+
sphinx-quickstart on Wed Nov 27 09:59:49 2024.
|
3 |
+
You can adapt this file completely to your liking, but it should at least
|
4 |
+
contain the root `toctree` directive.
|
5 |
+
|
6 |
+
AIM-CU documentation
|
7 |
+
====================
|
8 |
+
|
9 |
+
A CUSUM-based tool for AI Monitoring
|
10 |
+
|
11 |
+
AIM-CU is a statistical tool for AI monitoring using cumulative sum (AIM-CU). AIM-CU computes:
|
12 |
+
|
13 |
+
* The parameter choices for change-point detection based on an acceptable false alarm rate
|
14 |
+
* Detection delay estimates for a given displacement of the performance metric from the target for those parameter choices.
|
15 |
+
|
16 |
+
Code execution
|
17 |
+
------------------
|
18 |
+
Clone AIM-CU repository.
|
19 |
+
|
20 |
+
.. code-block:: shell
|
21 |
+
|
22 |
+
git clone https://github.com/DIDSR/AIM-CU.git
|
23 |
+
|
24 |
+
Run the following commands to install required dependencies (Python = 3.10 is used).
|
25 |
+
|
26 |
+
.. code-block:: shell
|
27 |
+
|
28 |
+
apt-get -y install python3
|
29 |
+
apt-get -y install pip
|
30 |
+
cd AIM-CU
|
31 |
+
pip install -r requirements.txt
|
32 |
+
|
33 |
+
Run AIM-CU.
|
34 |
+
|
35 |
+
.. code-block:: shell
|
36 |
+
|
37 |
+
python3 app.py
|
38 |
+
|
39 |
+
Open the URL http://0.0.0.0:7860 that is running the AIM-CU locally.
|
40 |
+
|
41 |
+
Demo
|
42 |
+
------------------
|
43 |
+
AIM-CU can also be run through the demo available at https://huggingface.co/spaces/didsr/AIM-CU. If Space is paused, click on Restart button.
|
44 |
+
|
45 |
+
.. toctree::
|
46 |
+
:maxdepth: 2
|
47 |
+
:caption: Contents:
|
48 |
+
|
49 |
+
ref_method
|
50 |
+
ref_cusum
|
51 |
+
ref_theoretical
|
52 |
+
ref_utils
|
docs/build/html/_sources/ref_cusum.rst.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
CUSUM
|
2 |
+
=====
|
3 |
+
|
4 |
+
.. automodule:: package.cusum
|
5 |
+
:members:
|
docs/build/html/_sources/ref_method.rst.txt
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Methods
|
2 |
+
=======
|
3 |
+
|
4 |
+
CUSUM parameters
|
5 |
+
----------------
|
6 |
+
|
7 |
+
.. csv-table:: CUSUM parameters
|
8 |
+
:file: ../../assets/params.csv
|
9 |
+
:header-rows: 1
|
10 |
+
|
11 |
+
CUSUM chart
|
12 |
+
-----------
|
13 |
+
|
14 |
+
A two-sided CUSUM control chart computes the cumulative differences or
|
15 |
+
deviations of individual observations from the target mean (or
|
16 |
+
in-control mean, :math:`\mu_{in}`). The positive and negative cumulative
|
17 |
+
sums are calculated:
|
18 |
+
|
19 |
+
.. math::
|
20 |
+
|
21 |
+
\\ S_{hi}(d) = max(0, S_{hi}(d-1) + x_d - \hat{\mu}_{in} - K)
|
22 |
+
\\ S_{lo}(d) = max(0, S_{lo}(d-1) - x_d + \hat{\mu}_{in} - K)
|
23 |
+
|
24 |
+
where *d* denotes a unit of time, :math:`x_d` is the value of quantity
|
25 |
+
being monitored at time :math:`d`, :math:`\hat{\mu}_{in}` is the
|
26 |
+
in-control mean of :math:`x_d`, and :math:`K` is a "reference value"
|
27 |
+
related to the magnitude of change that one is interested in detecting.
|
28 |
+
:math:`S_{hi}` and :math:`S_{lo}` are the cumulative sum of positive and
|
29 |
+
negative changes. To detect a change in the observed values from the
|
30 |
+
in-control mean, the CUSUM scheme accumulates deviations that are
|
31 |
+
:math:`K` units away from the in-control mean. Let :math:`\sigma_{in}`
|
32 |
+
denote the in-control standard deviation of :math:`x_d`.
|
docs/build/html/_sources/ref_theoretical.rst.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ARLTheoretical
|
2 |
+
==============
|
3 |
+
|
4 |
+
.. automodule:: package.ARLTheoretical
|
5 |
+
:members:
|
docs/build/html/_sources/ref_utils.rst.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Utils
|
2 |
+
=====
|
3 |
+
|
4 |
+
.. automodule:: package.utils
|
5 |
+
:members:
|
docs/build/html/_static/alabaster.css
ADDED
@@ -0,0 +1,663 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* -- page layout ----------------------------------------------------------- */
|
2 |
+
|
3 |
+
body {
|
4 |
+
font-family: Georgia, serif;
|
5 |
+
font-size: 17px;
|
6 |
+
background-color: #fff;
|
7 |
+
color: #000;
|
8 |
+
margin: 0;
|
9 |
+
padding: 0;
|
10 |
+
}
|
11 |
+
|
12 |
+
|
13 |
+
div.document {
|
14 |
+
width: 1200px;
|
15 |
+
margin: 30px auto 0 auto;
|
16 |
+
}
|
17 |
+
|
18 |
+
div.documentwrapper {
|
19 |
+
float: left;
|
20 |
+
width: 100%;
|
21 |
+
}
|
22 |
+
|
23 |
+
div.bodywrapper {
|
24 |
+
margin: 0 0 0 300px;
|
25 |
+
}
|
26 |
+
|
27 |
+
div.sphinxsidebar {
|
28 |
+
width: 300px;
|
29 |
+
font-size: 14px;
|
30 |
+
line-height: 1.5;
|
31 |
+
}
|
32 |
+
|
33 |
+
hr {
|
34 |
+
border: 1px solid #B1B4B6;
|
35 |
+
}
|
36 |
+
|
37 |
+
div.body {
|
38 |
+
background-color: #fff;
|
39 |
+
color: #3E4349;
|
40 |
+
padding: 0 30px 0 30px;
|
41 |
+
}
|
42 |
+
|
43 |
+
div.body > .section {
|
44 |
+
text-align: left;
|
45 |
+
}
|
46 |
+
|
47 |
+
div.footer {
|
48 |
+
width: 1200px;
|
49 |
+
margin: 20px auto 30px auto;
|
50 |
+
font-size: 14px;
|
51 |
+
color: #888;
|
52 |
+
text-align: right;
|
53 |
+
}
|
54 |
+
|
55 |
+
div.footer a {
|
56 |
+
color: #888;
|
57 |
+
}
|
58 |
+
|
59 |
+
p.caption {
|
60 |
+
font-family: inherit;
|
61 |
+
font-size: inherit;
|
62 |
+
}
|
63 |
+
|
64 |
+
|
65 |
+
div.relations {
|
66 |
+
display: none;
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
div.sphinxsidebar {
|
71 |
+
max-height: 100%;
|
72 |
+
overflow-y: auto;
|
73 |
+
}
|
74 |
+
|
75 |
+
div.sphinxsidebar a {
|
76 |
+
color: #444;
|
77 |
+
text-decoration: none;
|
78 |
+
border-bottom: 1px dotted #999;
|
79 |
+
}
|
80 |
+
|
81 |
+
div.sphinxsidebar a:hover {
|
82 |
+
border-bottom: 1px solid #999;
|
83 |
+
}
|
84 |
+
|
85 |
+
div.sphinxsidebarwrapper {
|
86 |
+
padding: 18px 10px;
|
87 |
+
}
|
88 |
+
|
89 |
+
div.sphinxsidebarwrapper p.logo {
|
90 |
+
padding: 0;
|
91 |
+
margin: -10px 0 0 0px;
|
92 |
+
text-align: center;
|
93 |
+
}
|
94 |
+
|
95 |
+
div.sphinxsidebarwrapper h1.logo {
|
96 |
+
margin-top: -10px;
|
97 |
+
text-align: center;
|
98 |
+
margin-bottom: 5px;
|
99 |
+
text-align: left;
|
100 |
+
}
|
101 |
+
|
102 |
+
div.sphinxsidebarwrapper h1.logo-name {
|
103 |
+
margin-top: 0px;
|
104 |
+
}
|
105 |
+
|
106 |
+
div.sphinxsidebarwrapper p.blurb {
|
107 |
+
margin-top: 0;
|
108 |
+
font-style: normal;
|
109 |
+
}
|
110 |
+
|
111 |
+
div.sphinxsidebar h3,
|
112 |
+
div.sphinxsidebar h4 {
|
113 |
+
font-family: Georgia, serif;
|
114 |
+
color: #444;
|
115 |
+
font-size: 24px;
|
116 |
+
font-weight: normal;
|
117 |
+
margin: 0 0 5px 0;
|
118 |
+
padding: 0;
|
119 |
+
}
|
120 |
+
|
121 |
+
div.sphinxsidebar h4 {
|
122 |
+
font-size: 20px;
|
123 |
+
}
|
124 |
+
|
125 |
+
div.sphinxsidebar h3 a {
|
126 |
+
color: #444;
|
127 |
+
}
|
128 |
+
|
129 |
+
div.sphinxsidebar p.logo a,
|
130 |
+
div.sphinxsidebar h3 a,
|
131 |
+
div.sphinxsidebar p.logo a:hover,
|
132 |
+
div.sphinxsidebar h3 a:hover {
|
133 |
+
border: none;
|
134 |
+
}
|
135 |
+
|
136 |
+
div.sphinxsidebar p {
|
137 |
+
color: #555;
|
138 |
+
margin: 10px 0;
|
139 |
+
}
|
140 |
+
|
141 |
+
div.sphinxsidebar ul {
|
142 |
+
margin: 10px 0;
|
143 |
+
padding: 0;
|
144 |
+
color: #000;
|
145 |
+
}
|
146 |
+
|
147 |
+
div.sphinxsidebar ul li.toctree-l1 > a {
|
148 |
+
font-size: 120%;
|
149 |
+
}
|
150 |
+
|
151 |
+
div.sphinxsidebar ul li.toctree-l2 > a {
|
152 |
+
font-size: 110%;
|
153 |
+
}
|
154 |
+
|
155 |
+
div.sphinxsidebar input {
|
156 |
+
border: 1px solid #CCC;
|
157 |
+
font-family: Georgia, serif;
|
158 |
+
font-size: 1em;
|
159 |
+
}
|
160 |
+
|
161 |
+
div.sphinxsidebar #searchbox {
|
162 |
+
margin: 1em 0;
|
163 |
+
}
|
164 |
+
|
165 |
+
div.sphinxsidebar .search > div {
|
166 |
+
display: table-cell;
|
167 |
+
}
|
168 |
+
|
169 |
+
div.sphinxsidebar hr {
|
170 |
+
border: none;
|
171 |
+
height: 1px;
|
172 |
+
color: #AAA;
|
173 |
+
background: #AAA;
|
174 |
+
|
175 |
+
text-align: left;
|
176 |
+
margin-left: 0;
|
177 |
+
width: 50%;
|
178 |
+
}
|
179 |
+
|
180 |
+
div.sphinxsidebar .badge {
|
181 |
+
border-bottom: none;
|
182 |
+
}
|
183 |
+
|
184 |
+
div.sphinxsidebar .badge:hover {
|
185 |
+
border-bottom: none;
|
186 |
+
}
|
187 |
+
|
188 |
+
/* To address an issue with donation coming after search */
|
189 |
+
div.sphinxsidebar h3.donation {
|
190 |
+
margin-top: 10px;
|
191 |
+
}
|
192 |
+
|
193 |
+
/* -- body styles ----------------------------------------------------------- */
|
194 |
+
|
195 |
+
a {
|
196 |
+
color: #004B6B;
|
197 |
+
text-decoration: underline;
|
198 |
+
}
|
199 |
+
|
200 |
+
a:hover {
|
201 |
+
color: #6D4100;
|
202 |
+
text-decoration: underline;
|
203 |
+
}
|
204 |
+
|
205 |
+
div.body h1,
|
206 |
+
div.body h2,
|
207 |
+
div.body h3,
|
208 |
+
div.body h4,
|
209 |
+
div.body h5,
|
210 |
+
div.body h6 {
|
211 |
+
font-family: Georgia, serif;
|
212 |
+
font-weight: normal;
|
213 |
+
margin: 30px 0px 10px 0px;
|
214 |
+
padding: 0;
|
215 |
+
}
|
216 |
+
|
217 |
+
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
|
218 |
+
div.body h2 { font-size: 180%; }
|
219 |
+
div.body h3 { font-size: 150%; }
|
220 |
+
div.body h4 { font-size: 130%; }
|
221 |
+
div.body h5 { font-size: 100%; }
|
222 |
+
div.body h6 { font-size: 100%; }
|
223 |
+
|
224 |
+
a.headerlink {
|
225 |
+
color: #DDD;
|
226 |
+
padding: 0 4px;
|
227 |
+
text-decoration: none;
|
228 |
+
}
|
229 |
+
|
230 |
+
a.headerlink:hover {
|
231 |
+
color: #444;
|
232 |
+
background: #EAEAEA;
|
233 |
+
}
|
234 |
+
|
235 |
+
div.body p, div.body dd, div.body li {
|
236 |
+
line-height: 1.4em;
|
237 |
+
}
|
238 |
+
|
239 |
+
div.admonition {
|
240 |
+
margin: 20px 0px;
|
241 |
+
padding: 10px 30px;
|
242 |
+
background-color: #EEE;
|
243 |
+
border: 1px solid #CCC;
|
244 |
+
}
|
245 |
+
|
246 |
+
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
|
247 |
+
background-color: #FBFBFB;
|
248 |
+
border-bottom: 1px solid #fafafa;
|
249 |
+
}
|
250 |
+
|
251 |
+
div.admonition p.admonition-title {
|
252 |
+
font-family: Georgia, serif;
|
253 |
+
font-weight: normal;
|
254 |
+
font-size: 24px;
|
255 |
+
margin: 0 0 10px 0;
|
256 |
+
padding: 0;
|
257 |
+
line-height: 1;
|
258 |
+
}
|
259 |
+
|
260 |
+
div.admonition p.last {
|
261 |
+
margin-bottom: 0;
|
262 |
+
}
|
263 |
+
|
264 |
+
dt:target, .highlight {
|
265 |
+
background: #FAF3E8;
|
266 |
+
}
|
267 |
+
|
268 |
+
div.warning {
|
269 |
+
background-color: #FCC;
|
270 |
+
border: 1px solid #FAA;
|
271 |
+
}
|
272 |
+
|
273 |
+
div.danger {
|
274 |
+
background-color: #FCC;
|
275 |
+
border: 1px solid #FAA;
|
276 |
+
-moz-box-shadow: 2px 2px 4px #D52C2C;
|
277 |
+
-webkit-box-shadow: 2px 2px 4px #D52C2C;
|
278 |
+
box-shadow: 2px 2px 4px #D52C2C;
|
279 |
+
}
|
280 |
+
|
281 |
+
div.error {
|
282 |
+
background-color: #FCC;
|
283 |
+
border: 1px solid #FAA;
|
284 |
+
-moz-box-shadow: 2px 2px 4px #D52C2C;
|
285 |
+
-webkit-box-shadow: 2px 2px 4px #D52C2C;
|
286 |
+
box-shadow: 2px 2px 4px #D52C2C;
|
287 |
+
}
|
288 |
+
|
289 |
+
div.caution {
|
290 |
+
background-color: #FCC;
|
291 |
+
border: 1px solid #FAA;
|
292 |
+
}
|
293 |
+
|
294 |
+
div.attention {
|
295 |
+
background-color: #FCC;
|
296 |
+
border: 1px solid #FAA;
|
297 |
+
}
|
298 |
+
|
299 |
+
div.important {
|
300 |
+
background-color: #EEE;
|
301 |
+
border: 1px solid #CCC;
|
302 |
+
}
|
303 |
+
|
304 |
+
div.note {
|
305 |
+
background-color: #EEE;
|
306 |
+
border: 1px solid #CCC;
|
307 |
+
}
|
308 |
+
|
309 |
+
div.tip {
|
310 |
+
background-color: #EEE;
|
311 |
+
border: 1px solid #CCC;
|
312 |
+
}
|
313 |
+
|
314 |
+
div.hint {
|
315 |
+
background-color: #EEE;
|
316 |
+
border: 1px solid #CCC;
|
317 |
+
}
|
318 |
+
|
319 |
+
div.seealso {
|
320 |
+
background-color: #EEE;
|
321 |
+
border: 1px solid #CCC;
|
322 |
+
}
|
323 |
+
|
324 |
+
div.topic {
|
325 |
+
background-color: #EEE;
|
326 |
+
}
|
327 |
+
|
328 |
+
p.admonition-title {
|
329 |
+
display: inline;
|
330 |
+
}
|
331 |
+
|
332 |
+
p.admonition-title:after {
|
333 |
+
content: ":";
|
334 |
+
}
|
335 |
+
|
336 |
+
pre, tt, code {
|
337 |
+
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
338 |
+
font-size: 0.9em;
|
339 |
+
}
|
340 |
+
|
341 |
+
.hll {
|
342 |
+
background-color: #FFC;
|
343 |
+
margin: 0 -12px;
|
344 |
+
padding: 0 12px;
|
345 |
+
display: block;
|
346 |
+
}
|
347 |
+
|
348 |
+
img.screenshot {
|
349 |
+
}
|
350 |
+
|
351 |
+
tt.descname, tt.descclassname, code.descname, code.descclassname {
|
352 |
+
font-size: 0.95em;
|
353 |
+
}
|
354 |
+
|
355 |
+
tt.descname, code.descname {
|
356 |
+
padding-right: 0.08em;
|
357 |
+
}
|
358 |
+
|
359 |
+
img.screenshot {
|
360 |
+
-moz-box-shadow: 2px 2px 4px #EEE;
|
361 |
+
-webkit-box-shadow: 2px 2px 4px #EEE;
|
362 |
+
box-shadow: 2px 2px 4px #EEE;
|
363 |
+
}
|
364 |
+
|
365 |
+
table.docutils {
|
366 |
+
border: 1px solid #888;
|
367 |
+
-moz-box-shadow: 2px 2px 4px #EEE;
|
368 |
+
-webkit-box-shadow: 2px 2px 4px #EEE;
|
369 |
+
box-shadow: 2px 2px 4px #EEE;
|
370 |
+
}
|
371 |
+
|
372 |
+
table.docutils td, table.docutils th {
|
373 |
+
border: 1px solid #888;
|
374 |
+
padding: 0.25em 0.7em;
|
375 |
+
}
|
376 |
+
|
377 |
+
table.field-list, table.footnote {
|
378 |
+
border: none;
|
379 |
+
-moz-box-shadow: none;
|
380 |
+
-webkit-box-shadow: none;
|
381 |
+
box-shadow: none;
|
382 |
+
}
|
383 |
+
|
384 |
+
table.footnote {
|
385 |
+
margin: 15px 0;
|
386 |
+
width: 100%;
|
387 |
+
border: 1px solid #EEE;
|
388 |
+
background: #FDFDFD;
|
389 |
+
font-size: 0.9em;
|
390 |
+
}
|
391 |
+
|
392 |
+
table.footnote + table.footnote {
|
393 |
+
margin-top: -15px;
|
394 |
+
border-top: none;
|
395 |
+
}
|
396 |
+
|
397 |
+
table.field-list th {
|
398 |
+
padding: 0 0.8em 0 0;
|
399 |
+
}
|
400 |
+
|
401 |
+
table.field-list td {
|
402 |
+
padding: 0;
|
403 |
+
}
|
404 |
+
|
405 |
+
table.field-list p {
|
406 |
+
margin-bottom: 0.8em;
|
407 |
+
}
|
408 |
+
|
409 |
+
/* Cloned from
|
410 |
+
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
|
411 |
+
*/
|
412 |
+
.field-name {
|
413 |
+
-moz-hyphens: manual;
|
414 |
+
-ms-hyphens: manual;
|
415 |
+
-webkit-hyphens: manual;
|
416 |
+
hyphens: manual;
|
417 |
+
}
|
418 |
+
|
419 |
+
table.footnote td.label {
|
420 |
+
width: .1px;
|
421 |
+
padding: 0.3em 0 0.3em 0.5em;
|
422 |
+
}
|
423 |
+
|
424 |
+
table.footnote td {
|
425 |
+
padding: 0.3em 0.5em;
|
426 |
+
}
|
427 |
+
|
428 |
+
dl {
|
429 |
+
margin-left: 0;
|
430 |
+
margin-right: 0;
|
431 |
+
margin-top: 0;
|
432 |
+
padding: 0;
|
433 |
+
}
|
434 |
+
|
435 |
+
dl dd {
|
436 |
+
margin-left: 30px;
|
437 |
+
}
|
438 |
+
|
439 |
+
blockquote {
|
440 |
+
margin: 0 0 0 30px;
|
441 |
+
padding: 0;
|
442 |
+
}
|
443 |
+
|
444 |
+
ul, ol {
|
445 |
+
/* Matches the 30px from the narrow-screen "li > ul" selector below */
|
446 |
+
margin: 10px 0 10px 30px;
|
447 |
+
padding: 0;
|
448 |
+
}
|
449 |
+
|
450 |
+
pre {
|
451 |
+
background: unset;
|
452 |
+
padding: 7px 30px;
|
453 |
+
margin: 15px 0px;
|
454 |
+
line-height: 1.3em;
|
455 |
+
}
|
456 |
+
|
457 |
+
div.viewcode-block:target {
|
458 |
+
background: #ffd;
|
459 |
+
}
|
460 |
+
|
461 |
+
dl pre, blockquote pre, li pre {
|
462 |
+
margin-left: 0;
|
463 |
+
padding-left: 30px;
|
464 |
+
}
|
465 |
+
|
466 |
+
tt, code {
|
467 |
+
background-color: #ecf0f3;
|
468 |
+
color: #222;
|
469 |
+
/* padding: 1px 2px; */
|
470 |
+
}
|
471 |
+
|
472 |
+
tt.xref, code.xref, a tt {
|
473 |
+
background-color: #FBFBFB;
|
474 |
+
border-bottom: 1px solid #fff;
|
475 |
+
}
|
476 |
+
|
477 |
+
a.reference {
|
478 |
+
text-decoration: none;
|
479 |
+
border-bottom: 1px dotted #004B6B;
|
480 |
+
}
|
481 |
+
|
482 |
+
a.reference:hover {
|
483 |
+
border-bottom: 1px solid #6D4100;
|
484 |
+
}
|
485 |
+
|
486 |
+
/* Don't put an underline on images */
|
487 |
+
a.image-reference, a.image-reference:hover {
|
488 |
+
border-bottom: none;
|
489 |
+
}
|
490 |
+
|
491 |
+
a.footnote-reference {
|
492 |
+
text-decoration: none;
|
493 |
+
font-size: 0.7em;
|
494 |
+
vertical-align: top;
|
495 |
+
border-bottom: 1px dotted #004B6B;
|
496 |
+
}
|
497 |
+
|
498 |
+
a.footnote-reference:hover {
|
499 |
+
border-bottom: 1px solid #6D4100;
|
500 |
+
}
|
501 |
+
|
502 |
+
a:hover tt, a:hover code {
|
503 |
+
background: #EEE;
|
504 |
+
}
|
505 |
+
|
506 |
+
@media screen and (max-width: 1200px) {
|
507 |
+
|
508 |
+
body {
|
509 |
+
margin: 0;
|
510 |
+
padding: 20px 30px;
|
511 |
+
}
|
512 |
+
|
513 |
+
div.documentwrapper {
|
514 |
+
float: none;
|
515 |
+
background: #fff;
|
516 |
+
margin-left: 0;
|
517 |
+
margin-top: 0;
|
518 |
+
margin-right: 0;
|
519 |
+
margin-bottom: 0;
|
520 |
+
}
|
521 |
+
|
522 |
+
div.sphinxsidebar {
|
523 |
+
display: block;
|
524 |
+
float: none;
|
525 |
+
width: unset;
|
526 |
+
margin: 50px -30px -20px -30px;
|
527 |
+
padding: 10px 20px;
|
528 |
+
background: #333;
|
529 |
+
color: #FFF;
|
530 |
+
}
|
531 |
+
|
532 |
+
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
|
533 |
+
div.sphinxsidebar h3 a {
|
534 |
+
color: #fff;
|
535 |
+
}
|
536 |
+
|
537 |
+
div.sphinxsidebar a {
|
538 |
+
color: #AAA;
|
539 |
+
}
|
540 |
+
|
541 |
+
div.sphinxsidebar p.logo {
|
542 |
+
display: none;
|
543 |
+
}
|
544 |
+
|
545 |
+
div.document {
|
546 |
+
width: 100%;
|
547 |
+
margin: 0;
|
548 |
+
}
|
549 |
+
|
550 |
+
div.footer {
|
551 |
+
display: none;
|
552 |
+
}
|
553 |
+
|
554 |
+
div.bodywrapper {
|
555 |
+
margin: 0;
|
556 |
+
}
|
557 |
+
|
558 |
+
div.body {
|
559 |
+
min-height: 0;
|
560 |
+
min-width: auto; /* fixes width on small screens, breaks .hll */
|
561 |
+
padding: 0;
|
562 |
+
}
|
563 |
+
|
564 |
+
.hll {
|
565 |
+
/* "fixes" the breakage */
|
566 |
+
width: max-content;
|
567 |
+
}
|
568 |
+
|
569 |
+
.rtd_doc_footer {
|
570 |
+
display: none;
|
571 |
+
}
|
572 |
+
|
573 |
+
.document {
|
574 |
+
width: auto;
|
575 |
+
}
|
576 |
+
|
577 |
+
.footer {
|
578 |
+
width: auto;
|
579 |
+
}
|
580 |
+
|
581 |
+
.github {
|
582 |
+
display: none;
|
583 |
+
}
|
584 |
+
|
585 |
+
ul {
|
586 |
+
margin-left: 0;
|
587 |
+
}
|
588 |
+
|
589 |
+
li > ul {
|
590 |
+
/* Matches the 30px from the "ul, ol" selector above */
|
591 |
+
margin-left: 30px;
|
592 |
+
}
|
593 |
+
}
|
594 |
+
|
595 |
+
|
596 |
+
/* misc. */
|
597 |
+
|
598 |
+
.revsys-inline {
|
599 |
+
display: none!important;
|
600 |
+
}
|
601 |
+
|
602 |
+
/* Hide ugly table cell borders in ..bibliography:: directive output */
|
603 |
+
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
|
604 |
+
border: none;
|
605 |
+
/* Below needed in some edge cases; if not applied, bottom shadows appear */
|
606 |
+
-moz-box-shadow: none;
|
607 |
+
-webkit-box-shadow: none;
|
608 |
+
box-shadow: none;
|
609 |
+
}
|
610 |
+
|
611 |
+
|
612 |
+
/* relbar */
|
613 |
+
|
614 |
+
.related {
|
615 |
+
line-height: 30px;
|
616 |
+
width: 100%;
|
617 |
+
font-size: 0.9rem;
|
618 |
+
}
|
619 |
+
|
620 |
+
.related.top {
|
621 |
+
border-bottom: 1px solid #EEE;
|
622 |
+
margin-bottom: 20px;
|
623 |
+
}
|
624 |
+
|
625 |
+
.related.bottom {
|
626 |
+
border-top: 1px solid #EEE;
|
627 |
+
}
|
628 |
+
|
629 |
+
.related ul {
|
630 |
+
padding: 0;
|
631 |
+
margin: 0;
|
632 |
+
list-style: none;
|
633 |
+
}
|
634 |
+
|
635 |
+
.related li {
|
636 |
+
display: inline;
|
637 |
+
}
|
638 |
+
|
639 |
+
nav#rellinks {
|
640 |
+
float: right;
|
641 |
+
}
|
642 |
+
|
643 |
+
nav#rellinks li+li:before {
|
644 |
+
content: "|";
|
645 |
+
}
|
646 |
+
|
647 |
+
nav#breadcrumbs li+li:before {
|
648 |
+
content: "\00BB";
|
649 |
+
}
|
650 |
+
|
651 |
+
/* Hide certain items when printing */
|
652 |
+
@media print {
|
653 |
+
div.related {
|
654 |
+
display: none;
|
655 |
+
}
|
656 |
+
}
|
657 |
+
|
658 |
+
img.github {
|
659 |
+
position: absolute;
|
660 |
+
top: 0;
|
661 |
+
border: 0;
|
662 |
+
right: 0;
|
663 |
+
}
|
docs/build/html/_static/basic.css
ADDED
@@ -0,0 +1,914 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Sphinx stylesheet -- basic theme.
|
3 |
+
*/
|
4 |
+
|
5 |
+
/* -- main layout ----------------------------------------------------------- */
|
6 |
+
|
7 |
+
div.clearer {
|
8 |
+
clear: both;
|
9 |
+
}
|
10 |
+
|
11 |
+
div.section::after {
|
12 |
+
display: block;
|
13 |
+
content: '';
|
14 |
+
clear: left;
|
15 |
+
}
|
16 |
+
|
17 |
+
/* -- relbar ---------------------------------------------------------------- */
|
18 |
+
|
19 |
+
div.related {
|
20 |
+
width: 100%;
|
21 |
+
font-size: 90%;
|
22 |
+
}
|
23 |
+
|
24 |
+
div.related h3 {
|
25 |
+
display: none;
|
26 |
+
}
|
27 |
+
|
28 |
+
div.related ul {
|
29 |
+
margin: 0;
|
30 |
+
padding: 0 0 0 10px;
|
31 |
+
list-style: none;
|
32 |
+
}
|
33 |
+
|
34 |
+
div.related li {
|
35 |
+
display: inline;
|
36 |
+
}
|
37 |
+
|
38 |
+
div.related li.right {
|
39 |
+
float: right;
|
40 |
+
margin-right: 5px;
|
41 |
+
}
|
42 |
+
|
43 |
+
/* -- sidebar --------------------------------------------------------------- */
|
44 |
+
|
45 |
+
div.sphinxsidebarwrapper {
|
46 |
+
padding: 10px 5px 0 10px;
|
47 |
+
}
|
48 |
+
|
49 |
+
div.sphinxsidebar {
|
50 |
+
float: left;
|
51 |
+
width: 230px;
|
52 |
+
margin-left: -100%;
|
53 |
+
font-size: 90%;
|
54 |
+
word-wrap: break-word;
|
55 |
+
overflow-wrap : break-word;
|
56 |
+
}
|
57 |
+
|
58 |
+
div.sphinxsidebar ul {
|
59 |
+
list-style: none;
|
60 |
+
}
|
61 |
+
|
62 |
+
div.sphinxsidebar ul ul,
|
63 |
+
div.sphinxsidebar ul.want-points {
|
64 |
+
margin-left: 20px;
|
65 |
+
list-style: square;
|
66 |
+
}
|
67 |
+
|
68 |
+
div.sphinxsidebar ul ul {
|
69 |
+
margin-top: 0;
|
70 |
+
margin-bottom: 0;
|
71 |
+
}
|
72 |
+
|
73 |
+
div.sphinxsidebar form {
|
74 |
+
margin-top: 10px;
|
75 |
+
}
|
76 |
+
|
77 |
+
div.sphinxsidebar input {
|
78 |
+
border: 1px solid #98dbcc;
|
79 |
+
font-family: sans-serif;
|
80 |
+
font-size: 1em;
|
81 |
+
}
|
82 |
+
|
83 |
+
div.sphinxsidebar #searchbox form.search {
|
84 |
+
overflow: hidden;
|
85 |
+
}
|
86 |
+
|
87 |
+
div.sphinxsidebar #searchbox input[type="text"] {
|
88 |
+
float: left;
|
89 |
+
width: 80%;
|
90 |
+
padding: 0.25em;
|
91 |
+
box-sizing: border-box;
|
92 |
+
}
|
93 |
+
|
94 |
+
div.sphinxsidebar #searchbox input[type="submit"] {
|
95 |
+
float: left;
|
96 |
+
width: 20%;
|
97 |
+
border-left: none;
|
98 |
+
padding: 0.25em;
|
99 |
+
box-sizing: border-box;
|
100 |
+
}
|
101 |
+
|
102 |
+
|
103 |
+
img {
|
104 |
+
border: 0;
|
105 |
+
max-width: 100%;
|
106 |
+
}
|
107 |
+
|
108 |
+
/* -- search page ----------------------------------------------------------- */
|
109 |
+
|
110 |
+
ul.search {
|
111 |
+
margin-top: 10px;
|
112 |
+
}
|
113 |
+
|
114 |
+
ul.search li {
|
115 |
+
padding: 5px 0;
|
116 |
+
}
|
117 |
+
|
118 |
+
ul.search li a {
|
119 |
+
font-weight: bold;
|
120 |
+
}
|
121 |
+
|
122 |
+
ul.search li p.context {
|
123 |
+
color: #888;
|
124 |
+
margin: 2px 0 0 30px;
|
125 |
+
text-align: left;
|
126 |
+
}
|
127 |
+
|
128 |
+
ul.keywordmatches li.goodmatch a {
|
129 |
+
font-weight: bold;
|
130 |
+
}
|
131 |
+
|
132 |
+
/* -- index page ------------------------------------------------------------ */
|
133 |
+
|
134 |
+
table.contentstable {
|
135 |
+
width: 90%;
|
136 |
+
margin-left: auto;
|
137 |
+
margin-right: auto;
|
138 |
+
}
|
139 |
+
|
140 |
+
table.contentstable p.biglink {
|
141 |
+
line-height: 150%;
|
142 |
+
}
|
143 |
+
|
144 |
+
a.biglink {
|
145 |
+
font-size: 1.3em;
|
146 |
+
}
|
147 |
+
|
148 |
+
span.linkdescr {
|
149 |
+
font-style: italic;
|
150 |
+
padding-top: 5px;
|
151 |
+
font-size: 90%;
|
152 |
+
}
|
153 |
+
|
154 |
+
/* -- general index --------------------------------------------------------- */
|
155 |
+
|
156 |
+
table.indextable {
|
157 |
+
width: 100%;
|
158 |
+
}
|
159 |
+
|
160 |
+
table.indextable td {
|
161 |
+
text-align: left;
|
162 |
+
vertical-align: top;
|
163 |
+
}
|
164 |
+
|
165 |
+
table.indextable ul {
|
166 |
+
margin-top: 0;
|
167 |
+
margin-bottom: 0;
|
168 |
+
list-style-type: none;
|
169 |
+
}
|
170 |
+
|
171 |
+
table.indextable > tbody > tr > td > ul {
|
172 |
+
padding-left: 0em;
|
173 |
+
}
|
174 |
+
|
175 |
+
table.indextable tr.pcap {
|
176 |
+
height: 10px;
|
177 |
+
}
|
178 |
+
|
179 |
+
table.indextable tr.cap {
|
180 |
+
margin-top: 10px;
|
181 |
+
background-color: #f2f2f2;
|
182 |
+
}
|
183 |
+
|
184 |
+
img.toggler {
|
185 |
+
margin-right: 3px;
|
186 |
+
margin-top: 3px;
|
187 |
+
cursor: pointer;
|
188 |
+
}
|
189 |
+
|
190 |
+
div.modindex-jumpbox {
|
191 |
+
border-top: 1px solid #ddd;
|
192 |
+
border-bottom: 1px solid #ddd;
|
193 |
+
margin: 1em 0 1em 0;
|
194 |
+
padding: 0.4em;
|
195 |
+
}
|
196 |
+
|
197 |
+
div.genindex-jumpbox {
|
198 |
+
border-top: 1px solid #ddd;
|
199 |
+
border-bottom: 1px solid #ddd;
|
200 |
+
margin: 1em 0 1em 0;
|
201 |
+
padding: 0.4em;
|
202 |
+
}
|
203 |
+
|
204 |
+
/* -- domain module index --------------------------------------------------- */
|
205 |
+
|
206 |
+
table.modindextable td {
|
207 |
+
padding: 2px;
|
208 |
+
border-collapse: collapse;
|
209 |
+
}
|
210 |
+
|
211 |
+
/* -- general body styles --------------------------------------------------- */
|
212 |
+
|
213 |
+
div.body {
|
214 |
+
min-width: inherit;
|
215 |
+
max-width: auto;
|
216 |
+
}
|
217 |
+
|
218 |
+
div.body p, div.body dd, div.body li, div.body blockquote {
|
219 |
+
-moz-hyphens: auto;
|
220 |
+
-ms-hyphens: auto;
|
221 |
+
-webkit-hyphens: auto;
|
222 |
+
hyphens: auto;
|
223 |
+
}
|
224 |
+
|
225 |
+
a.headerlink {
|
226 |
+
visibility: hidden;
|
227 |
+
}
|
228 |
+
|
229 |
+
a:visited {
|
230 |
+
color: #551A8B;
|
231 |
+
}
|
232 |
+
|
233 |
+
h1:hover > a.headerlink,
|
234 |
+
h2:hover > a.headerlink,
|
235 |
+
h3:hover > a.headerlink,
|
236 |
+
h4:hover > a.headerlink,
|
237 |
+
h5:hover > a.headerlink,
|
238 |
+
h6:hover > a.headerlink,
|
239 |
+
dt:hover > a.headerlink,
|
240 |
+
caption:hover > a.headerlink,
|
241 |
+
p.caption:hover > a.headerlink,
|
242 |
+
div.code-block-caption:hover > a.headerlink {
|
243 |
+
visibility: visible;
|
244 |
+
}
|
245 |
+
|
246 |
+
div.body p.caption {
|
247 |
+
text-align: inherit;
|
248 |
+
}
|
249 |
+
|
250 |
+
div.body td {
|
251 |
+
text-align: left;
|
252 |
+
}
|
253 |
+
|
254 |
+
.first {
|
255 |
+
margin-top: 0 !important;
|
256 |
+
}
|
257 |
+
|
258 |
+
p.rubric {
|
259 |
+
margin-top: 30px;
|
260 |
+
font-weight: bold;
|
261 |
+
}
|
262 |
+
|
263 |
+
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
264 |
+
clear: left;
|
265 |
+
float: left;
|
266 |
+
margin-right: 1em;
|
267 |
+
}
|
268 |
+
|
269 |
+
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
270 |
+
clear: right;
|
271 |
+
float: right;
|
272 |
+
margin-left: 1em;
|
273 |
+
}
|
274 |
+
|
275 |
+
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
276 |
+
display: block;
|
277 |
+
margin-left: auto;
|
278 |
+
margin-right: auto;
|
279 |
+
}
|
280 |
+
|
281 |
+
img.align-default, figure.align-default, .figure.align-default {
|
282 |
+
display: block;
|
283 |
+
margin-left: auto;
|
284 |
+
margin-right: auto;
|
285 |
+
}
|
286 |
+
|
287 |
+
.align-left {
|
288 |
+
text-align: left;
|
289 |
+
}
|
290 |
+
|
291 |
+
.align-center {
|
292 |
+
text-align: center;
|
293 |
+
}
|
294 |
+
|
295 |
+
.align-default {
|
296 |
+
text-align: center;
|
297 |
+
}
|
298 |
+
|
299 |
+
.align-right {
|
300 |
+
text-align: right;
|
301 |
+
}
|
302 |
+
|
303 |
+
/* -- sidebars -------------------------------------------------------------- */
|
304 |
+
|
305 |
+
div.sidebar,
|
306 |
+
aside.sidebar {
|
307 |
+
margin: 0 0 0.5em 1em;
|
308 |
+
border: 1px solid #ddb;
|
309 |
+
padding: 7px;
|
310 |
+
background-color: #ffe;
|
311 |
+
width: 40%;
|
312 |
+
float: right;
|
313 |
+
clear: right;
|
314 |
+
overflow-x: auto;
|
315 |
+
}
|
316 |
+
|
317 |
+
p.sidebar-title {
|
318 |
+
font-weight: bold;
|
319 |
+
}
|
320 |
+
|
321 |
+
nav.contents,
|
322 |
+
aside.topic,
|
323 |
+
div.admonition, div.topic, blockquote {
|
324 |
+
clear: left;
|
325 |
+
}
|
326 |
+
|
327 |
+
/* -- topics ---------------------------------------------------------------- */
|
328 |
+
|
329 |
+
nav.contents,
|
330 |
+
aside.topic,
|
331 |
+
div.topic {
|
332 |
+
border: 1px solid #ccc;
|
333 |
+
padding: 7px;
|
334 |
+
margin: 10px 0 10px 0;
|
335 |
+
}
|
336 |
+
|
337 |
+
p.topic-title {
|
338 |
+
font-size: 1.1em;
|
339 |
+
font-weight: bold;
|
340 |
+
margin-top: 10px;
|
341 |
+
}
|
342 |
+
|
343 |
+
/* -- admonitions ----------------------------------------------------------- */
|
344 |
+
|
345 |
+
div.admonition {
|
346 |
+
margin-top: 10px;
|
347 |
+
margin-bottom: 10px;
|
348 |
+
padding: 7px;
|
349 |
+
}
|
350 |
+
|
351 |
+
div.admonition dt {
|
352 |
+
font-weight: bold;
|
353 |
+
}
|
354 |
+
|
355 |
+
p.admonition-title {
|
356 |
+
margin: 0px 10px 5px 0px;
|
357 |
+
font-weight: bold;
|
358 |
+
}
|
359 |
+
|
360 |
+
div.body p.centered {
|
361 |
+
text-align: center;
|
362 |
+
margin-top: 25px;
|
363 |
+
}
|
364 |
+
|
365 |
+
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
366 |
+
|
367 |
+
div.sidebar > :last-child,
|
368 |
+
aside.sidebar > :last-child,
|
369 |
+
nav.contents > :last-child,
|
370 |
+
aside.topic > :last-child,
|
371 |
+
div.topic > :last-child,
|
372 |
+
div.admonition > :last-child {
|
373 |
+
margin-bottom: 0;
|
374 |
+
}
|
375 |
+
|
376 |
+
div.sidebar::after,
|
377 |
+
aside.sidebar::after,
|
378 |
+
nav.contents::after,
|
379 |
+
aside.topic::after,
|
380 |
+
div.topic::after,
|
381 |
+
div.admonition::after,
|
382 |
+
blockquote::after {
|
383 |
+
display: block;
|
384 |
+
content: '';
|
385 |
+
clear: both;
|
386 |
+
}
|
387 |
+
|
388 |
+
/* -- tables ---------------------------------------------------------------- */
|
389 |
+
|
390 |
+
table.docutils {
|
391 |
+
margin-top: 10px;
|
392 |
+
margin-bottom: 10px;
|
393 |
+
border: 0;
|
394 |
+
border-collapse: collapse;
|
395 |
+
}
|
396 |
+
|
397 |
+
table.align-center {
|
398 |
+
margin-left: auto;
|
399 |
+
margin-right: auto;
|
400 |
+
}
|
401 |
+
|
402 |
+
table.align-default {
|
403 |
+
margin-left: auto;
|
404 |
+
margin-right: auto;
|
405 |
+
}
|
406 |
+
|
407 |
+
table caption span.caption-number {
|
408 |
+
font-style: italic;
|
409 |
+
}
|
410 |
+
|
411 |
+
table caption span.caption-text {
|
412 |
+
}
|
413 |
+
|
414 |
+
table.docutils td, table.docutils th {
|
415 |
+
padding: 1px 8px 1px 5px;
|
416 |
+
border-top: 0;
|
417 |
+
border-left: 0;
|
418 |
+
border-right: 0;
|
419 |
+
border-bottom: 1px solid #aaa;
|
420 |
+
}
|
421 |
+
|
422 |
+
th {
|
423 |
+
text-align: left;
|
424 |
+
padding-right: 5px;
|
425 |
+
}
|
426 |
+
|
427 |
+
table.citation {
|
428 |
+
border-left: solid 1px gray;
|
429 |
+
margin-left: 1px;
|
430 |
+
}
|
431 |
+
|
432 |
+
table.citation td {
|
433 |
+
border-bottom: none;
|
434 |
+
}
|
435 |
+
|
436 |
+
th > :first-child,
|
437 |
+
td > :first-child {
|
438 |
+
margin-top: 0px;
|
439 |
+
}
|
440 |
+
|
441 |
+
th > :last-child,
|
442 |
+
td > :last-child {
|
443 |
+
margin-bottom: 0px;
|
444 |
+
}
|
445 |
+
|
446 |
+
/* -- figures --------------------------------------------------------------- */
|
447 |
+
|
448 |
+
div.figure, figure {
|
449 |
+
margin: 0.5em;
|
450 |
+
padding: 0.5em;
|
451 |
+
}
|
452 |
+
|
453 |
+
div.figure p.caption, figcaption {
|
454 |
+
padding: 0.3em;
|
455 |
+
}
|
456 |
+
|
457 |
+
div.figure p.caption span.caption-number,
|
458 |
+
figcaption span.caption-number {
|
459 |
+
font-style: italic;
|
460 |
+
}
|
461 |
+
|
462 |
+
div.figure p.caption span.caption-text,
|
463 |
+
figcaption span.caption-text {
|
464 |
+
}
|
465 |
+
|
466 |
+
/* -- field list styles ----------------------------------------------------- */
|
467 |
+
|
468 |
+
table.field-list td, table.field-list th {
|
469 |
+
border: 0 !important;
|
470 |
+
}
|
471 |
+
|
472 |
+
.field-list ul {
|
473 |
+
margin: 0;
|
474 |
+
padding-left: 1em;
|
475 |
+
}
|
476 |
+
|
477 |
+
.field-list p {
|
478 |
+
margin: 0;
|
479 |
+
}
|
480 |
+
|
481 |
+
.field-name {
|
482 |
+
-moz-hyphens: manual;
|
483 |
+
-ms-hyphens: manual;
|
484 |
+
-webkit-hyphens: manual;
|
485 |
+
hyphens: manual;
|
486 |
+
}
|
487 |
+
|
488 |
+
/* -- hlist styles ---------------------------------------------------------- */
|
489 |
+
|
490 |
+
table.hlist {
|
491 |
+
margin: 1em 0;
|
492 |
+
}
|
493 |
+
|
494 |
+
table.hlist td {
|
495 |
+
vertical-align: top;
|
496 |
+
}
|
497 |
+
|
498 |
+
/* -- object description styles --------------------------------------------- */
|
499 |
+
|
500 |
+
.sig {
|
501 |
+
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
502 |
+
}
|
503 |
+
|
504 |
+
.sig-name, code.descname {
|
505 |
+
background-color: transparent;
|
506 |
+
font-weight: bold;
|
507 |
+
}
|
508 |
+
|
509 |
+
.sig-name {
|
510 |
+
font-size: 1.1em;
|
511 |
+
}
|
512 |
+
|
513 |
+
code.descname {
|
514 |
+
font-size: 1.2em;
|
515 |
+
}
|
516 |
+
|
517 |
+
.sig-prename, code.descclassname {
|
518 |
+
background-color: transparent;
|
519 |
+
}
|
520 |
+
|
521 |
+
.optional {
|
522 |
+
font-size: 1.3em;
|
523 |
+
}
|
524 |
+
|
525 |
+
.sig-paren {
|
526 |
+
font-size: larger;
|
527 |
+
}
|
528 |
+
|
529 |
+
.sig-param.n {
|
530 |
+
font-style: italic;
|
531 |
+
}
|
532 |
+
|
533 |
+
/* C++ specific styling */
|
534 |
+
|
535 |
+
.sig-inline.c-texpr,
|
536 |
+
.sig-inline.cpp-texpr {
|
537 |
+
font-family: unset;
|
538 |
+
}
|
539 |
+
|
540 |
+
.sig.c .k, .sig.c .kt,
|
541 |
+
.sig.cpp .k, .sig.cpp .kt {
|
542 |
+
color: #0033B3;
|
543 |
+
}
|
544 |
+
|
545 |
+
.sig.c .m,
|
546 |
+
.sig.cpp .m {
|
547 |
+
color: #1750EB;
|
548 |
+
}
|
549 |
+
|
550 |
+
.sig.c .s, .sig.c .sc,
|
551 |
+
.sig.cpp .s, .sig.cpp .sc {
|
552 |
+
color: #067D17;
|
553 |
+
}
|
554 |
+
|
555 |
+
|
556 |
+
/* -- other body styles ----------------------------------------------------- */
|
557 |
+
|
558 |
+
ol.arabic {
|
559 |
+
list-style: decimal;
|
560 |
+
}
|
561 |
+
|
562 |
+
ol.loweralpha {
|
563 |
+
list-style: lower-alpha;
|
564 |
+
}
|
565 |
+
|
566 |
+
ol.upperalpha {
|
567 |
+
list-style: upper-alpha;
|
568 |
+
}
|
569 |
+
|
570 |
+
ol.lowerroman {
|
571 |
+
list-style: lower-roman;
|
572 |
+
}
|
573 |
+
|
574 |
+
ol.upperroman {
|
575 |
+
list-style: upper-roman;
|
576 |
+
}
|
577 |
+
|
578 |
+
:not(li) > ol > li:first-child > :first-child,
|
579 |
+
:not(li) > ul > li:first-child > :first-child {
|
580 |
+
margin-top: 0px;
|
581 |
+
}
|
582 |
+
|
583 |
+
:not(li) > ol > li:last-child > :last-child,
|
584 |
+
:not(li) > ul > li:last-child > :last-child {
|
585 |
+
margin-bottom: 0px;
|
586 |
+
}
|
587 |
+
|
588 |
+
ol.simple ol p,
|
589 |
+
ol.simple ul p,
|
590 |
+
ul.simple ol p,
|
591 |
+
ul.simple ul p {
|
592 |
+
margin-top: 0;
|
593 |
+
}
|
594 |
+
|
595 |
+
ol.simple > li:not(:first-child) > p,
|
596 |
+
ul.simple > li:not(:first-child) > p {
|
597 |
+
margin-top: 0;
|
598 |
+
}
|
599 |
+
|
600 |
+
ol.simple p,
|
601 |
+
ul.simple p {
|
602 |
+
margin-bottom: 0;
|
603 |
+
}
|
604 |
+
|
605 |
+
aside.footnote > span,
|
606 |
+
div.citation > span {
|
607 |
+
float: left;
|
608 |
+
}
|
609 |
+
aside.footnote > span:last-of-type,
|
610 |
+
div.citation > span:last-of-type {
|
611 |
+
padding-right: 0.5em;
|
612 |
+
}
|
613 |
+
aside.footnote > p {
|
614 |
+
margin-left: 2em;
|
615 |
+
}
|
616 |
+
div.citation > p {
|
617 |
+
margin-left: 4em;
|
618 |
+
}
|
619 |
+
aside.footnote > p:last-of-type,
|
620 |
+
div.citation > p:last-of-type {
|
621 |
+
margin-bottom: 0em;
|
622 |
+
}
|
623 |
+
aside.footnote > p:last-of-type:after,
|
624 |
+
div.citation > p:last-of-type:after {
|
625 |
+
content: "";
|
626 |
+
clear: both;
|
627 |
+
}
|
628 |
+
|
629 |
+
dl.field-list {
|
630 |
+
display: grid;
|
631 |
+
grid-template-columns: fit-content(30%) auto;
|
632 |
+
}
|
633 |
+
|
634 |
+
dl.field-list > dt {
|
635 |
+
font-weight: bold;
|
636 |
+
word-break: break-word;
|
637 |
+
padding-left: 0.5em;
|
638 |
+
padding-right: 5px;
|
639 |
+
}
|
640 |
+
|
641 |
+
dl.field-list > dd {
|
642 |
+
padding-left: 0.5em;
|
643 |
+
margin-top: 0em;
|
644 |
+
margin-left: 0em;
|
645 |
+
margin-bottom: 0em;
|
646 |
+
}
|
647 |
+
|
648 |
+
dl {
|
649 |
+
margin-bottom: 15px;
|
650 |
+
}
|
651 |
+
|
652 |
+
dd > :first-child {
|
653 |
+
margin-top: 0px;
|
654 |
+
}
|
655 |
+
|
656 |
+
dd ul, dd table {
|
657 |
+
margin-bottom: 10px;
|
658 |
+
}
|
659 |
+
|
660 |
+
dd {
|
661 |
+
margin-top: 3px;
|
662 |
+
margin-bottom: 10px;
|
663 |
+
margin-left: 30px;
|
664 |
+
}
|
665 |
+
|
666 |
+
.sig dd {
|
667 |
+
margin-top: 0px;
|
668 |
+
margin-bottom: 0px;
|
669 |
+
}
|
670 |
+
|
671 |
+
.sig dl {
|
672 |
+
margin-top: 0px;
|
673 |
+
margin-bottom: 0px;
|
674 |
+
}
|
675 |
+
|
676 |
+
dl > dd:last-child,
|
677 |
+
dl > dd:last-child > :last-child {
|
678 |
+
margin-bottom: 0;
|
679 |
+
}
|
680 |
+
|
681 |
+
dt:target, span.highlighted {
|
682 |
+
background-color: #fbe54e;
|
683 |
+
}
|
684 |
+
|
685 |
+
rect.highlighted {
|
686 |
+
fill: #fbe54e;
|
687 |
+
}
|
688 |
+
|
689 |
+
dl.glossary dt {
|
690 |
+
font-weight: bold;
|
691 |
+
font-size: 1.1em;
|
692 |
+
}
|
693 |
+
|
694 |
+
.versionmodified {
|
695 |
+
font-style: italic;
|
696 |
+
}
|
697 |
+
|
698 |
+
.system-message {
|
699 |
+
background-color: #fda;
|
700 |
+
padding: 5px;
|
701 |
+
border: 3px solid red;
|
702 |
+
}
|
703 |
+
|
704 |
+
.footnote:target {
|
705 |
+
background-color: #ffa;
|
706 |
+
}
|
707 |
+
|
708 |
+
.line-block {
|
709 |
+
display: block;
|
710 |
+
margin-top: 1em;
|
711 |
+
margin-bottom: 1em;
|
712 |
+
}
|
713 |
+
|
714 |
+
.line-block .line-block {
|
715 |
+
margin-top: 0;
|
716 |
+
margin-bottom: 0;
|
717 |
+
margin-left: 1.5em;
|
718 |
+
}
|
719 |
+
|
720 |
+
.guilabel, .menuselection {
|
721 |
+
font-family: sans-serif;
|
722 |
+
}
|
723 |
+
|
724 |
+
.accelerator {
|
725 |
+
text-decoration: underline;
|
726 |
+
}
|
727 |
+
|
728 |
+
.classifier {
|
729 |
+
font-style: oblique;
|
730 |
+
}
|
731 |
+
|
732 |
+
.classifier:before {
|
733 |
+
font-style: normal;
|
734 |
+
margin: 0 0.5em;
|
735 |
+
content: ":";
|
736 |
+
display: inline-block;
|
737 |
+
}
|
738 |
+
|
739 |
+
abbr, acronym {
|
740 |
+
border-bottom: dotted 1px;
|
741 |
+
cursor: help;
|
742 |
+
}
|
743 |
+
|
744 |
+
.translated {
|
745 |
+
background-color: rgba(207, 255, 207, 0.2)
|
746 |
+
}
|
747 |
+
|
748 |
+
.untranslated {
|
749 |
+
background-color: rgba(255, 207, 207, 0.2)
|
750 |
+
}
|
751 |
+
|
752 |
+
/* -- code displays --------------------------------------------------------- */
|
753 |
+
|
754 |
+
pre {
|
755 |
+
overflow: auto;
|
756 |
+
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
757 |
+
}
|
758 |
+
|
759 |
+
pre, div[class*="highlight-"] {
|
760 |
+
clear: both;
|
761 |
+
}
|
762 |
+
|
763 |
+
span.pre {
|
764 |
+
-moz-hyphens: none;
|
765 |
+
-ms-hyphens: none;
|
766 |
+
-webkit-hyphens: none;
|
767 |
+
hyphens: none;
|
768 |
+
white-space: nowrap;
|
769 |
+
}
|
770 |
+
|
771 |
+
div[class*="highlight-"] {
|
772 |
+
margin: 1em 0;
|
773 |
+
}
|
774 |
+
|
775 |
+
td.linenos pre {
|
776 |
+
border: 0;
|
777 |
+
background-color: transparent;
|
778 |
+
color: #aaa;
|
779 |
+
}
|
780 |
+
|
781 |
+
table.highlighttable {
|
782 |
+
display: block;
|
783 |
+
}
|
784 |
+
|
785 |
+
table.highlighttable tbody {
|
786 |
+
display: block;
|
787 |
+
}
|
788 |
+
|
789 |
+
table.highlighttable tr {
|
790 |
+
display: flex;
|
791 |
+
}
|
792 |
+
|
793 |
+
table.highlighttable td {
|
794 |
+
margin: 0;
|
795 |
+
padding: 0;
|
796 |
+
}
|
797 |
+
|
798 |
+
table.highlighttable td.linenos {
|
799 |
+
padding-right: 0.5em;
|
800 |
+
}
|
801 |
+
|
802 |
+
table.highlighttable td.code {
|
803 |
+
flex: 1;
|
804 |
+
overflow: hidden;
|
805 |
+
}
|
806 |
+
|
807 |
+
.highlight .hll {
|
808 |
+
display: block;
|
809 |
+
}
|
810 |
+
|
811 |
+
div.highlight pre,
|
812 |
+
table.highlighttable pre {
|
813 |
+
margin: 0;
|
814 |
+
}
|
815 |
+
|
816 |
+
div.code-block-caption + div {
|
817 |
+
margin-top: 0;
|
818 |
+
}
|
819 |
+
|
820 |
+
div.code-block-caption {
|
821 |
+
margin-top: 1em;
|
822 |
+
padding: 2px 5px;
|
823 |
+
font-size: small;
|
824 |
+
}
|
825 |
+
|
826 |
+
div.code-block-caption code {
|
827 |
+
background-color: transparent;
|
828 |
+
}
|
829 |
+
|
830 |
+
table.highlighttable td.linenos,
|
831 |
+
span.linenos,
|
832 |
+
div.highlight span.gp { /* gp: Generic.Prompt */
|
833 |
+
user-select: none;
|
834 |
+
-webkit-user-select: text; /* Safari fallback only */
|
835 |
+
-webkit-user-select: none; /* Chrome/Safari */
|
836 |
+
-moz-user-select: none; /* Firefox */
|
837 |
+
-ms-user-select: none; /* IE10+ */
|
838 |
+
}
|
839 |
+
|
840 |
+
div.code-block-caption span.caption-number {
|
841 |
+
padding: 0.1em 0.3em;
|
842 |
+
font-style: italic;
|
843 |
+
}
|
844 |
+
|
845 |
+
div.code-block-caption span.caption-text {
|
846 |
+
}
|
847 |
+
|
848 |
+
div.literal-block-wrapper {
|
849 |
+
margin: 1em 0;
|
850 |
+
}
|
851 |
+
|
852 |
+
code.xref, a code {
|
853 |
+
background-color: transparent;
|
854 |
+
font-weight: bold;
|
855 |
+
}
|
856 |
+
|
857 |
+
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
858 |
+
background-color: transparent;
|
859 |
+
}
|
860 |
+
|
861 |
+
.viewcode-link {
|
862 |
+
float: right;
|
863 |
+
}
|
864 |
+
|
865 |
+
.viewcode-back {
|
866 |
+
float: right;
|
867 |
+
font-family: sans-serif;
|
868 |
+
}
|
869 |
+
|
870 |
+
div.viewcode-block:target {
|
871 |
+
margin: -1px -10px;
|
872 |
+
padding: 0 10px;
|
873 |
+
}
|
874 |
+
|
875 |
+
/* -- math display ---------------------------------------------------------- */
|
876 |
+
|
877 |
+
img.math {
|
878 |
+
vertical-align: middle;
|
879 |
+
}
|
880 |
+
|
881 |
+
div.body div.math p {
|
882 |
+
text-align: center;
|
883 |
+
}
|
884 |
+
|
885 |
+
span.eqno {
|
886 |
+
float: right;
|
887 |
+
}
|
888 |
+
|
889 |
+
span.eqno a.headerlink {
|
890 |
+
position: absolute;
|
891 |
+
z-index: 1;
|
892 |
+
}
|
893 |
+
|
894 |
+
div.math:hover a.headerlink {
|
895 |
+
visibility: visible;
|
896 |
+
}
|
897 |
+
|
898 |
+
/* -- printout stylesheet --------------------------------------------------- */
|
899 |
+
|
900 |
+
@media print {
|
901 |
+
div.document,
|
902 |
+
div.documentwrapper,
|
903 |
+
div.bodywrapper {
|
904 |
+
margin: 0 !important;
|
905 |
+
width: 100%;
|
906 |
+
}
|
907 |
+
|
908 |
+
div.sphinxsidebar,
|
909 |
+
div.related,
|
910 |
+
div.footer,
|
911 |
+
#top-link {
|
912 |
+
display: none;
|
913 |
+
}
|
914 |
+
}
|
docs/build/html/_static/custom.css
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
/* This file intentionally left blank. */
|
docs/build/html/_static/doctools.js
ADDED
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Base JavaScript utilities for all Sphinx HTML documentation.
|
3 |
+
*/
|
4 |
+
"use strict";
|
5 |
+
|
6 |
+
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
7 |
+
"TEXTAREA",
|
8 |
+
"INPUT",
|
9 |
+
"SELECT",
|
10 |
+
"BUTTON",
|
11 |
+
]);
|
12 |
+
|
13 |
+
const _ready = (callback) => {
|
14 |
+
if (document.readyState !== "loading") {
|
15 |
+
callback();
|
16 |
+
} else {
|
17 |
+
document.addEventListener("DOMContentLoaded", callback);
|
18 |
+
}
|
19 |
+
};
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Small JavaScript module for the documentation.
|
23 |
+
*/
|
24 |
+
const Documentation = {
|
25 |
+
init: () => {
|
26 |
+
Documentation.initDomainIndexTable();
|
27 |
+
Documentation.initOnKeyListeners();
|
28 |
+
},
|
29 |
+
|
30 |
+
/**
|
31 |
+
* i18n support
|
32 |
+
*/
|
33 |
+
TRANSLATIONS: {},
|
34 |
+
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
35 |
+
LOCALE: "unknown",
|
36 |
+
|
37 |
+
// gettext and ngettext don't access this so that the functions
|
38 |
+
// can safely bound to a different name (_ = Documentation.gettext)
|
39 |
+
gettext: (string) => {
|
40 |
+
const translated = Documentation.TRANSLATIONS[string];
|
41 |
+
switch (typeof translated) {
|
42 |
+
case "undefined":
|
43 |
+
return string; // no translation
|
44 |
+
case "string":
|
45 |
+
return translated; // translation exists
|
46 |
+
default:
|
47 |
+
return translated[0]; // (singular, plural) translation tuple exists
|
48 |
+
}
|
49 |
+
},
|
50 |
+
|
51 |
+
ngettext: (singular, plural, n) => {
|
52 |
+
const translated = Documentation.TRANSLATIONS[singular];
|
53 |
+
if (typeof translated !== "undefined")
|
54 |
+
return translated[Documentation.PLURAL_EXPR(n)];
|
55 |
+
return n === 1 ? singular : plural;
|
56 |
+
},
|
57 |
+
|
58 |
+
addTranslations: (catalog) => {
|
59 |
+
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
60 |
+
Documentation.PLURAL_EXPR = new Function(
|
61 |
+
"n",
|
62 |
+
`return (${catalog.plural_expr})`
|
63 |
+
);
|
64 |
+
Documentation.LOCALE = catalog.locale;
|
65 |
+
},
|
66 |
+
|
67 |
+
/**
|
68 |
+
* helper function to focus on search bar
|
69 |
+
*/
|
70 |
+
focusSearchBar: () => {
|
71 |
+
document.querySelectorAll("input[name=q]")[0]?.focus();
|
72 |
+
},
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Initialise the domain index toggle buttons
|
76 |
+
*/
|
77 |
+
initDomainIndexTable: () => {
|
78 |
+
const toggler = (el) => {
|
79 |
+
const idNumber = el.id.substr(7);
|
80 |
+
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
81 |
+
if (el.src.substr(-9) === "minus.png") {
|
82 |
+
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
83 |
+
toggledRows.forEach((el) => (el.style.display = "none"));
|
84 |
+
} else {
|
85 |
+
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
86 |
+
toggledRows.forEach((el) => (el.style.display = ""));
|
87 |
+
}
|
88 |
+
};
|
89 |
+
|
90 |
+
const togglerElements = document.querySelectorAll("img.toggler");
|
91 |
+
togglerElements.forEach((el) =>
|
92 |
+
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
93 |
+
);
|
94 |
+
togglerElements.forEach((el) => (el.style.display = ""));
|
95 |
+
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
96 |
+
},
|
97 |
+
|
98 |
+
initOnKeyListeners: () => {
|
99 |
+
// only install a listener if it is really needed
|
100 |
+
if (
|
101 |
+
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
102 |
+
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
103 |
+
)
|
104 |
+
return;
|
105 |
+
|
106 |
+
document.addEventListener("keydown", (event) => {
|
107 |
+
// bail for input elements
|
108 |
+
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
109 |
+
// bail with special keys
|
110 |
+
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
111 |
+
|
112 |
+
if (!event.shiftKey) {
|
113 |
+
switch (event.key) {
|
114 |
+
case "ArrowLeft":
|
115 |
+
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
116 |
+
|
117 |
+
const prevLink = document.querySelector('link[rel="prev"]');
|
118 |
+
if (prevLink && prevLink.href) {
|
119 |
+
window.location.href = prevLink.href;
|
120 |
+
event.preventDefault();
|
121 |
+
}
|
122 |
+
break;
|
123 |
+
case "ArrowRight":
|
124 |
+
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
125 |
+
|
126 |
+
const nextLink = document.querySelector('link[rel="next"]');
|
127 |
+
if (nextLink && nextLink.href) {
|
128 |
+
window.location.href = nextLink.href;
|
129 |
+
event.preventDefault();
|
130 |
+
}
|
131 |
+
break;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
+
// some keyboard layouts may need Shift to get /
|
136 |
+
switch (event.key) {
|
137 |
+
case "/":
|
138 |
+
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
139 |
+
Documentation.focusSearchBar();
|
140 |
+
event.preventDefault();
|
141 |
+
}
|
142 |
+
});
|
143 |
+
},
|
144 |
+
};
|
145 |
+
|
146 |
+
// quick alias for translations
|
147 |
+
const _ = Documentation.gettext;
|
148 |
+
|
149 |
+
_ready(Documentation.init);
|
docs/build/html/_static/documentation_options.js
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const DOCUMENTATION_OPTIONS = {
|
2 |
+
VERSION: '1.0.0',
|
3 |
+
LANGUAGE: 'en',
|
4 |
+
COLLAPSE_INDEX: false,
|
5 |
+
BUILDER: 'html',
|
6 |
+
FILE_SUFFIX: '.html',
|
7 |
+
LINK_SUFFIX: '.html',
|
8 |
+
HAS_SOURCE: true,
|
9 |
+
SOURCELINK_SUFFIX: '.txt',
|
10 |
+
NAVIGATION_WITH_KEYS: false,
|
11 |
+
SHOW_SEARCH_SUMMARY: true,
|
12 |
+
ENABLE_SEARCH_SHORTCUTS: true,
|
13 |
+
};
|
docs/build/html/_static/file.png
ADDED
![]() |
docs/build/html/_static/github-banner.svg
ADDED
|
docs/build/html/_static/language_data.js
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* This script contains the language-specific data used by searchtools.js,
|
3 |
+
* namely the list of stopwords, stemmer, scorer and splitter.
|
4 |
+
*/
|
5 |
+
|
6 |
+
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"];
|
7 |
+
|
8 |
+
|
9 |
+
/* Non-minified version is copied as a separate JS file, if available */
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Porter Stemmer
|
13 |
+
*/
|
14 |
+
var Stemmer = function() {
|
15 |
+
|
16 |
+
var step2list = {
|
17 |
+
ational: 'ate',
|
18 |
+
tional: 'tion',
|
19 |
+
enci: 'ence',
|
20 |
+
anci: 'ance',
|
21 |
+
izer: 'ize',
|
22 |
+
bli: 'ble',
|
23 |
+
alli: 'al',
|
24 |
+
entli: 'ent',
|
25 |
+
eli: 'e',
|
26 |
+
ousli: 'ous',
|
27 |
+
ization: 'ize',
|
28 |
+
ation: 'ate',
|
29 |
+
ator: 'ate',
|
30 |
+
alism: 'al',
|
31 |
+
iveness: 'ive',
|
32 |
+
fulness: 'ful',
|
33 |
+
ousness: 'ous',
|
34 |
+
aliti: 'al',
|
35 |
+
iviti: 'ive',
|
36 |
+
biliti: 'ble',
|
37 |
+
logi: 'log'
|
38 |
+
};
|
39 |
+
|
40 |
+
var step3list = {
|
41 |
+
icate: 'ic',
|
42 |
+
ative: '',
|
43 |
+
alize: 'al',
|
44 |
+
iciti: 'ic',
|
45 |
+
ical: 'ic',
|
46 |
+
ful: '',
|
47 |
+
ness: ''
|
48 |
+
};
|
49 |
+
|
50 |
+
var c = "[^aeiou]"; // consonant
|
51 |
+
var v = "[aeiouy]"; // vowel
|
52 |
+
var C = c + "[^aeiouy]*"; // consonant sequence
|
53 |
+
var V = v + "[aeiou]*"; // vowel sequence
|
54 |
+
|
55 |
+
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
56 |
+
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
57 |
+
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
58 |
+
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
59 |
+
|
60 |
+
this.stemWord = function (w) {
|
61 |
+
var stem;
|
62 |
+
var suffix;
|
63 |
+
var firstch;
|
64 |
+
var origword = w;
|
65 |
+
|
66 |
+
if (w.length < 3)
|
67 |
+
return w;
|
68 |
+
|
69 |
+
var re;
|
70 |
+
var re2;
|
71 |
+
var re3;
|
72 |
+
var re4;
|
73 |
+
|
74 |
+
firstch = w.substr(0,1);
|
75 |
+
if (firstch == "y")
|
76 |
+
w = firstch.toUpperCase() + w.substr(1);
|
77 |
+
|
78 |
+
// Step 1a
|
79 |
+
re = /^(.+?)(ss|i)es$/;
|
80 |
+
re2 = /^(.+?)([^s])s$/;
|
81 |
+
|
82 |
+
if (re.test(w))
|
83 |
+
w = w.replace(re,"$1$2");
|
84 |
+
else if (re2.test(w))
|
85 |
+
w = w.replace(re2,"$1$2");
|
86 |
+
|
87 |
+
// Step 1b
|
88 |
+
re = /^(.+?)eed$/;
|
89 |
+
re2 = /^(.+?)(ed|ing)$/;
|
90 |
+
if (re.test(w)) {
|
91 |
+
var fp = re.exec(w);
|
92 |
+
re = new RegExp(mgr0);
|
93 |
+
if (re.test(fp[1])) {
|
94 |
+
re = /.$/;
|
95 |
+
w = w.replace(re,"");
|
96 |
+
}
|
97 |
+
}
|
98 |
+
else if (re2.test(w)) {
|
99 |
+
var fp = re2.exec(w);
|
100 |
+
stem = fp[1];
|
101 |
+
re2 = new RegExp(s_v);
|
102 |
+
if (re2.test(stem)) {
|
103 |
+
w = stem;
|
104 |
+
re2 = /(at|bl|iz)$/;
|
105 |
+
re3 = new RegExp("([^aeiouylsz])\\1$");
|
106 |
+
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
107 |
+
if (re2.test(w))
|
108 |
+
w = w + "e";
|
109 |
+
else if (re3.test(w)) {
|
110 |
+
re = /.$/;
|
111 |
+
w = w.replace(re,"");
|
112 |
+
}
|
113 |
+
else if (re4.test(w))
|
114 |
+
w = w + "e";
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
// Step 1c
|
119 |
+
re = /^(.+?)y$/;
|
120 |
+
if (re.test(w)) {
|
121 |
+
var fp = re.exec(w);
|
122 |
+
stem = fp[1];
|
123 |
+
re = new RegExp(s_v);
|
124 |
+
if (re.test(stem))
|
125 |
+
w = stem + "i";
|
126 |
+
}
|
127 |
+
|
128 |
+
// Step 2
|
129 |
+
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
130 |
+
if (re.test(w)) {
|
131 |
+
var fp = re.exec(w);
|
132 |
+
stem = fp[1];
|
133 |
+
suffix = fp[2];
|
134 |
+
re = new RegExp(mgr0);
|
135 |
+
if (re.test(stem))
|
136 |
+
w = stem + step2list[suffix];
|
137 |
+
}
|
138 |
+
|
139 |
+
// Step 3
|
140 |
+
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
141 |
+
if (re.test(w)) {
|
142 |
+
var fp = re.exec(w);
|
143 |
+
stem = fp[1];
|
144 |
+
suffix = fp[2];
|
145 |
+
re = new RegExp(mgr0);
|
146 |
+
if (re.test(stem))
|
147 |
+
w = stem + step3list[suffix];
|
148 |
+
}
|
149 |
+
|
150 |
+
// Step 4
|
151 |
+
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
152 |
+
re2 = /^(.+?)(s|t)(ion)$/;
|
153 |
+
if (re.test(w)) {
|
154 |
+
var fp = re.exec(w);
|
155 |
+
stem = fp[1];
|
156 |
+
re = new RegExp(mgr1);
|
157 |
+
if (re.test(stem))
|
158 |
+
w = stem;
|
159 |
+
}
|
160 |
+
else if (re2.test(w)) {
|
161 |
+
var fp = re2.exec(w);
|
162 |
+
stem = fp[1] + fp[2];
|
163 |
+
re2 = new RegExp(mgr1);
|
164 |
+
if (re2.test(stem))
|
165 |
+
w = stem;
|
166 |
+
}
|
167 |
+
|
168 |
+
// Step 5
|
169 |
+
re = /^(.+?)e$/;
|
170 |
+
if (re.test(w)) {
|
171 |
+
var fp = re.exec(w);
|
172 |
+
stem = fp[1];
|
173 |
+
re = new RegExp(mgr1);
|
174 |
+
re2 = new RegExp(meq1);
|
175 |
+
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
176 |
+
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
177 |
+
w = stem;
|
178 |
+
}
|
179 |
+
re = /ll$/;
|
180 |
+
re2 = new RegExp(mgr1);
|
181 |
+
if (re.test(w) && re2.test(w)) {
|
182 |
+
re = /.$/;
|
183 |
+
w = w.replace(re,"");
|
184 |
+
}
|
185 |
+
|
186 |
+
// and turn initial Y back to y
|
187 |
+
if (firstch == "y")
|
188 |
+
w = firstch.toLowerCase() + w.substr(1);
|
189 |
+
return w;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
docs/build/html/_static/minus.png
ADDED
![]() |
docs/build/html/_static/plus.png
ADDED
![]() |
docs/build/html/_static/pygments.css
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
pre { line-height: 125%; }
|
2 |
+
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
3 |
+
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
4 |
+
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
5 |
+
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
6 |
+
.highlight .hll { background-color: #ffffcc }
|
7 |
+
.highlight { background: #f8f8f8; }
|
8 |
+
.highlight .c { color: #8F5902; font-style: italic } /* Comment */
|
9 |
+
.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */
|
10 |
+
.highlight .g { color: #000 } /* Generic */
|
11 |
+
.highlight .k { color: #004461; font-weight: bold } /* Keyword */
|
12 |
+
.highlight .l { color: #000 } /* Literal */
|
13 |
+
.highlight .n { color: #000 } /* Name */
|
14 |
+
.highlight .o { color: #582800 } /* Operator */
|
15 |
+
.highlight .x { color: #000 } /* Other */
|
16 |
+
.highlight .p { color: #000; font-weight: bold } /* Punctuation */
|
17 |
+
.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */
|
18 |
+
.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */
|
19 |
+
.highlight .cp { color: #8F5902 } /* Comment.Preproc */
|
20 |
+
.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */
|
21 |
+
.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */
|
22 |
+
.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */
|
23 |
+
.highlight .gd { color: #A40000 } /* Generic.Deleted */
|
24 |
+
.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */
|
25 |
+
.highlight .ges { color: #000 } /* Generic.EmphStrong */
|
26 |
+
.highlight .gr { color: #EF2929 } /* Generic.Error */
|
27 |
+
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
28 |
+
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
29 |
+
.highlight .go { color: #888 } /* Generic.Output */
|
30 |
+
.highlight .gp { color: #745334 } /* Generic.Prompt */
|
31 |
+
.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */
|
32 |
+
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
33 |
+
.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */
|
34 |
+
.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
|
35 |
+
.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
|
36 |
+
.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
|
37 |
+
.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
|
38 |
+
.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
|
39 |
+
.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
|
40 |
+
.highlight .ld { color: #000 } /* Literal.Date */
|
41 |
+
.highlight .m { color: #900 } /* Literal.Number */
|
42 |
+
.highlight .s { color: #4E9A06 } /* Literal.String */
|
43 |
+
.highlight .na { color: #C4A000 } /* Name.Attribute */
|
44 |
+
.highlight .nb { color: #004461 } /* Name.Builtin */
|
45 |
+
.highlight .nc { color: #000 } /* Name.Class */
|
46 |
+
.highlight .no { color: #000 } /* Name.Constant */
|
47 |
+
.highlight .nd { color: #888 } /* Name.Decorator */
|
48 |
+
.highlight .ni { color: #CE5C00 } /* Name.Entity */
|
49 |
+
.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */
|
50 |
+
.highlight .nf { color: #000 } /* Name.Function */
|
51 |
+
.highlight .nl { color: #F57900 } /* Name.Label */
|
52 |
+
.highlight .nn { color: #000 } /* Name.Namespace */
|
53 |
+
.highlight .nx { color: #000 } /* Name.Other */
|
54 |
+
.highlight .py { color: #000 } /* Name.Property */
|
55 |
+
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
|
56 |
+
.highlight .nv { color: #000 } /* Name.Variable */
|
57 |
+
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
|
58 |
+
.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */
|
59 |
+
.highlight .w { color: #F8F8F8 } /* Text.Whitespace */
|
60 |
+
.highlight .mb { color: #900 } /* Literal.Number.Bin */
|
61 |
+
.highlight .mf { color: #900 } /* Literal.Number.Float */
|
62 |
+
.highlight .mh { color: #900 } /* Literal.Number.Hex */
|
63 |
+
.highlight .mi { color: #900 } /* Literal.Number.Integer */
|
64 |
+
.highlight .mo { color: #900 } /* Literal.Number.Oct */
|
65 |
+
.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */
|
66 |
+
.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */
|
67 |
+
.highlight .sc { color: #4E9A06 } /* Literal.String.Char */
|
68 |
+
.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */
|
69 |
+
.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */
|
70 |
+
.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */
|
71 |
+
.highlight .se { color: #4E9A06 } /* Literal.String.Escape */
|
72 |
+
.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */
|
73 |
+
.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */
|
74 |
+
.highlight .sx { color: #4E9A06 } /* Literal.String.Other */
|
75 |
+
.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */
|
76 |
+
.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */
|
77 |
+
.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */
|
78 |
+
.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */
|
79 |
+
.highlight .fm { color: #000 } /* Name.Function.Magic */
|
80 |
+
.highlight .vc { color: #000 } /* Name.Variable.Class */
|
81 |
+
.highlight .vg { color: #000 } /* Name.Variable.Global */
|
82 |
+
.highlight .vi { color: #000 } /* Name.Variable.Instance */
|
83 |
+
.highlight .vm { color: #000 } /* Name.Variable.Magic */
|
84 |
+
.highlight .il { color: #900 } /* Literal.Number.Integer.Long */
|
docs/build/html/_static/searchtools.js
ADDED
@@ -0,0 +1,632 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Sphinx JavaScript utilities for the full-text search.
|
3 |
+
*/
|
4 |
+
"use strict";
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Simple result scoring code.
|
8 |
+
*/
|
9 |
+
if (typeof Scorer === "undefined") {
|
10 |
+
var Scorer = {
|
11 |
+
// Implement the following function to further tweak the score for each result
|
12 |
+
// The function takes a result array [docname, title, anchor, descr, score, filename]
|
13 |
+
// and returns the new score.
|
14 |
+
/*
|
15 |
+
score: result => {
|
16 |
+
const [docname, title, anchor, descr, score, filename, kind] = result
|
17 |
+
return score
|
18 |
+
},
|
19 |
+
*/
|
20 |
+
|
21 |
+
// query matches the full name of an object
|
22 |
+
objNameMatch: 11,
|
23 |
+
// or matches in the last dotted part of the object name
|
24 |
+
objPartialMatch: 6,
|
25 |
+
// Additive scores depending on the priority of the object
|
26 |
+
objPrio: {
|
27 |
+
0: 15, // used to be importantResults
|
28 |
+
1: 5, // used to be objectResults
|
29 |
+
2: -5, // used to be unimportantResults
|
30 |
+
},
|
31 |
+
// Used when the priority is not in the mapping.
|
32 |
+
objPrioDefault: 0,
|
33 |
+
|
34 |
+
// query found in title
|
35 |
+
title: 15,
|
36 |
+
partialTitle: 7,
|
37 |
+
// query found in terms
|
38 |
+
term: 5,
|
39 |
+
partialTerm: 2,
|
40 |
+
};
|
41 |
+
}
|
42 |
+
|
43 |
+
// Global search result kind enum, used by themes to style search results.
|
44 |
+
class SearchResultKind {
|
45 |
+
static get index() { return "index"; }
|
46 |
+
static get object() { return "object"; }
|
47 |
+
static get text() { return "text"; }
|
48 |
+
static get title() { return "title"; }
|
49 |
+
}
|
50 |
+
|
51 |
+
const _removeChildren = (element) => {
|
52 |
+
while (element && element.lastChild) element.removeChild(element.lastChild);
|
53 |
+
};
|
54 |
+
|
55 |
+
/**
|
56 |
+
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
57 |
+
*/
|
58 |
+
const _escapeRegExp = (string) =>
|
59 |
+
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
60 |
+
|
61 |
+
const _displayItem = (item, searchTerms, highlightTerms) => {
|
62 |
+
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
|
63 |
+
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
64 |
+
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
65 |
+
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
|
66 |
+
const contentRoot = document.documentElement.dataset.content_root;
|
67 |
+
|
68 |
+
const [docName, title, anchor, descr, score, _filename, kind] = item;
|
69 |
+
|
70 |
+
let listItem = document.createElement("li");
|
71 |
+
// Add a class representing the item's type:
|
72 |
+
// can be used by a theme's CSS selector for styling
|
73 |
+
// See SearchResultKind for the class names.
|
74 |
+
listItem.classList.add(`kind-${kind}`);
|
75 |
+
let requestUrl;
|
76 |
+
let linkUrl;
|
77 |
+
if (docBuilder === "dirhtml") {
|
78 |
+
// dirhtml builder
|
79 |
+
let dirname = docName + "/";
|
80 |
+
if (dirname.match(/\/index\/$/))
|
81 |
+
dirname = dirname.substring(0, dirname.length - 6);
|
82 |
+
else if (dirname === "index/") dirname = "";
|
83 |
+
requestUrl = contentRoot + dirname;
|
84 |
+
linkUrl = requestUrl;
|
85 |
+
} else {
|
86 |
+
// normal html builders
|
87 |
+
requestUrl = contentRoot + docName + docFileSuffix;
|
88 |
+
linkUrl = docName + docLinkSuffix;
|
89 |
+
}
|
90 |
+
let linkEl = listItem.appendChild(document.createElement("a"));
|
91 |
+
linkEl.href = linkUrl + anchor;
|
92 |
+
linkEl.dataset.score = score;
|
93 |
+
linkEl.innerHTML = title;
|
94 |
+
if (descr) {
|
95 |
+
listItem.appendChild(document.createElement("span")).innerHTML =
|
96 |
+
" (" + descr + ")";
|
97 |
+
// highlight search terms in the description
|
98 |
+
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
99 |
+
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
100 |
+
}
|
101 |
+
else if (showSearchSummary)
|
102 |
+
fetch(requestUrl)
|
103 |
+
.then((responseData) => responseData.text())
|
104 |
+
.then((data) => {
|
105 |
+
if (data)
|
106 |
+
listItem.appendChild(
|
107 |
+
Search.makeSearchSummary(data, searchTerms, anchor)
|
108 |
+
);
|
109 |
+
// highlight search terms in the summary
|
110 |
+
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
111 |
+
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
112 |
+
});
|
113 |
+
Search.output.appendChild(listItem);
|
114 |
+
};
|
115 |
+
const _finishSearch = (resultCount) => {
|
116 |
+
Search.stopPulse();
|
117 |
+
Search.title.innerText = _("Search Results");
|
118 |
+
if (!resultCount)
|
119 |
+
Search.status.innerText = Documentation.gettext(
|
120 |
+
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
121 |
+
);
|
122 |
+
else
|
123 |
+
Search.status.innerText = Documentation.ngettext(
|
124 |
+
"Search finished, found one page matching the search query.",
|
125 |
+
"Search finished, found ${resultCount} pages matching the search query.",
|
126 |
+
resultCount,
|
127 |
+
).replace('${resultCount}', resultCount);
|
128 |
+
};
|
129 |
+
const _displayNextItem = (
|
130 |
+
results,
|
131 |
+
resultCount,
|
132 |
+
searchTerms,
|
133 |
+
highlightTerms,
|
134 |
+
) => {
|
135 |
+
// results left, load the summary and display it
|
136 |
+
// this is intended to be dynamic (don't sub resultsCount)
|
137 |
+
if (results.length) {
|
138 |
+
_displayItem(results.pop(), searchTerms, highlightTerms);
|
139 |
+
setTimeout(
|
140 |
+
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
|
141 |
+
5
|
142 |
+
);
|
143 |
+
}
|
144 |
+
// search finished, update title and status message
|
145 |
+
else _finishSearch(resultCount);
|
146 |
+
};
|
147 |
+
// Helper function used by query() to order search results.
|
148 |
+
// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
|
149 |
+
// Order the results by score (in opposite order of appearance, since the
|
150 |
+
// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
|
151 |
+
const _orderResultsByScoreThenName = (a, b) => {
|
152 |
+
const leftScore = a[4];
|
153 |
+
const rightScore = b[4];
|
154 |
+
if (leftScore === rightScore) {
|
155 |
+
// same score: sort alphabetically
|
156 |
+
const leftTitle = a[1].toLowerCase();
|
157 |
+
const rightTitle = b[1].toLowerCase();
|
158 |
+
if (leftTitle === rightTitle) return 0;
|
159 |
+
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
160 |
+
}
|
161 |
+
return leftScore > rightScore ? 1 : -1;
|
162 |
+
};
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
166 |
+
* custom function per language.
|
167 |
+
*
|
168 |
+
* The regular expression works by splitting the string on consecutive characters
|
169 |
+
* that are not Unicode letters, numbers, underscores, or emoji characters.
|
170 |
+
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
|
171 |
+
*/
|
172 |
+
if (typeof splitQuery === "undefined") {
|
173 |
+
var splitQuery = (query) => query
|
174 |
+
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
|
175 |
+
.filter(term => term) // remove remaining empty strings
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Search Module
|
180 |
+
*/
|
181 |
+
const Search = {
|
182 |
+
_index: null,
|
183 |
+
_queued_query: null,
|
184 |
+
_pulse_status: -1,
|
185 |
+
|
186 |
+
htmlToText: (htmlString, anchor) => {
|
187 |
+
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
188 |
+
for (const removalQuery of [".headerlink", "script", "style"]) {
|
189 |
+
htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
|
190 |
+
}
|
191 |
+
if (anchor) {
|
192 |
+
const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
|
193 |
+
if (anchorContent) return anchorContent.textContent;
|
194 |
+
|
195 |
+
console.warn(
|
196 |
+
`Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
|
197 |
+
);
|
198 |
+
}
|
199 |
+
|
200 |
+
// if anchor not specified or not found, fall back to main content
|
201 |
+
const docContent = htmlElement.querySelector('[role="main"]');
|
202 |
+
if (docContent) return docContent.textContent;
|
203 |
+
|
204 |
+
console.warn(
|
205 |
+
"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
|
206 |
+
);
|
207 |
+
return "";
|
208 |
+
},
|
209 |
+
|
210 |
+
init: () => {
|
211 |
+
const query = new URLSearchParams(window.location.search).get("q");
|
212 |
+
document
|
213 |
+
.querySelectorAll('input[name="q"]')
|
214 |
+
.forEach((el) => (el.value = query));
|
215 |
+
if (query) Search.performSearch(query);
|
216 |
+
},
|
217 |
+
|
218 |
+
loadIndex: (url) =>
|
219 |
+
(document.body.appendChild(document.createElement("script")).src = url),
|
220 |
+
|
221 |
+
setIndex: (index) => {
|
222 |
+
Search._index = index;
|
223 |
+
if (Search._queued_query !== null) {
|
224 |
+
const query = Search._queued_query;
|
225 |
+
Search._queued_query = null;
|
226 |
+
Search.query(query);
|
227 |
+
}
|
228 |
+
},
|
229 |
+
|
230 |
+
hasIndex: () => Search._index !== null,
|
231 |
+
|
232 |
+
deferQuery: (query) => (Search._queued_query = query),
|
233 |
+
|
234 |
+
stopPulse: () => (Search._pulse_status = -1),
|
235 |
+
|
236 |
+
startPulse: () => {
|
237 |
+
if (Search._pulse_status >= 0) return;
|
238 |
+
|
239 |
+
const pulse = () => {
|
240 |
+
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
241 |
+
Search.dots.innerText = ".".repeat(Search._pulse_status);
|
242 |
+
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
|
243 |
+
};
|
244 |
+
pulse();
|
245 |
+
},
|
246 |
+
|
247 |
+
/**
|
248 |
+
* perform a search for something (or wait until index is loaded)
|
249 |
+
*/
|
250 |
+
performSearch: (query) => {
|
251 |
+
// create the required interface elements
|
252 |
+
const searchText = document.createElement("h2");
|
253 |
+
searchText.textContent = _("Searching");
|
254 |
+
const searchSummary = document.createElement("p");
|
255 |
+
searchSummary.classList.add("search-summary");
|
256 |
+
searchSummary.innerText = "";
|
257 |
+
const searchList = document.createElement("ul");
|
258 |
+
searchList.setAttribute("role", "list");
|
259 |
+
searchList.classList.add("search");
|
260 |
+
|
261 |
+
const out = document.getElementById("search-results");
|
262 |
+
Search.title = out.appendChild(searchText);
|
263 |
+
Search.dots = Search.title.appendChild(document.createElement("span"));
|
264 |
+
Search.status = out.appendChild(searchSummary);
|
265 |
+
Search.output = out.appendChild(searchList);
|
266 |
+
|
267 |
+
const searchProgress = document.getElementById("search-progress");
|
268 |
+
// Some themes don't use the search progress node
|
269 |
+
if (searchProgress) {
|
270 |
+
searchProgress.innerText = _("Preparing search...");
|
271 |
+
}
|
272 |
+
Search.startPulse();
|
273 |
+
|
274 |
+
// index already loaded, the browser was quick!
|
275 |
+
if (Search.hasIndex()) Search.query(query);
|
276 |
+
else Search.deferQuery(query);
|
277 |
+
},
|
278 |
+
|
279 |
+
_parseQuery: (query) => {
|
280 |
+
// stem the search terms and add them to the correct list
|
281 |
+
const stemmer = new Stemmer();
|
282 |
+
const searchTerms = new Set();
|
283 |
+
const excludedTerms = new Set();
|
284 |
+
const highlightTerms = new Set();
|
285 |
+
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
|
286 |
+
splitQuery(query.trim()).forEach((queryTerm) => {
|
287 |
+
const queryTermLower = queryTerm.toLowerCase();
|
288 |
+
|
289 |
+
// maybe skip this "word"
|
290 |
+
// stopwords array is from language_data.js
|
291 |
+
if (
|
292 |
+
stopwords.indexOf(queryTermLower) !== -1 ||
|
293 |
+
queryTerm.match(/^\d+$/)
|
294 |
+
)
|
295 |
+
return;
|
296 |
+
|
297 |
+
// stem the word
|
298 |
+
let word = stemmer.stemWord(queryTermLower);
|
299 |
+
// select the correct list
|
300 |
+
if (word[0] === "-") excludedTerms.add(word.substr(1));
|
301 |
+
else {
|
302 |
+
searchTerms.add(word);
|
303 |
+
highlightTerms.add(queryTermLower);
|
304 |
+
}
|
305 |
+
});
|
306 |
+
|
307 |
+
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
|
308 |
+
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
|
309 |
+
}
|
310 |
+
|
311 |
+
// console.debug("SEARCH: searching for:");
|
312 |
+
// console.info("required: ", [...searchTerms]);
|
313 |
+
// console.info("excluded: ", [...excludedTerms]);
|
314 |
+
|
315 |
+
return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
|
316 |
+
},
|
317 |
+
|
318 |
+
/**
|
319 |
+
* execute search (requires search index to be loaded)
|
320 |
+
*/
|
321 |
+
_performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
|
322 |
+
const filenames = Search._index.filenames;
|
323 |
+
const docNames = Search._index.docnames;
|
324 |
+
const titles = Search._index.titles;
|
325 |
+
const allTitles = Search._index.alltitles;
|
326 |
+
const indexEntries = Search._index.indexentries;
|
327 |
+
|
328 |
+
// Collect multiple result groups to be sorted separately and then ordered.
|
329 |
+
// Each is an array of [docname, title, anchor, descr, score, filename, kind].
|
330 |
+
const normalResults = [];
|
331 |
+
const nonMainIndexResults = [];
|
332 |
+
|
333 |
+
_removeChildren(document.getElementById("search-progress"));
|
334 |
+
|
335 |
+
const queryLower = query.toLowerCase().trim();
|
336 |
+
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
337 |
+
if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
338 |
+
for (const [file, id] of foundTitles) {
|
339 |
+
const score = Math.round(Scorer.title * queryLower.length / title.length);
|
340 |
+
const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
|
341 |
+
normalResults.push([
|
342 |
+
docNames[file],
|
343 |
+
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
344 |
+
id !== null ? "#" + id : "",
|
345 |
+
null,
|
346 |
+
score + boost,
|
347 |
+
filenames[file],
|
348 |
+
SearchResultKind.title,
|
349 |
+
]);
|
350 |
+
}
|
351 |
+
}
|
352 |
+
}
|
353 |
+
|
354 |
+
// search for explicit entries in index directives
|
355 |
+
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
356 |
+
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
357 |
+
for (const [file, id, isMain] of foundEntries) {
|
358 |
+
const score = Math.round(100 * queryLower.length / entry.length);
|
359 |
+
const result = [
|
360 |
+
docNames[file],
|
361 |
+
titles[file],
|
362 |
+
id ? "#" + id : "",
|
363 |
+
null,
|
364 |
+
score,
|
365 |
+
filenames[file],
|
366 |
+
SearchResultKind.index,
|
367 |
+
];
|
368 |
+
if (isMain) {
|
369 |
+
normalResults.push(result);
|
370 |
+
} else {
|
371 |
+
nonMainIndexResults.push(result);
|
372 |
+
}
|
373 |
+
}
|
374 |
+
}
|
375 |
+
}
|
376 |
+
|
377 |
+
// lookup as object
|
378 |
+
objectTerms.forEach((term) =>
|
379 |
+
normalResults.push(...Search.performObjectSearch(term, objectTerms))
|
380 |
+
);
|
381 |
+
|
382 |
+
// lookup as search terms in fulltext
|
383 |
+
normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
384 |
+
|
385 |
+
// let the scorer override scores with a custom scoring function
|
386 |
+
if (Scorer.score) {
|
387 |
+
normalResults.forEach((item) => (item[4] = Scorer.score(item)));
|
388 |
+
nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
|
389 |
+
}
|
390 |
+
|
391 |
+
// Sort each group of results by score and then alphabetically by name.
|
392 |
+
normalResults.sort(_orderResultsByScoreThenName);
|
393 |
+
nonMainIndexResults.sort(_orderResultsByScoreThenName);
|
394 |
+
|
395 |
+
// Combine the result groups in (reverse) order.
|
396 |
+
// Non-main index entries are typically arbitrary cross-references,
|
397 |
+
// so display them after other results.
|
398 |
+
let results = [...nonMainIndexResults, ...normalResults];
|
399 |
+
|
400 |
+
// remove duplicate search results
|
401 |
+
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
402 |
+
let seen = new Set();
|
403 |
+
results = results.reverse().reduce((acc, result) => {
|
404 |
+
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
|
405 |
+
if (!seen.has(resultStr)) {
|
406 |
+
acc.push(result);
|
407 |
+
seen.add(resultStr);
|
408 |
+
}
|
409 |
+
return acc;
|
410 |
+
}, []);
|
411 |
+
|
412 |
+
return results.reverse();
|
413 |
+
},
|
414 |
+
|
415 |
+
query: (query) => {
|
416 |
+
const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
|
417 |
+
const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
|
418 |
+
|
419 |
+
// for debugging
|
420 |
+
//Search.lastresults = results.slice(); // a copy
|
421 |
+
// console.info("search results:", Search.lastresults);
|
422 |
+
|
423 |
+
// print the results
|
424 |
+
_displayNextItem(results, results.length, searchTerms, highlightTerms);
|
425 |
+
},
|
426 |
+
|
427 |
+
/**
|
428 |
+
* search for object names
|
429 |
+
*/
|
430 |
+
performObjectSearch: (object, objectTerms) => {
|
431 |
+
const filenames = Search._index.filenames;
|
432 |
+
const docNames = Search._index.docnames;
|
433 |
+
const objects = Search._index.objects;
|
434 |
+
const objNames = Search._index.objnames;
|
435 |
+
const titles = Search._index.titles;
|
436 |
+
|
437 |
+
const results = [];
|
438 |
+
|
439 |
+
const objectSearchCallback = (prefix, match) => {
|
440 |
+
const name = match[4]
|
441 |
+
const fullname = (prefix ? prefix + "." : "") + name;
|
442 |
+
const fullnameLower = fullname.toLowerCase();
|
443 |
+
if (fullnameLower.indexOf(object) < 0) return;
|
444 |
+
|
445 |
+
let score = 0;
|
446 |
+
const parts = fullnameLower.split(".");
|
447 |
+
|
448 |
+
// check for different match types: exact matches of full name or
|
449 |
+
// "last name" (i.e. last dotted part)
|
450 |
+
if (fullnameLower === object || parts.slice(-1)[0] === object)
|
451 |
+
score += Scorer.objNameMatch;
|
452 |
+
else if (parts.slice(-1)[0].indexOf(object) > -1)
|
453 |
+
score += Scorer.objPartialMatch; // matches in last name
|
454 |
+
|
455 |
+
const objName = objNames[match[1]][2];
|
456 |
+
const title = titles[match[0]];
|
457 |
+
|
458 |
+
// If more than one term searched for, we require other words to be
|
459 |
+
// found in the name/title/description
|
460 |
+
const otherTerms = new Set(objectTerms);
|
461 |
+
otherTerms.delete(object);
|
462 |
+
if (otherTerms.size > 0) {
|
463 |
+
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
|
464 |
+
if (
|
465 |
+
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
|
466 |
+
)
|
467 |
+
return;
|
468 |
+
}
|
469 |
+
|
470 |
+
let anchor = match[3];
|
471 |
+
if (anchor === "") anchor = fullname;
|
472 |
+
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
|
473 |
+
|
474 |
+
const descr = objName + _(", in ") + title;
|
475 |
+
|
476 |
+
// add custom score for some objects according to scorer
|
477 |
+
if (Scorer.objPrio.hasOwnProperty(match[2]))
|
478 |
+
score += Scorer.objPrio[match[2]];
|
479 |
+
else score += Scorer.objPrioDefault;
|
480 |
+
|
481 |
+
results.push([
|
482 |
+
docNames[match[0]],
|
483 |
+
fullname,
|
484 |
+
"#" + anchor,
|
485 |
+
descr,
|
486 |
+
score,
|
487 |
+
filenames[match[0]],
|
488 |
+
SearchResultKind.object,
|
489 |
+
]);
|
490 |
+
};
|
491 |
+
Object.keys(objects).forEach((prefix) =>
|
492 |
+
objects[prefix].forEach((array) =>
|
493 |
+
objectSearchCallback(prefix, array)
|
494 |
+
)
|
495 |
+
);
|
496 |
+
return results;
|
497 |
+
},
|
498 |
+
|
499 |
+
/**
|
500 |
+
* search for full-text terms in the index
|
501 |
+
*/
|
502 |
+
performTermsSearch: (searchTerms, excludedTerms) => {
|
503 |
+
// prepare search
|
504 |
+
const terms = Search._index.terms;
|
505 |
+
const titleTerms = Search._index.titleterms;
|
506 |
+
const filenames = Search._index.filenames;
|
507 |
+
const docNames = Search._index.docnames;
|
508 |
+
const titles = Search._index.titles;
|
509 |
+
|
510 |
+
const scoreMap = new Map();
|
511 |
+
const fileMap = new Map();
|
512 |
+
|
513 |
+
// perform the search on the required terms
|
514 |
+
searchTerms.forEach((word) => {
|
515 |
+
const files = [];
|
516 |
+
const arr = [
|
517 |
+
{ files: terms[word], score: Scorer.term },
|
518 |
+
{ files: titleTerms[word], score: Scorer.title },
|
519 |
+
];
|
520 |
+
// add support for partial matches
|
521 |
+
if (word.length > 2) {
|
522 |
+
const escapedWord = _escapeRegExp(word);
|
523 |
+
if (!terms.hasOwnProperty(word)) {
|
524 |
+
Object.keys(terms).forEach((term) => {
|
525 |
+
if (term.match(escapedWord))
|
526 |
+
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
527 |
+
});
|
528 |
+
}
|
529 |
+
if (!titleTerms.hasOwnProperty(word)) {
|
530 |
+
Object.keys(titleTerms).forEach((term) => {
|
531 |
+
if (term.match(escapedWord))
|
532 |
+
arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
|
533 |
+
});
|
534 |
+
}
|
535 |
+
}
|
536 |
+
|
537 |
+
// no match but word was a required one
|
538 |
+
if (arr.every((record) => record.files === undefined)) return;
|
539 |
+
|
540 |
+
// found search word in contents
|
541 |
+
arr.forEach((record) => {
|
542 |
+
if (record.files === undefined) return;
|
543 |
+
|
544 |
+
let recordFiles = record.files;
|
545 |
+
if (recordFiles.length === undefined) recordFiles = [recordFiles];
|
546 |
+
files.push(...recordFiles);
|
547 |
+
|
548 |
+
// set score for the word in each file
|
549 |
+
recordFiles.forEach((file) => {
|
550 |
+
if (!scoreMap.has(file)) scoreMap.set(file, {});
|
551 |
+
scoreMap.get(file)[word] = record.score;
|
552 |
+
});
|
553 |
+
});
|
554 |
+
|
555 |
+
// create the mapping
|
556 |
+
files.forEach((file) => {
|
557 |
+
if (!fileMap.has(file)) fileMap.set(file, [word]);
|
558 |
+
else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
|
559 |
+
});
|
560 |
+
});
|
561 |
+
|
562 |
+
// now check if the files don't contain excluded terms
|
563 |
+
const results = [];
|
564 |
+
for (const [file, wordList] of fileMap) {
|
565 |
+
// check if all requirements are matched
|
566 |
+
|
567 |
+
// as search terms with length < 3 are discarded
|
568 |
+
const filteredTermCount = [...searchTerms].filter(
|
569 |
+
(term) => term.length > 2
|
570 |
+
).length;
|
571 |
+
if (
|
572 |
+
wordList.length !== searchTerms.size &&
|
573 |
+
wordList.length !== filteredTermCount
|
574 |
+
)
|
575 |
+
continue;
|
576 |
+
|
577 |
+
// ensure that none of the excluded terms is in the search result
|
578 |
+
if (
|
579 |
+
[...excludedTerms].some(
|
580 |
+
(term) =>
|
581 |
+
terms[term] === file ||
|
582 |
+
titleTerms[term] === file ||
|
583 |
+
(terms[term] || []).includes(file) ||
|
584 |
+
(titleTerms[term] || []).includes(file)
|
585 |
+
)
|
586 |
+
)
|
587 |
+
break;
|
588 |
+
|
589 |
+
// select one (max) score for the file.
|
590 |
+
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
|
591 |
+
// add result to the result list
|
592 |
+
results.push([
|
593 |
+
docNames[file],
|
594 |
+
titles[file],
|
595 |
+
"",
|
596 |
+
null,
|
597 |
+
score,
|
598 |
+
filenames[file],
|
599 |
+
SearchResultKind.text,
|
600 |
+
]);
|
601 |
+
}
|
602 |
+
return results;
|
603 |
+
},
|
604 |
+
|
605 |
+
/**
|
606 |
+
* helper function to return a node containing the
|
607 |
+
* search summary for a given text. keywords is a list
|
608 |
+
* of stemmed words.
|
609 |
+
*/
|
610 |
+
makeSearchSummary: (htmlText, keywords, anchor) => {
|
611 |
+
const text = Search.htmlToText(htmlText, anchor);
|
612 |
+
if (text === "") return null;
|
613 |
+
|
614 |
+
const textLower = text.toLowerCase();
|
615 |
+
const actualStartPosition = [...keywords]
|
616 |
+
.map((k) => textLower.indexOf(k.toLowerCase()))
|
617 |
+
.filter((i) => i > -1)
|
618 |
+
.slice(-1)[0];
|
619 |
+
const startWithContext = Math.max(actualStartPosition - 120, 0);
|
620 |
+
|
621 |
+
const top = startWithContext === 0 ? "" : "...";
|
622 |
+
const tail = startWithContext + 240 < text.length ? "..." : "";
|
623 |
+
|
624 |
+
let summary = document.createElement("p");
|
625 |
+
summary.classList.add("context");
|
626 |
+
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
|
627 |
+
|
628 |
+
return summary;
|
629 |
+
},
|
630 |
+
};
|
631 |
+
|
632 |
+
_ready(Search.init);
|
docs/build/html/_static/sphinx_highlight.js
ADDED
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Highlighting utilities for Sphinx HTML documentation. */
|
2 |
+
"use strict";
|
3 |
+
|
4 |
+
const SPHINX_HIGHLIGHT_ENABLED = true
|
5 |
+
|
6 |
+
/**
|
7 |
+
* highlight a given string on a node by wrapping it in
|
8 |
+
* span elements with the given class name.
|
9 |
+
*/
|
10 |
+
const _highlight = (node, addItems, text, className) => {
|
11 |
+
if (node.nodeType === Node.TEXT_NODE) {
|
12 |
+
const val = node.nodeValue;
|
13 |
+
const parent = node.parentNode;
|
14 |
+
const pos = val.toLowerCase().indexOf(text);
|
15 |
+
if (
|
16 |
+
pos >= 0 &&
|
17 |
+
!parent.classList.contains(className) &&
|
18 |
+
!parent.classList.contains("nohighlight")
|
19 |
+
) {
|
20 |
+
let span;
|
21 |
+
|
22 |
+
const closestNode = parent.closest("body, svg, foreignObject");
|
23 |
+
const isInSVG = closestNode && closestNode.matches("svg");
|
24 |
+
if (isInSVG) {
|
25 |
+
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
26 |
+
} else {
|
27 |
+
span = document.createElement("span");
|
28 |
+
span.classList.add(className);
|
29 |
+
}
|
30 |
+
|
31 |
+
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
32 |
+
const rest = document.createTextNode(val.substr(pos + text.length));
|
33 |
+
parent.insertBefore(
|
34 |
+
span,
|
35 |
+
parent.insertBefore(
|
36 |
+
rest,
|
37 |
+
node.nextSibling
|
38 |
+
)
|
39 |
+
);
|
40 |
+
node.nodeValue = val.substr(0, pos);
|
41 |
+
/* There may be more occurrences of search term in this node. So call this
|
42 |
+
* function recursively on the remaining fragment.
|
43 |
+
*/
|
44 |
+
_highlight(rest, addItems, text, className);
|
45 |
+
|
46 |
+
if (isInSVG) {
|
47 |
+
const rect = document.createElementNS(
|
48 |
+
"http://www.w3.org/2000/svg",
|
49 |
+
"rect"
|
50 |
+
);
|
51 |
+
const bbox = parent.getBBox();
|
52 |
+
rect.x.baseVal.value = bbox.x;
|
53 |
+
rect.y.baseVal.value = bbox.y;
|
54 |
+
rect.width.baseVal.value = bbox.width;
|
55 |
+
rect.height.baseVal.value = bbox.height;
|
56 |
+
rect.setAttribute("class", className);
|
57 |
+
addItems.push({ parent: parent, target: rect });
|
58 |
+
}
|
59 |
+
}
|
60 |
+
} else if (node.matches && !node.matches("button, select, textarea")) {
|
61 |
+
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
|
62 |
+
}
|
63 |
+
};
|
64 |
+
const _highlightText = (thisNode, text, className) => {
|
65 |
+
let addItems = [];
|
66 |
+
_highlight(thisNode, addItems, text, className);
|
67 |
+
addItems.forEach((obj) =>
|
68 |
+
obj.parent.insertAdjacentElement("beforebegin", obj.target)
|
69 |
+
);
|
70 |
+
};
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Small JavaScript module for the documentation.
|
74 |
+
*/
|
75 |
+
const SphinxHighlight = {
|
76 |
+
|
77 |
+
/**
|
78 |
+
* highlight the search words provided in localstorage in the text
|
79 |
+
*/
|
80 |
+
highlightSearchWords: () => {
|
81 |
+
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
|
82 |
+
|
83 |
+
// get and clear terms from localstorage
|
84 |
+
const url = new URL(window.location);
|
85 |
+
const highlight =
|
86 |
+
localStorage.getItem("sphinx_highlight_terms")
|
87 |
+
|| url.searchParams.get("highlight")
|
88 |
+
|| "";
|
89 |
+
localStorage.removeItem("sphinx_highlight_terms")
|
90 |
+
url.searchParams.delete("highlight");
|
91 |
+
window.history.replaceState({}, "", url);
|
92 |
+
|
93 |
+
// get individual terms from highlight string
|
94 |
+
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
|
95 |
+
if (terms.length === 0) return; // nothing to do
|
96 |
+
|
97 |
+
// There should never be more than one element matching "div.body"
|
98 |
+
const divBody = document.querySelectorAll("div.body");
|
99 |
+
const body = divBody.length ? divBody[0] : document.querySelector("body");
|
100 |
+
window.setTimeout(() => {
|
101 |
+
terms.forEach((term) => _highlightText(body, term, "highlighted"));
|
102 |
+
}, 10);
|
103 |
+
|
104 |
+
const searchBox = document.getElementById("searchbox");
|
105 |
+
if (searchBox === null) return;
|
106 |
+
searchBox.appendChild(
|
107 |
+
document
|
108 |
+
.createRange()
|
109 |
+
.createContextualFragment(
|
110 |
+
'<p class="highlight-link">' +
|
111 |
+
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
|
112 |
+
_("Hide Search Matches") +
|
113 |
+
"</a></p>"
|
114 |
+
)
|
115 |
+
);
|
116 |
+
},
|
117 |
+
|
118 |
+
/**
|
119 |
+
* helper function to hide the search marks again
|
120 |
+
*/
|
121 |
+
hideSearchWords: () => {
|
122 |
+
document
|
123 |
+
.querySelectorAll("#searchbox .highlight-link")
|
124 |
+
.forEach((el) => el.remove());
|
125 |
+
document
|
126 |
+
.querySelectorAll("span.highlighted")
|
127 |
+
.forEach((el) => el.classList.remove("highlighted"));
|
128 |
+
localStorage.removeItem("sphinx_highlight_terms")
|
129 |
+
},
|
130 |
+
|
131 |
+
initEscapeListener: () => {
|
132 |
+
// only install a listener if it is really needed
|
133 |
+
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
|
134 |
+
|
135 |
+
document.addEventListener("keydown", (event) => {
|
136 |
+
// bail for input elements
|
137 |
+
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
138 |
+
// bail with special keys
|
139 |
+
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
|
140 |
+
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
|
141 |
+
SphinxHighlight.hideSearchWords();
|
142 |
+
event.preventDefault();
|
143 |
+
}
|
144 |
+
});
|
145 |
+
},
|
146 |
+
};
|
147 |
+
|
148 |
+
_ready(() => {
|
149 |
+
/* Do not call highlightSearchWords() when we are on the search page.
|
150 |
+
* It will highlight words from the *previous* search query.
|
151 |
+
*/
|
152 |
+
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
|
153 |
+
SphinxHighlight.initEscapeListener();
|
154 |
+
});
|
docs/build/html/_static/tabs.css
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.sphinx-tabs {
|
2 |
+
margin-bottom: 1rem;
|
3 |
+
}
|
4 |
+
|
5 |
+
[role="tablist"] {
|
6 |
+
border-bottom: 1px solid #a0b3bf;
|
7 |
+
}
|
8 |
+
|
9 |
+
.sphinx-tabs-tab {
|
10 |
+
position: relative;
|
11 |
+
font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
|
12 |
+
color: #1D5C87;
|
13 |
+
line-height: 24px;
|
14 |
+
margin: 0;
|
15 |
+
font-size: 16px;
|
16 |
+
font-weight: 400;
|
17 |
+
background-color: rgba(255, 255, 255, 0);
|
18 |
+
border-radius: 5px 5px 0 0;
|
19 |
+
border: 0;
|
20 |
+
padding: 1rem 1.5rem;
|
21 |
+
margin-bottom: 0;
|
22 |
+
}
|
23 |
+
|
24 |
+
.sphinx-tabs-tab[aria-selected="true"] {
|
25 |
+
font-weight: 700;
|
26 |
+
border: 1px solid #a0b3bf;
|
27 |
+
border-bottom: 1px solid white;
|
28 |
+
margin: -1px;
|
29 |
+
background-color: white;
|
30 |
+
}
|
31 |
+
|
32 |
+
.sphinx-tabs-tab:focus {
|
33 |
+
z-index: 1;
|
34 |
+
outline-offset: 1px;
|
35 |
+
}
|
36 |
+
|
37 |
+
.sphinx-tabs-panel {
|
38 |
+
position: relative;
|
39 |
+
padding: 1rem;
|
40 |
+
border: 1px solid #a0b3bf;
|
41 |
+
margin: 0px -1px -1px -1px;
|
42 |
+
border-radius: 0 0 5px 5px;
|
43 |
+
border-top: 0;
|
44 |
+
background: white;
|
45 |
+
}
|
46 |
+
|
47 |
+
.sphinx-tabs-panel.code-tab {
|
48 |
+
padding: 0.4rem;
|
49 |
+
}
|
50 |
+
|
51 |
+
.sphinx-tab img {
|
52 |
+
margin-bottom: 24 px;
|
53 |
+
}
|
54 |
+
|
55 |
+
/* Dark theme preference styling */
|
56 |
+
|
57 |
+
@media (prefers-color-scheme: dark) {
|
58 |
+
body[data-theme="auto"] .sphinx-tabs-panel {
|
59 |
+
color: white;
|
60 |
+
background-color: rgb(50, 50, 50);
|
61 |
+
}
|
62 |
+
|
63 |
+
body[data-theme="auto"] .sphinx-tabs-tab {
|
64 |
+
color: white;
|
65 |
+
background-color: rgba(255, 255, 255, 0.05);
|
66 |
+
}
|
67 |
+
|
68 |
+
body[data-theme="auto"] .sphinx-tabs-tab[aria-selected="true"] {
|
69 |
+
border-bottom: 1px solid rgb(50, 50, 50);
|
70 |
+
background-color: rgb(50, 50, 50);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
/* Explicit dark theme styling */
|
75 |
+
|
76 |
+
body[data-theme="dark"] .sphinx-tabs-panel {
|
77 |
+
color: white;
|
78 |
+
background-color: rgb(50, 50, 50);
|
79 |
+
}
|
80 |
+
|
81 |
+
body[data-theme="dark"] .sphinx-tabs-tab {
|
82 |
+
color: white;
|
83 |
+
background-color: rgba(255, 255, 255, 0.05);
|
84 |
+
}
|
85 |
+
|
86 |
+
body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] {
|
87 |
+
border-bottom: 2px solid rgb(50, 50, 50);
|
88 |
+
background-color: rgb(50, 50, 50);
|
89 |
+
}
|
docs/build/html/_static/tabs.js
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
try {
|
2 |
+
var session = window.sessionStorage || {};
|
3 |
+
} catch (e) {
|
4 |
+
var session = {};
|
5 |
+
}
|
6 |
+
|
7 |
+
window.addEventListener("DOMContentLoaded", () => {
|
8 |
+
const allTabs = document.querySelectorAll('.sphinx-tabs-tab');
|
9 |
+
const tabLists = document.querySelectorAll('[role="tablist"]');
|
10 |
+
|
11 |
+
allTabs.forEach(tab => {
|
12 |
+
tab.addEventListener("click", changeTabs);
|
13 |
+
});
|
14 |
+
|
15 |
+
tabLists.forEach(tabList => {
|
16 |
+
tabList.addEventListener("keydown", keyTabs);
|
17 |
+
});
|
18 |
+
|
19 |
+
// Restore group tab selection from session
|
20 |
+
const lastSelected = session.getItem('sphinx-tabs-last-selected');
|
21 |
+
if (lastSelected != null) selectNamedTabs(lastSelected);
|
22 |
+
});
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Key focus left and right between sibling elements using arrows
|
26 |
+
* @param {Node} e the element in focus when key was pressed
|
27 |
+
*/
|
28 |
+
function keyTabs(e) {
|
29 |
+
const tab = e.target;
|
30 |
+
let nextTab = null;
|
31 |
+
if (e.keyCode === 39 || e.keyCode === 37) {
|
32 |
+
tab.setAttribute("tabindex", -1);
|
33 |
+
// Move right
|
34 |
+
if (e.keyCode === 39) {
|
35 |
+
nextTab = tab.nextElementSibling;
|
36 |
+
if (nextTab === null) {
|
37 |
+
nextTab = tab.parentNode.firstElementChild;
|
38 |
+
}
|
39 |
+
// Move left
|
40 |
+
} else if (e.keyCode === 37) {
|
41 |
+
nextTab = tab.previousElementSibling;
|
42 |
+
if (nextTab === null) {
|
43 |
+
nextTab = tab.parentNode.lastElementChild;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
if (nextTab !== null) {
|
49 |
+
nextTab.setAttribute("tabindex", 0);
|
50 |
+
nextTab.focus();
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Select or deselect clicked tab. If a group tab
|
56 |
+
* is selected, also select tab in other tabLists.
|
57 |
+
* @param {Node} e the element that was clicked
|
58 |
+
*/
|
59 |
+
function changeTabs(e) {
|
60 |
+
// Use this instead of the element that was clicked, in case it's a child
|
61 |
+
const notSelected = this.getAttribute("aria-selected") === "false";
|
62 |
+
const positionBefore = this.parentNode.getBoundingClientRect().top;
|
63 |
+
const notClosable = !this.parentNode.classList.contains("closeable");
|
64 |
+
|
65 |
+
deselectTabList(this);
|
66 |
+
|
67 |
+
if (notSelected || notClosable) {
|
68 |
+
selectTab(this);
|
69 |
+
const name = this.getAttribute("name");
|
70 |
+
selectNamedTabs(name, this.id);
|
71 |
+
|
72 |
+
if (this.classList.contains("group-tab")) {
|
73 |
+
// Persist during session
|
74 |
+
session.setItem('sphinx-tabs-last-selected', name);
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
const positionAfter = this.parentNode.getBoundingClientRect().top;
|
79 |
+
const positionDelta = positionAfter - positionBefore;
|
80 |
+
// Scroll to offset content resizing
|
81 |
+
window.scrollTo(0, window.scrollY + positionDelta);
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Select tab and show associated panel.
|
86 |
+
* @param {Node} tab tab to select
|
87 |
+
*/
|
88 |
+
function selectTab(tab) {
|
89 |
+
tab.setAttribute("aria-selected", true);
|
90 |
+
|
91 |
+
// Show the associated panel
|
92 |
+
document
|
93 |
+
.getElementById(tab.getAttribute("aria-controls"))
|
94 |
+
.removeAttribute("hidden");
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Hide the panels associated with all tabs within the
|
99 |
+
* tablist containing this tab.
|
100 |
+
* @param {Node} tab a tab within the tablist to deselect
|
101 |
+
*/
|
102 |
+
function deselectTabList(tab) {
|
103 |
+
const parent = tab.parentNode;
|
104 |
+
const grandparent = parent.parentNode;
|
105 |
+
|
106 |
+
Array.from(parent.children)
|
107 |
+
.forEach(t => t.setAttribute("aria-selected", false));
|
108 |
+
|
109 |
+
Array.from(grandparent.children)
|
110 |
+
.slice(1) // Skip tablist
|
111 |
+
.forEach(panel => panel.setAttribute("hidden", true));
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Select grouped tabs with the same name, but no the tab
|
116 |
+
* with the given id.
|
117 |
+
* @param {Node} name name of grouped tab to be selected
|
118 |
+
* @param {Node} clickedId id of clicked tab
|
119 |
+
*/
|
120 |
+
function selectNamedTabs(name, clickedId=null) {
|
121 |
+
const groupedTabs = document.querySelectorAll(`.sphinx-tabs-tab[name="${name}"]`);
|
122 |
+
const tabLists = Array.from(groupedTabs).map(tab => tab.parentNode);
|
123 |
+
|
124 |
+
tabLists
|
125 |
+
.forEach(tabList => {
|
126 |
+
// Don't want to change the tabList containing the clicked tab
|
127 |
+
const clickedTab = tabList.querySelector(`[id="${clickedId}"]`);
|
128 |
+
if (clickedTab === null ) {
|
129 |
+
// Select first tab with matching name
|
130 |
+
const tab = tabList.querySelector(`.sphinx-tabs-tab[name="${name}"]`);
|
131 |
+
deselectTabList(tab);
|
132 |
+
selectTab(tab);
|
133 |
+
}
|
134 |
+
})
|
135 |
+
}
|
136 |
+
|
137 |
+
if (typeof exports === 'undefined') {
|
138 |
+
exports = {};
|
139 |
+
}
|
140 |
+
|
141 |
+
exports.keyTabs = keyTabs;
|
142 |
+
exports.changeTabs = changeTabs;
|
143 |
+
exports.selectTab = selectTab;
|
144 |
+
exports.deselectTabList = deselectTabList;
|
145 |
+
exports.selectNamedTabs = selectNamedTabs;
|
docs/build/html/genindex.html
ADDED
@@ -0,0 +1,231 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7 |
+
<title>Index — AIM-CU 1.0.0 documentation</title>
|
8 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
11 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
12 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
13 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
14 |
+
<link rel="index" title="Index" href="#" />
|
15 |
+
<link rel="search" title="Search" href="search.html" />
|
16 |
+
|
17 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
18 |
+
|
19 |
+
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
</head><body>
|
24 |
+
|
25 |
+
|
26 |
+
<div class="document">
|
27 |
+
<div class="documentwrapper">
|
28 |
+
<div class="bodywrapper">
|
29 |
+
|
30 |
+
|
31 |
+
<div class="body" role="main">
|
32 |
+
|
33 |
+
|
34 |
+
<h1 id="index">Index</h1>
|
35 |
+
|
36 |
+
<div class="genindex-jumpbox">
|
37 |
+
<a href="#C"><strong>C</strong></a>
|
38 |
+
| <a href="#G"><strong>G</strong></a>
|
39 |
+
| <a href="#I"><strong>I</strong></a>
|
40 |
+
| <a href="#M"><strong>M</strong></a>
|
41 |
+
| <a href="#P"><strong>P</strong></a>
|
42 |
+
| <a href="#S"><strong>S</strong></a>
|
43 |
+
|
44 |
+
</div>
|
45 |
+
<h2 id="C">C</h2>
|
46 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
47 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
48 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.change_detection">change_detection() (package.cusum.CUSUM method)</a>
|
49 |
+
</li>
|
50 |
+
</ul></td>
|
51 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
52 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.compute_cusum">compute_cusum() (package.cusum.CUSUM method)</a>
|
53 |
+
</li>
|
54 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM">CUSUM (class in package.cusum)</a>
|
55 |
+
</li>
|
56 |
+
</ul></td>
|
57 |
+
</tr></table>
|
58 |
+
|
59 |
+
<h2 id="G">G</h2>
|
60 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
61 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
62 |
+
<li><a href="ref_theoretical.html#package.ARLTheoretical.get_ARL_1">get_ARL_1() (in module package.ARLTheoretical)</a>
|
63 |
+
</li>
|
64 |
+
<li><a href="ref_theoretical.html#package.ARLTheoretical.get_ARL_1_h_mu1_k">get_ARL_1_h_mu1_k() (in module package.ARLTheoretical)</a>
|
65 |
+
</li>
|
66 |
+
</ul></td>
|
67 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
68 |
+
<li><a href="ref_utils.html#package.utils.get_greattable_as_html">get_greattable_as_html() (in module package.utils)</a>
|
69 |
+
</li>
|
70 |
+
<li><a href="ref_theoretical.html#package.ARLTheoretical.get_ref_value">get_ref_value() (in module package.ARLTheoretical)</a>
|
71 |
+
</li>
|
72 |
+
<li><a href="ref_theoretical.html#package.ARLTheoretical.get_ref_value_k">get_ref_value_k() (in module package.ARLTheoretical)</a>
|
73 |
+
</li>
|
74 |
+
</ul></td>
|
75 |
+
</tr></table>
|
76 |
+
|
77 |
+
<h2 id="I">I</h2>
|
78 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
79 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
80 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.initialize">initialize() (package.cusum.CUSUM method)</a>
|
81 |
+
</li>
|
82 |
+
</ul></td>
|
83 |
+
</tr></table>
|
84 |
+
|
85 |
+
<h2 id="M">M</h2>
|
86 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
87 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
88 |
+
<li>
|
89 |
+
module
|
90 |
+
|
91 |
+
<ul>
|
92 |
+
<li><a href="ref_theoretical.html#module-package.ARLTheoretical">package.ARLTheoretical</a>
|
93 |
+
</li>
|
94 |
+
<li><a href="ref_cusum.html#module-package.cusum">package.cusum</a>
|
95 |
+
</li>
|
96 |
+
<li><a href="ref_utils.html#module-package.utils">package.utils</a>
|
97 |
+
</li>
|
98 |
+
</ul></li>
|
99 |
+
</ul></td>
|
100 |
+
</tr></table>
|
101 |
+
|
102 |
+
<h2 id="P">P</h2>
|
103 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
104 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
105 |
+
<li>
|
106 |
+
package.ARLTheoretical
|
107 |
+
|
108 |
+
<ul>
|
109 |
+
<li><a href="ref_theoretical.html#module-package.ARLTheoretical">module</a>
|
110 |
+
</li>
|
111 |
+
</ul></li>
|
112 |
+
<li>
|
113 |
+
package.cusum
|
114 |
+
|
115 |
+
<ul>
|
116 |
+
<li><a href="ref_cusum.html#module-package.cusum">module</a>
|
117 |
+
</li>
|
118 |
+
</ul></li>
|
119 |
+
<li>
|
120 |
+
package.utils
|
121 |
+
|
122 |
+
<ul>
|
123 |
+
<li><a href="ref_utils.html#module-package.utils">module</a>
|
124 |
+
</li>
|
125 |
+
</ul></li>
|
126 |
+
</ul></td>
|
127 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
128 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.plot_cusum_plotly">plot_cusum_plotly() (package.cusum.CUSUM method)</a>
|
129 |
+
</li>
|
130 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.plot_input_metric_plotly">plot_input_metric_plotly() (package.cusum.CUSUM method)</a>
|
131 |
+
</li>
|
132 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.plot_input_metric_plotly_raw">plot_input_metric_plotly_raw() (package.cusum.CUSUM method)</a>
|
133 |
+
</li>
|
134 |
+
<li><a href="ref_utils.html#package.utils.populate_summary_table_ARL0_k">populate_summary_table_ARL0_k() (in module package.utils)</a>
|
135 |
+
</li>
|
136 |
+
<li><a href="ref_utils.html#package.utils.populate_summary_table_ARL1_k">populate_summary_table_ARL1_k() (in module package.utils)</a>
|
137 |
+
</li>
|
138 |
+
</ul></td>
|
139 |
+
</tr></table>
|
140 |
+
|
141 |
+
<h2 id="S">S</h2>
|
142 |
+
<table style="width: 100%" class="indextable genindextable"><tr>
|
143 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
144 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.set_df_metric_csv">set_df_metric_csv() (package.cusum.CUSUM method)</a>
|
145 |
+
</li>
|
146 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.set_df_metric_default">set_df_metric_default() (package.cusum.CUSUM method)</a>
|
147 |
+
</li>
|
148 |
+
</ul></td>
|
149 |
+
<td style="width: 33%; vertical-align: top;"><ul>
|
150 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.set_init_stats">set_init_stats() (package.cusum.CUSUM method)</a>
|
151 |
+
</li>
|
152 |
+
<li><a href="ref_cusum.html#package.cusum.CUSUM.set_timeline">set_timeline() (package.cusum.CUSUM method)</a>
|
153 |
+
</li>
|
154 |
+
</ul></td>
|
155 |
+
</tr></table>
|
156 |
+
|
157 |
+
|
158 |
+
|
159 |
+
</div>
|
160 |
+
|
161 |
+
</div>
|
162 |
+
</div>
|
163 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
164 |
+
<div class="sphinxsidebarwrapper">
|
165 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
166 |
+
|
167 |
+
|
168 |
+
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
<p>
|
173 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
174 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
175 |
+
</p>
|
176 |
+
|
177 |
+
|
178 |
+
|
179 |
+
|
180 |
+
|
181 |
+
|
182 |
+
<search id="searchbox" style="display: none" role="search">
|
183 |
+
<div class="searchformwrapper">
|
184 |
+
<form class="search" action="search.html" method="get">
|
185 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
186 |
+
<input type="submit" value="Go" />
|
187 |
+
</form>
|
188 |
+
</div>
|
189 |
+
</search>
|
190 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
191 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
192 |
+
<ul>
|
193 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
194 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
195 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
196 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
197 |
+
</ul>
|
198 |
+
|
199 |
+
<div class="relations">
|
200 |
+
<h3>Related Topics</h3>
|
201 |
+
<ul>
|
202 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
203 |
+
</ul></li>
|
204 |
+
</ul>
|
205 |
+
</div>
|
206 |
+
|
207 |
+
|
208 |
+
|
209 |
+
|
210 |
+
|
211 |
+
|
212 |
+
|
213 |
+
|
214 |
+
</div>
|
215 |
+
</div>
|
216 |
+
<div class="clearer"></div>
|
217 |
+
</div>
|
218 |
+
<div class="footer">
|
219 |
+
|
220 |
+
|
221 |
+
|
222 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
223 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
224 |
+
|
225 |
+
</div>
|
226 |
+
|
227 |
+
|
228 |
+
|
229 |
+
|
230 |
+
</body>
|
231 |
+
</html>
|
docs/build/html/index.html
ADDED
@@ -0,0 +1,173 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
|
8 |
+
<title>AIM-CU documentation — AIM-CU 1.0.0 documentation</title>
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
11 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
16 |
+
<link rel="index" title="Index" href="genindex.html" />
|
17 |
+
<link rel="search" title="Search" href="search.html" />
|
18 |
+
<link rel="next" title="Methods" href="ref_method.html" />
|
19 |
+
|
20 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
|
26 |
+
</head><body>
|
27 |
+
|
28 |
+
|
29 |
+
<div class="document">
|
30 |
+
<div class="documentwrapper">
|
31 |
+
<div class="bodywrapper">
|
32 |
+
|
33 |
+
|
34 |
+
<div class="body" role="main">
|
35 |
+
|
36 |
+
<section id="aim-cu-documentation">
|
37 |
+
<h1>AIM-CU documentation<a class="headerlink" href="#aim-cu-documentation" title="Link to this heading">¶</a></h1>
|
38 |
+
<p>A CUSUM-based tool for AI Monitoring</p>
|
39 |
+
<p>AIM-CU is a statistical tool for AI monitoring using cumulative sum (AIM-CU). AIM-CU computes:</p>
|
40 |
+
<ul class="simple">
|
41 |
+
<li><p>The parameter choices for change-point detection based on an acceptable false alarm rate</p></li>
|
42 |
+
<li><p>Detection delay estimates for a given displacement of the performance metric from the target for those parameter choices.</p></li>
|
43 |
+
</ul>
|
44 |
+
<section id="code-execution">
|
45 |
+
<h2>Code execution<a class="headerlink" href="#code-execution" title="Link to this heading">¶</a></h2>
|
46 |
+
<p>Clone AIM-CU repository.</p>
|
47 |
+
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/DIDSR/AIM-CU.git
|
48 |
+
</pre></div>
|
49 |
+
</div>
|
50 |
+
<p>Run the following commands to install required dependencies (Python = 3.10 is used).</p>
|
51 |
+
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>apt-get<span class="w"> </span>-y<span class="w"> </span>install<span class="w"> </span>python3
|
52 |
+
apt-get<span class="w"> </span>-y<span class="w"> </span>install<span class="w"> </span>pip
|
53 |
+
<span class="nb">cd</span><span class="w"> </span>AIM-CU
|
54 |
+
pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
|
55 |
+
</pre></div>
|
56 |
+
</div>
|
57 |
+
<p>Run AIM-CU.</p>
|
58 |
+
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>python3<span class="w"> </span>app.py
|
59 |
+
</pre></div>
|
60 |
+
</div>
|
61 |
+
<p>Open the URL <a class="reference external" href="http://0.0.0.0:7860">http://0.0.0.0:7860</a> that is running the AIM-CU locally.</p>
|
62 |
+
</section>
|
63 |
+
<section id="demo">
|
64 |
+
<h2>Demo<a class="headerlink" href="#demo" title="Link to this heading">¶</a></h2>
|
65 |
+
<p>AIM-CU can also be run through the demo available at <a class="reference external" href="https://huggingface.co/spaces/didsr/AIM-CU">https://huggingface.co/spaces/didsr/AIM-CU</a>. If Space is paused, click on Restart button.</p>
|
66 |
+
<div class="toctree-wrapper compound">
|
67 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
68 |
+
<ul>
|
69 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a><ul>
|
70 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_method.html#cusum-parameters">CUSUM parameters</a></li>
|
71 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_method.html#cusum-chart">CUSUM chart</a></li>
|
72 |
+
</ul>
|
73 |
+
</li>
|
74 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a><ul>
|
75 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_cusum.html#package.cusum.CUSUM"><code class="docutils literal notranslate"><span class="pre">CUSUM</span></code></a></li>
|
76 |
+
</ul>
|
77 |
+
</li>
|
78 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a><ul>
|
79 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_theoretical.html#package.ARLTheoretical.get_ARL_1"><code class="docutils literal notranslate"><span class="pre">get_ARL_1()</span></code></a></li>
|
80 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_theoretical.html#package.ARLTheoretical.get_ARL_1_h_mu1_k"><code class="docutils literal notranslate"><span class="pre">get_ARL_1_h_mu1_k()</span></code></a></li>
|
81 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_theoretical.html#package.ARLTheoretical.get_ref_value"><code class="docutils literal notranslate"><span class="pre">get_ref_value()</span></code></a></li>
|
82 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_theoretical.html#package.ARLTheoretical.get_ref_value_k"><code class="docutils literal notranslate"><span class="pre">get_ref_value_k()</span></code></a></li>
|
83 |
+
</ul>
|
84 |
+
</li>
|
85 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a><ul>
|
86 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_utils.html#package.utils.get_greattable_as_html"><code class="docutils literal notranslate"><span class="pre">get_greattable_as_html()</span></code></a></li>
|
87 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_utils.html#package.utils.populate_summary_table_ARL0_k"><code class="docutils literal notranslate"><span class="pre">populate_summary_table_ARL0_k()</span></code></a></li>
|
88 |
+
<li class="toctree-l2"><a class="reference internal" href="ref_utils.html#package.utils.populate_summary_table_ARL1_k"><code class="docutils literal notranslate"><span class="pre">populate_summary_table_ARL1_k()</span></code></a></li>
|
89 |
+
</ul>
|
90 |
+
</li>
|
91 |
+
</ul>
|
92 |
+
</div>
|
93 |
+
</section>
|
94 |
+
</section>
|
95 |
+
|
96 |
+
|
97 |
+
</div>
|
98 |
+
|
99 |
+
</div>
|
100 |
+
</div>
|
101 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
102 |
+
<div class="sphinxsidebarwrapper">
|
103 |
+
<h1 class="logo"><a href="#">AIM-CU</a></h1>
|
104 |
+
|
105 |
+
|
106 |
+
|
107 |
+
|
108 |
+
|
109 |
+
|
110 |
+
<p>
|
111 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
112 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
113 |
+
</p>
|
114 |
+
|
115 |
+
|
116 |
+
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
<search id="searchbox" style="display: none" role="search">
|
121 |
+
<div class="searchformwrapper">
|
122 |
+
<form class="search" action="search.html" method="get">
|
123 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
124 |
+
<input type="submit" value="Go" />
|
125 |
+
</form>
|
126 |
+
</div>
|
127 |
+
</search>
|
128 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
129 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
130 |
+
<ul>
|
131 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
132 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
133 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
134 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
135 |
+
</ul>
|
136 |
+
|
137 |
+
<div class="relations">
|
138 |
+
<h3>Related Topics</h3>
|
139 |
+
<ul>
|
140 |
+
<li><a href="#">Documentation overview</a><ul>
|
141 |
+
<li>Next: <a href="ref_method.html" title="next chapter">Methods</a></li>
|
142 |
+
</ul></li>
|
143 |
+
</ul>
|
144 |
+
</div>
|
145 |
+
|
146 |
+
|
147 |
+
|
148 |
+
|
149 |
+
|
150 |
+
|
151 |
+
|
152 |
+
|
153 |
+
</div>
|
154 |
+
</div>
|
155 |
+
<div class="clearer"></div>
|
156 |
+
</div>
|
157 |
+
<div class="footer">
|
158 |
+
|
159 |
+
|
160 |
+
|
161 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
162 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
163 |
+
|
164 |
+
|
|
165 |
+
<a href="_sources/index.rst.txt"
|
166 |
+
rel="nofollow">Page source</a>
|
167 |
+
</div>
|
168 |
+
|
169 |
+
|
170 |
+
|
171 |
+
|
172 |
+
</body>
|
173 |
+
</html>
|
docs/build/html/objects.inv
ADDED
Binary file (551 Bytes). View file
|
|
docs/build/html/py-modindex.html
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7 |
+
<title>Python Module Index — AIM-CU 1.0.0 documentation</title>
|
8 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
11 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
12 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
13 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
14 |
+
<link rel="index" title="Index" href="genindex.html" />
|
15 |
+
<link rel="search" title="Search" href="search.html" />
|
16 |
+
|
17 |
+
|
18 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
19 |
+
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
|
26 |
+
</head><body>
|
27 |
+
|
28 |
+
|
29 |
+
<div class="document">
|
30 |
+
<div class="documentwrapper">
|
31 |
+
<div class="bodywrapper">
|
32 |
+
|
33 |
+
|
34 |
+
<div class="body" role="main">
|
35 |
+
|
36 |
+
|
37 |
+
<h1>Python Module Index</h1>
|
38 |
+
|
39 |
+
<div class="modindex-jumpbox">
|
40 |
+
<a href="#cap-p"><strong>p</strong></a>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<table class="indextable modindextable">
|
44 |
+
<tr class="pcap"><td></td><td> </td><td></td></tr>
|
45 |
+
<tr class="cap" id="cap-p"><td></td><td>
|
46 |
+
<strong>p</strong></td><td></td></tr>
|
47 |
+
<tr>
|
48 |
+
<td><img src="_static/minus.png" class="toggler"
|
49 |
+
id="toggle-1" style="display: none" alt="-" /></td>
|
50 |
+
<td>
|
51 |
+
<code class="xref">package</code></td><td>
|
52 |
+
<em></em></td></tr>
|
53 |
+
<tr class="cg-1">
|
54 |
+
<td></td>
|
55 |
+
<td>   
|
56 |
+
<a href="ref_theoretical.html#module-package.ARLTheoretical"><code class="xref">package.ARLTheoretical</code></a></td><td>
|
57 |
+
<em></em></td></tr>
|
58 |
+
<tr class="cg-1">
|
59 |
+
<td></td>
|
60 |
+
<td>   
|
61 |
+
<a href="ref_cusum.html#module-package.cusum"><code class="xref">package.cusum</code></a></td><td>
|
62 |
+
<em></em></td></tr>
|
63 |
+
<tr class="cg-1">
|
64 |
+
<td></td>
|
65 |
+
<td>   
|
66 |
+
<a href="ref_utils.html#module-package.utils"><code class="xref">package.utils</code></a></td><td>
|
67 |
+
<em></em></td></tr>
|
68 |
+
</table>
|
69 |
+
|
70 |
+
|
71 |
+
</div>
|
72 |
+
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
76 |
+
<div class="sphinxsidebarwrapper">
|
77 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
78 |
+
|
79 |
+
|
80 |
+
|
81 |
+
|
82 |
+
|
83 |
+
|
84 |
+
<p>
|
85 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
86 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
87 |
+
</p>
|
88 |
+
|
89 |
+
|
90 |
+
|
91 |
+
|
92 |
+
|
93 |
+
|
94 |
+
<search id="searchbox" style="display: none" role="search">
|
95 |
+
<div class="searchformwrapper">
|
96 |
+
<form class="search" action="search.html" method="get">
|
97 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
98 |
+
<input type="submit" value="Go" />
|
99 |
+
</form>
|
100 |
+
</div>
|
101 |
+
</search>
|
102 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
103 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
104 |
+
<ul>
|
105 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
106 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
107 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
108 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
109 |
+
</ul>
|
110 |
+
|
111 |
+
<div class="relations">
|
112 |
+
<h3>Related Topics</h3>
|
113 |
+
<ul>
|
114 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
115 |
+
</ul></li>
|
116 |
+
</ul>
|
117 |
+
</div>
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
|
123 |
+
|
124 |
+
|
125 |
+
|
126 |
+
</div>
|
127 |
+
</div>
|
128 |
+
<div class="clearer"></div>
|
129 |
+
</div>
|
130 |
+
<div class="footer">
|
131 |
+
|
132 |
+
|
133 |
+
|
134 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
135 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
136 |
+
|
137 |
+
</div>
|
138 |
+
|
139 |
+
|
140 |
+
|
141 |
+
|
142 |
+
</body>
|
143 |
+
</html>
|
docs/build/html/ref_cusum.html
ADDED
@@ -0,0 +1,252 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
|
8 |
+
<title>CUSUM — AIM-CU 1.0.0 documentation</title>
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
11 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<link rel="index" title="Index" href="genindex.html" />
|
16 |
+
<link rel="search" title="Search" href="search.html" />
|
17 |
+
<link rel="next" title="ARLTheoretical" href="ref_theoretical.html" />
|
18 |
+
<link rel="prev" title="Methods" href="ref_method.html" />
|
19 |
+
|
20 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
|
26 |
+
</head><body>
|
27 |
+
|
28 |
+
|
29 |
+
<div class="document">
|
30 |
+
<div class="documentwrapper">
|
31 |
+
<div class="bodywrapper">
|
32 |
+
|
33 |
+
|
34 |
+
<div class="body" role="main">
|
35 |
+
|
36 |
+
<section id="module-package.cusum">
|
37 |
+
<span id="cusum"></span><h1>CUSUM<a class="headerlink" href="#module-package.cusum" title="Link to this heading">¶</a></h1>
|
38 |
+
<p>Cumulative Sum (CUSUM)</p>
|
39 |
+
<p>@author: smriti.prathapan</p>
|
40 |
+
<dl class="py class">
|
41 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM">
|
42 |
+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">package.cusum.</span></span><span class="sig-name descname"><span class="pre">CUSUM</span></span><a class="headerlink" href="#package.cusum.CUSUM" title="Link to this definition">¶</a></dt>
|
43 |
+
<dd><p>CUSUM class and its functionalities.</p>
|
44 |
+
<dl class="py method">
|
45 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.change_detection">
|
46 |
+
<span class="sig-name descname"><span class="pre">change_detection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">normalized_ref_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</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">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">normalized_threshold</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</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">4</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.change_detection" title="Link to this definition">¶</a></dt>
|
47 |
+
<dd><p>Detects a change in the process.</p>
|
48 |
+
<dl class="field-list simple">
|
49 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
50 |
+
<dd class="field-odd"><ul class="simple">
|
51 |
+
<li><p><strong>pre_change_days</strong> (<em>int</em>) – Number of days for in-control phase.</p></li>
|
52 |
+
<li><p><strong>normalized_ref_value</strong> (<em>float</em><em>, </em><em>optional</em>) – Normalized reference value for detecting a unit standard deviation change in mean of the process. Defaults to 0.5.</p></li>
|
53 |
+
<li><p><strong>normalized_threshold</strong> (<em>float</em><em>, </em><em>optional</em>) – Normalized threshold. Defaults to 4.</p></li>
|
54 |
+
</ul>
|
55 |
+
</dd>
|
56 |
+
</dl>
|
57 |
+
</dd></dl>
|
58 |
+
|
59 |
+
<dl class="py method">
|
60 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.compute_cusum">
|
61 |
+
<span class="sig-name descname"><span class="pre">compute_cusum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mu_0</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">]</span></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">float</span><span class="p"><span class="pre">]</span></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">float</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#package.cusum.CUSUM.compute_cusum" title="Link to this definition">¶</a></dt>
|
62 |
+
<dd><p>Compute CUSUM for the observations in x</p>
|
63 |
+
<dl class="field-list simple">
|
64 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
65 |
+
<dd class="field-odd"><ul class="simple">
|
66 |
+
<li><p><strong>x</strong> (<em>list</em><em>[</em><em>float</em><em>]</em>) – Performance metric to be monitored</p></li>
|
67 |
+
<li><p><strong>mu_0</strong> (<em>float</em>) – In-control mean of the observations/performance metric</p></li>
|
68 |
+
<li><p><strong>k</strong> (<em>float</em>) – Reference value related to the magnitude of change that one is interested in detecting</p></li>
|
69 |
+
</ul>
|
70 |
+
</dd>
|
71 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
72 |
+
<dd class="field-even"><p>Positive cumulative sum, negative cumulative sum, and CUSUM</p>
|
73 |
+
</dd>
|
74 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
75 |
+
<dd class="field-odd"><p>tuple[list[float], list[float], list[float]]</p>
|
76 |
+
</dd>
|
77 |
+
</dl>
|
78 |
+
</dd></dl>
|
79 |
+
|
80 |
+
<dl class="py method">
|
81 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.initialize">
|
82 |
+
<span class="sig-name descname"><span class="pre">initialize</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.initialize" title="Link to this definition">¶</a></dt>
|
83 |
+
<dd><p>Initialize with the configuration file.</p>
|
84 |
+
</dd></dl>
|
85 |
+
|
86 |
+
<dl class="py method">
|
87 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.plot_cusum_plotly">
|
88 |
+
<span class="sig-name descname"><span class="pre">plot_cusum_plotly</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Figure</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.plot_cusum_plotly" title="Link to this definition">¶</a></dt>
|
89 |
+
<dd><p>Plot CUSUM value using Plotly</p>
|
90 |
+
<dl class="field-list simple">
|
91 |
+
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
92 |
+
<dd class="field-odd"><p>CUSUM plot using Plotly graph object.</p>
|
93 |
+
</dd>
|
94 |
+
<dt class="field-even">Return type<span class="colon">:</span></dt>
|
95 |
+
<dd class="field-even"><p>go.Figure</p>
|
96 |
+
</dd>
|
97 |
+
</dl>
|
98 |
+
</dd></dl>
|
99 |
+
|
100 |
+
<dl class="py method">
|
101 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.plot_input_metric_plotly">
|
102 |
+
<span class="sig-name descname"><span class="pre">plot_input_metric_plotly</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Figure</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.plot_input_metric_plotly" title="Link to this definition">¶</a></dt>
|
103 |
+
<dd><p>Plot the input metric using Plotly.</p>
|
104 |
+
<dl class="field-list simple">
|
105 |
+
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
106 |
+
<dd class="field-odd"><p>Scatter plot as Plotly graph object.</p>
|
107 |
+
</dd>
|
108 |
+
<dt class="field-even">Return type<span class="colon">:</span></dt>
|
109 |
+
<dd class="field-even"><p>go.Figure</p>
|
110 |
+
</dd>
|
111 |
+
</dl>
|
112 |
+
</dd></dl>
|
113 |
+
|
114 |
+
<dl class="py method">
|
115 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.plot_input_metric_plotly_raw">
|
116 |
+
<span class="sig-name descname"><span class="pre">plot_input_metric_plotly_raw</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Figure</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.plot_input_metric_plotly_raw" title="Link to this definition">¶</a></dt>
|
117 |
+
<dd><p>Plot AI output using Plotly.</p>
|
118 |
+
<dl class="field-list simple">
|
119 |
+
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
120 |
+
<dd class="field-odd"><p>Scatter plot as Plotly graph object.</p>
|
121 |
+
</dd>
|
122 |
+
<dt class="field-even">Return type<span class="colon">:</span></dt>
|
123 |
+
<dd class="field-even"><p>go.Figure</p>
|
124 |
+
</dd>
|
125 |
+
</dl>
|
126 |
+
</dd></dl>
|
127 |
+
|
128 |
+
<dl class="py method">
|
129 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.set_df_metric_csv">
|
130 |
+
<span class="sig-name descname"><span class="pre">set_df_metric_csv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data_csv</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.set_df_metric_csv" title="Link to this definition">¶</a></dt>
|
131 |
+
<dd><p>Assign the performance metric data to be used for CUSUM.</p>
|
132 |
+
<dl class="field-list simple">
|
133 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
134 |
+
<dd class="field-odd"><p><strong>data_csv</strong> (<em>DataFrame</em><em> or </em><em>TextFileReader</em>) – A comma-separated values (csv) file is returned as two-dimensional data structure with labeled axes.</p>
|
135 |
+
</dd>
|
136 |
+
</dl>
|
137 |
+
</dd></dl>
|
138 |
+
|
139 |
+
<dl class="py method">
|
140 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.set_df_metric_default">
|
141 |
+
<span class="sig-name descname"><span class="pre">set_df_metric_default</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.set_df_metric_default" title="Link to this definition">¶</a></dt>
|
142 |
+
<dd><p>Read the provided performance metric data to be used for CUSUM for an example.</p>
|
143 |
+
</dd></dl>
|
144 |
+
|
145 |
+
<dl class="py method">
|
146 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.set_init_stats">
|
147 |
+
<span class="sig-name descname"><span class="pre">set_init_stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">init_days</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.set_init_stats" title="Link to this definition">¶</a></dt>
|
148 |
+
<dd><p>Use initial days to calculate in-control mean and standard deviation.</p>
|
149 |
+
<dl class="field-list simple">
|
150 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
151 |
+
<dd class="field-odd"><p><strong>init_days</strong> (<em>int</em><em>, </em><em>optional</em>) – Initial days when observations are considered stable. Defaults to 30.</p>
|
152 |
+
</dd>
|
153 |
+
</dl>
|
154 |
+
</dd></dl>
|
155 |
+
|
156 |
+
<dl class="py method">
|
157 |
+
<dt class="sig sig-object py" id="package.cusum.CUSUM.set_timeline">
|
158 |
+
<span class="sig-name descname"><span class="pre">set_timeline</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#package.cusum.CUSUM.set_timeline" title="Link to this definition">¶</a></dt>
|
159 |
+
<dd><p>Set the timeline of observations.</p>
|
160 |
+
<dl class="field-list simple">
|
161 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
162 |
+
<dd class="field-odd"><p><strong>data</strong> (<em>np.ndarray</em>) – Data of the metric values across the observations.</p>
|
163 |
+
</dd>
|
164 |
+
</dl>
|
165 |
+
</dd></dl>
|
166 |
+
|
167 |
+
</dd></dl>
|
168 |
+
|
169 |
+
</section>
|
170 |
+
|
171 |
+
|
172 |
+
</div>
|
173 |
+
|
174 |
+
</div>
|
175 |
+
</div>
|
176 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
177 |
+
<div class="sphinxsidebarwrapper">
|
178 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
179 |
+
|
180 |
+
|
181 |
+
|
182 |
+
|
183 |
+
|
184 |
+
|
185 |
+
<p>
|
186 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
187 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
188 |
+
</p>
|
189 |
+
|
190 |
+
|
191 |
+
|
192 |
+
|
193 |
+
|
194 |
+
|
195 |
+
<search id="searchbox" style="display: none" role="search">
|
196 |
+
<div class="searchformwrapper">
|
197 |
+
<form class="search" action="search.html" method="get">
|
198 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
199 |
+
<input type="submit" value="Go" />
|
200 |
+
</form>
|
201 |
+
</div>
|
202 |
+
</search>
|
203 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
204 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
205 |
+
<ul class="current">
|
206 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
207 |
+
<li class="toctree-l1 current"><a class="current reference internal" href="#">CUSUM</a><ul>
|
208 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.cusum.CUSUM"><code class="docutils literal notranslate"><span class="pre">CUSUM</span></code></a></li>
|
209 |
+
</ul>
|
210 |
+
</li>
|
211 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
212 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
213 |
+
</ul>
|
214 |
+
|
215 |
+
<div class="relations">
|
216 |
+
<h3>Related Topics</h3>
|
217 |
+
<ul>
|
218 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
219 |
+
<li>Previous: <a href="ref_method.html" title="previous chapter">Methods</a></li>
|
220 |
+
<li>Next: <a href="ref_theoretical.html" title="next chapter">ARLTheoretical</a></li>
|
221 |
+
</ul></li>
|
222 |
+
</ul>
|
223 |
+
</div>
|
224 |
+
|
225 |
+
|
226 |
+
|
227 |
+
|
228 |
+
|
229 |
+
|
230 |
+
|
231 |
+
|
232 |
+
</div>
|
233 |
+
</div>
|
234 |
+
<div class="clearer"></div>
|
235 |
+
</div>
|
236 |
+
<div class="footer">
|
237 |
+
|
238 |
+
|
239 |
+
|
240 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
241 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
242 |
+
|
243 |
+
|
|
244 |
+
<a href="_sources/ref_cusum.rst.txt"
|
245 |
+
rel="nofollow">Page source</a>
|
246 |
+
</div>
|
247 |
+
|
248 |
+
|
249 |
+
|
250 |
+
|
251 |
+
</body>
|
252 |
+
</html>
|
docs/build/html/ref_method.html
ADDED
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
|
8 |
+
<title>Methods — AIM-CU 1.0.0 documentation</title>
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
11 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
16 |
+
<link rel="index" title="Index" href="genindex.html" />
|
17 |
+
<link rel="search" title="Search" href="search.html" />
|
18 |
+
<link rel="next" title="CUSUM" href="ref_cusum.html" />
|
19 |
+
<link rel="prev" title="AIM-CU documentation" href="index.html" />
|
20 |
+
|
21 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
|
26 |
+
|
27 |
+
</head><body>
|
28 |
+
|
29 |
+
|
30 |
+
<div class="document">
|
31 |
+
<div class="documentwrapper">
|
32 |
+
<div class="bodywrapper">
|
33 |
+
|
34 |
+
|
35 |
+
<div class="body" role="main">
|
36 |
+
|
37 |
+
<section id="methods">
|
38 |
+
<h1>Methods<a class="headerlink" href="#methods" title="Link to this heading">¶</a></h1>
|
39 |
+
<section id="cusum-parameters">
|
40 |
+
<h2>CUSUM parameters<a class="headerlink" href="#cusum-parameters" title="Link to this heading">¶</a></h2>
|
41 |
+
<table class="docutils align-default" id="id1">
|
42 |
+
<caption><span class="caption-text">CUSUM parameters</span><a class="headerlink" href="#id1" title="Link to this table">¶</a></caption>
|
43 |
+
<thead>
|
44 |
+
<tr class="row-odd"><th class="head"><p>Parameter</p></th>
|
45 |
+
<th class="head"><p>Description</p></th>
|
46 |
+
</tr>
|
47 |
+
</thead>
|
48 |
+
<tbody>
|
49 |
+
<tr class="row-even"><td><p>μ_in</p></td>
|
50 |
+
<td><p>The mean of the performance metric when the process is in-control, i.e., when there is no performance drift</p></td>
|
51 |
+
</tr>
|
52 |
+
<tr class="row-odd"><td><p>ARL_0</p></td>
|
53 |
+
<td><p>Number of observations before the control chart signals a false detection</p></td>
|
54 |
+
</tr>
|
55 |
+
<tr class="row-even"><td><p>σ_in</p></td>
|
56 |
+
<td><p>The in-control standard deviation of the metric</p></td>
|
57 |
+
</tr>
|
58 |
+
<tr class="row-odd"><td><p>ARL_1</p></td>
|
59 |
+
<td><p>Number of observations before the control chart signals a true detection</p></td>
|
60 |
+
</tr>
|
61 |
+
<tr class="row-even"><td><p>k</p></td>
|
62 |
+
<td><p>The normalized reference value, which is related to the magnitude of change that one is interested in detecting. k = 0.5 is the default choice for detecting a unit standard deviation change</p></td>
|
63 |
+
</tr>
|
64 |
+
<tr class="row-odd"><td><p>S_hi</p></td>
|
65 |
+
<td><p>Cumulative sum of positive changes in the metric</p></td>
|
66 |
+
</tr>
|
67 |
+
<tr class="row-even"><td><p>h</p></td>
|
68 |
+
<td><p>The normalized threshold or control limit (default =4). This threshold determines when the control chart signals a detection</p></td>
|
69 |
+
</tr>
|
70 |
+
<tr class="row-odd"><td><p>S_lo</p></td>
|
71 |
+
<td><p>Cumulative sum of negative changes in the metric</p></td>
|
72 |
+
</tr>
|
73 |
+
</tbody>
|
74 |
+
</table>
|
75 |
+
</section>
|
76 |
+
<section id="cusum-chart">
|
77 |
+
<h2>CUSUM chart<a class="headerlink" href="#cusum-chart" title="Link to this heading">¶</a></h2>
|
78 |
+
<p>A two-sided CUSUM control chart computes the cumulative differences or
|
79 |
+
deviations of individual observations from the target mean (or
|
80 |
+
in-control mean, <span class="math notranslate nohighlight">\(\mu_{in}\)</span>). The positive and negative cumulative
|
81 |
+
sums are calculated:</p>
|
82 |
+
<div class="math notranslate nohighlight">
|
83 |
+
\[\begin{split}\\ S_{hi}(d) = max(0, S_{hi}(d-1) + x_d - \hat{\mu}_{in} - K)
|
84 |
+
\\ S_{lo}(d) = max(0, S_{lo}(d-1) - x_d + \hat{\mu}_{in} - K)\end{split}\]</div>
|
85 |
+
<p>where <em>d</em> denotes a unit of time, <span class="math notranslate nohighlight">\(x_d\)</span> is the value of quantity
|
86 |
+
being monitored at time <span class="math notranslate nohighlight">\(d\)</span>, <span class="math notranslate nohighlight">\(\hat{\mu}_{in}\)</span> is the
|
87 |
+
in-control mean of <span class="math notranslate nohighlight">\(x_d\)</span>, and <span class="math notranslate nohighlight">\(K\)</span> is a “reference value”
|
88 |
+
related to the magnitude of change that one is interested in detecting.
|
89 |
+
<span class="math notranslate nohighlight">\(S_{hi}\)</span> and <span class="math notranslate nohighlight">\(S_{lo}\)</span> are the cumulative sum of positive and
|
90 |
+
negative changes. To detect a change in the observed values from the
|
91 |
+
in-control mean, the CUSUM scheme accumulates deviations that are
|
92 |
+
<span class="math notranslate nohighlight">\(K\)</span> units away from the in-control mean. Let <span class="math notranslate nohighlight">\(\sigma_{in}\)</span>
|
93 |
+
denote the in-control standard deviation of <span class="math notranslate nohighlight">\(x_d\)</span>.</p>
|
94 |
+
</section>
|
95 |
+
</section>
|
96 |
+
|
97 |
+
|
98 |
+
</div>
|
99 |
+
|
100 |
+
</div>
|
101 |
+
</div>
|
102 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
103 |
+
<div class="sphinxsidebarwrapper">
|
104 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
105 |
+
|
106 |
+
|
107 |
+
|
108 |
+
|
109 |
+
|
110 |
+
|
111 |
+
<p>
|
112 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
113 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
114 |
+
</p>
|
115 |
+
|
116 |
+
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
<search id="searchbox" style="display: none" role="search">
|
122 |
+
<div class="searchformwrapper">
|
123 |
+
<form class="search" action="search.html" method="get">
|
124 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
125 |
+
<input type="submit" value="Go" />
|
126 |
+
</form>
|
127 |
+
</div>
|
128 |
+
</search>
|
129 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
130 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
131 |
+
<ul class="current">
|
132 |
+
<li class="toctree-l1 current"><a class="current reference internal" href="#">Methods</a><ul>
|
133 |
+
<li class="toctree-l2"><a class="reference internal" href="#cusum-parameters">CUSUM parameters</a></li>
|
134 |
+
<li class="toctree-l2"><a class="reference internal" href="#cusum-chart">CUSUM chart</a></li>
|
135 |
+
</ul>
|
136 |
+
</li>
|
137 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
138 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
139 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
140 |
+
</ul>
|
141 |
+
|
142 |
+
<div class="relations">
|
143 |
+
<h3>Related Topics</h3>
|
144 |
+
<ul>
|
145 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
146 |
+
<li>Previous: <a href="index.html" title="previous chapter">AIM-CU documentation</a></li>
|
147 |
+
<li>Next: <a href="ref_cusum.html" title="next chapter">CUSUM</a></li>
|
148 |
+
</ul></li>
|
149 |
+
</ul>
|
150 |
+
</div>
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
|
155 |
+
|
156 |
+
|
157 |
+
|
158 |
+
|
159 |
+
</div>
|
160 |
+
</div>
|
161 |
+
<div class="clearer"></div>
|
162 |
+
</div>
|
163 |
+
<div class="footer">
|
164 |
+
|
165 |
+
|
166 |
+
|
167 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
168 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
169 |
+
|
170 |
+
|
|
171 |
+
<a href="_sources/ref_method.rst.txt"
|
172 |
+
rel="nofollow">Page source</a>
|
173 |
+
</div>
|
174 |
+
|
175 |
+
|
176 |
+
|
177 |
+
|
178 |
+
</body>
|
179 |
+
</html>
|
docs/build/html/ref_theoretical.html
ADDED
@@ -0,0 +1,208 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
|
8 |
+
<title>ARLTheoretical — AIM-CU 1.0.0 documentation</title>
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
11 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<link rel="index" title="Index" href="genindex.html" />
|
16 |
+
<link rel="search" title="Search" href="search.html" />
|
17 |
+
<link rel="next" title="Utils" href="ref_utils.html" />
|
18 |
+
<link rel="prev" title="CUSUM" href="ref_cusum.html" />
|
19 |
+
|
20 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
|
26 |
+
</head><body>
|
27 |
+
|
28 |
+
|
29 |
+
<div class="document">
|
30 |
+
<div class="documentwrapper">
|
31 |
+
<div class="bodywrapper">
|
32 |
+
|
33 |
+
|
34 |
+
<div class="body" role="main">
|
35 |
+
|
36 |
+
<section id="module-package.ARLTheoretical">
|
37 |
+
<span id="arltheoretical"></span><h1>ARLTheoretical<a class="headerlink" href="#module-package.ARLTheoretical" title="Link to this heading">¶</a></h1>
|
38 |
+
<p>ARLTheoretical</p>
|
39 |
+
<p>@author: smriti.prathapan</p>
|
40 |
+
<dl class="py function">
|
41 |
+
<dt class="sig sig-object py" id="package.ARLTheoretical.get_ARL_1">
|
42 |
+
<span class="sig-prename descclassname"><span class="pre">package.ARLTheoretical.</span></span><span class="sig-name descname"><span class="pre">get_ARL_1</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">h</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shift_in_mean</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_ARL0_k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OrderedDict</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">DataFrame</span></span></span><a class="headerlink" href="#package.ARLTheoretical.get_ARL_1" title="Link to this definition">¶</a></dt>
|
43 |
+
<dd><p>Get the ARL1 along with k values.</p>
|
44 |
+
<dl class="field-list simple">
|
45 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
46 |
+
<dd class="field-odd"><ul class="simple">
|
47 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
48 |
+
<li><p><strong>shift_in_mean</strong> (<em>list</em><em>[</em><em>float</em><em>]</em>) – List of the values of shift in mean.</p></li>
|
49 |
+
<li><p><strong>dict_ARL0_k</strong> (<em>OrderedDict</em>) – Data dictionary of ARL0 and k</p></li>
|
50 |
+
</ul>
|
51 |
+
</dd>
|
52 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
53 |
+
<dd class="field-even"><p>Table for ARL1 and k values.</p>
|
54 |
+
</dd>
|
55 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
56 |
+
<dd class="field-odd"><p>pd.DataFrame</p>
|
57 |
+
</dd>
|
58 |
+
</dl>
|
59 |
+
</dd></dl>
|
60 |
+
|
61 |
+
<dl class="py function">
|
62 |
+
<dt class="sig sig-object py" id="package.ARLTheoretical.get_ARL_1_h_mu1_k">
|
63 |
+
<span class="sig-prename descclassname"><span class="pre">package.ARLTheoretical.</span></span><span class="sig-name descname"><span class="pre">get_ARL_1_h_mu1_k</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">h</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mu1</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#package.ARLTheoretical.get_ARL_1_h_mu1_k" title="Link to this definition">¶</a></dt>
|
64 |
+
<dd><p>Calculate ARL_1 with given Shift in Mean (mu1) and k.</p>
|
65 |
+
<dl class="field-list simple">
|
66 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
67 |
+
<dd class="field-odd"><ul class="simple">
|
68 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
69 |
+
<li><p><strong>k</strong> (<em>float</em>) – Normalized reference value.</p></li>
|
70 |
+
<li><p><strong>mu1</strong> (<em>float</em>) – Intended shift in mean.</p></li>
|
71 |
+
</ul>
|
72 |
+
</dd>
|
73 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
74 |
+
<dd class="field-even"><p>Detection delay (ARL1).</p>
|
75 |
+
</dd>
|
76 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
77 |
+
<dd class="field-odd"><p>float</p>
|
78 |
+
</dd>
|
79 |
+
</dl>
|
80 |
+
</dd></dl>
|
81 |
+
|
82 |
+
<dl class="py function">
|
83 |
+
<dt class="sig sig-object py" id="package.ARLTheoretical.get_ref_value">
|
84 |
+
<span class="sig-prename descclassname"><span class="pre">package.ARLTheoretical.</span></span><span class="sig-name descname"><span class="pre">get_ref_value</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">h</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">list_ARL_0</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">DataFrame</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">OrderedDict</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#package.ARLTheoretical.get_ref_value" title="Link to this definition">¶</a></dt>
|
85 |
+
<dd><p>provides normalized reference values k for provided list of ARL0, given the value of normalized threshold h.</p>
|
86 |
+
<dl class="field-list simple">
|
87 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
88 |
+
<dd class="field-odd"><ul class="simple">
|
89 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
90 |
+
<li><p><strong>list_ARL_0</strong> (<em>list</em>) – List of ARL0 values.</p></li>
|
91 |
+
</ul>
|
92 |
+
</dd>
|
93 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
94 |
+
<dd class="field-even"><p>Dataframe of ARL0 and k, Data dictionary of ARL0 and k; where k is normalized reference value.</p>
|
95 |
+
</dd>
|
96 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
97 |
+
<dd class="field-odd"><p>tuple[pd.Dataframe, OrderedDict]</p>
|
98 |
+
</dd>
|
99 |
+
</dl>
|
100 |
+
</dd></dl>
|
101 |
+
|
102 |
+
<dl class="py function">
|
103 |
+
<dt class="sig sig-object py" id="package.ARLTheoretical.get_ref_value_k">
|
104 |
+
<span class="sig-prename descclassname"><span class="pre">package.ARLTheoretical.</span></span><span class="sig-name descname"><span class="pre">get_ref_value_k</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">h</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ARL_0</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#package.ARLTheoretical.get_ref_value_k" title="Link to this definition">¶</a></dt>
|
105 |
+
<dd><p>Calculation for the reference value for given h and ARL_0.</p>
|
106 |
+
<dl class="field-list simple">
|
107 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
108 |
+
<dd class="field-odd"><ul class="simple">
|
109 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
110 |
+
<li><p><strong>ARL_0</strong> (<em>float</em>) – ARL0 value.</p></li>
|
111 |
+
</ul>
|
112 |
+
</dd>
|
113 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
114 |
+
<dd class="field-even"><p>Normalized reference value k.</p>
|
115 |
+
</dd>
|
116 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
117 |
+
<dd class="field-odd"><p>float</p>
|
118 |
+
</dd>
|
119 |
+
</dl>
|
120 |
+
</dd></dl>
|
121 |
+
|
122 |
+
</section>
|
123 |
+
|
124 |
+
|
125 |
+
</div>
|
126 |
+
|
127 |
+
</div>
|
128 |
+
</div>
|
129 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
130 |
+
<div class="sphinxsidebarwrapper">
|
131 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
132 |
+
|
133 |
+
|
134 |
+
|
135 |
+
|
136 |
+
|
137 |
+
|
138 |
+
<p>
|
139 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
140 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
141 |
+
</p>
|
142 |
+
|
143 |
+
|
144 |
+
|
145 |
+
|
146 |
+
|
147 |
+
|
148 |
+
<search id="searchbox" style="display: none" role="search">
|
149 |
+
<div class="searchformwrapper">
|
150 |
+
<form class="search" action="search.html" method="get">
|
151 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
152 |
+
<input type="submit" value="Go" />
|
153 |
+
</form>
|
154 |
+
</div>
|
155 |
+
</search>
|
156 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
157 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
158 |
+
<ul class="current">
|
159 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
160 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
161 |
+
<li class="toctree-l1 current"><a class="current reference internal" href="#">ARLTheoretical</a><ul>
|
162 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.ARLTheoretical.get_ARL_1"><code class="docutils literal notranslate"><span class="pre">get_ARL_1()</span></code></a></li>
|
163 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.ARLTheoretical.get_ARL_1_h_mu1_k"><code class="docutils literal notranslate"><span class="pre">get_ARL_1_h_mu1_k()</span></code></a></li>
|
164 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.ARLTheoretical.get_ref_value"><code class="docutils literal notranslate"><span class="pre">get_ref_value()</span></code></a></li>
|
165 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.ARLTheoretical.get_ref_value_k"><code class="docutils literal notranslate"><span class="pre">get_ref_value_k()</span></code></a></li>
|
166 |
+
</ul>
|
167 |
+
</li>
|
168 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
169 |
+
</ul>
|
170 |
+
|
171 |
+
<div class="relations">
|
172 |
+
<h3>Related Topics</h3>
|
173 |
+
<ul>
|
174 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
175 |
+
<li>Previous: <a href="ref_cusum.html" title="previous chapter">CUSUM</a></li>
|
176 |
+
<li>Next: <a href="ref_utils.html" title="next chapter">Utils</a></li>
|
177 |
+
</ul></li>
|
178 |
+
</ul>
|
179 |
+
</div>
|
180 |
+
|
181 |
+
|
182 |
+
|
183 |
+
|
184 |
+
|
185 |
+
|
186 |
+
|
187 |
+
|
188 |
+
</div>
|
189 |
+
</div>
|
190 |
+
<div class="clearer"></div>
|
191 |
+
</div>
|
192 |
+
<div class="footer">
|
193 |
+
|
194 |
+
|
195 |
+
|
196 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
197 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
198 |
+
|
199 |
+
|
|
200 |
+
<a href="_sources/ref_theoretical.rst.txt"
|
201 |
+
rel="nofollow">Page source</a>
|
202 |
+
</div>
|
203 |
+
|
204 |
+
|
205 |
+
|
206 |
+
|
207 |
+
</body>
|
208 |
+
</html>
|
docs/build/html/ref_utils.html
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
|
8 |
+
<title>Utils — AIM-CU 1.0.0 documentation</title>
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
11 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<link rel="index" title="Index" href="genindex.html" />
|
16 |
+
<link rel="search" title="Search" href="search.html" />
|
17 |
+
<link rel="prev" title="ARLTheoretical" href="ref_theoretical.html" />
|
18 |
+
|
19 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
|
25 |
+
</head><body>
|
26 |
+
|
27 |
+
|
28 |
+
<div class="document">
|
29 |
+
<div class="documentwrapper">
|
30 |
+
<div class="bodywrapper">
|
31 |
+
|
32 |
+
|
33 |
+
<div class="body" role="main">
|
34 |
+
|
35 |
+
<section id="module-package.utils">
|
36 |
+
<span id="utils"></span><h1>Utils<a class="headerlink" href="#module-package.utils" title="Link to this heading">¶</a></h1>
|
37 |
+
<p>Utilities to handle different operations</p>
|
38 |
+
<dl class="py function">
|
39 |
+
<dt class="sig sig-object py" id="package.utils.get_greattable_as_html">
|
40 |
+
<span class="sig-prename descclassname"><span class="pre">package.utils.</span></span><span class="sig-name descname"><span class="pre">get_greattable_as_html</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">GT</span></span></span><a class="headerlink" href="#package.utils.get_greattable_as_html" title="Link to this definition">¶</a></dt>
|
41 |
+
<dd><p>Get the great_table as HTML from Pandas dataframe.</p>
|
42 |
+
<dl class="field-list simple">
|
43 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
44 |
+
<dd class="field-odd"><p><strong>df</strong> (<em>pd.DataFrame</em>) – Dataframe to rendera as a table.</p>
|
45 |
+
</dd>
|
46 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
47 |
+
<dd class="field-even"><p>Table in HTML format.</p>
|
48 |
+
</dd>
|
49 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
50 |
+
<dd class="field-odd"><p>gt.GT</p>
|
51 |
+
</dd>
|
52 |
+
</dl>
|
53 |
+
</dd></dl>
|
54 |
+
|
55 |
+
<dl class="py function">
|
56 |
+
<dt class="sig sig-object py" id="package.utils.populate_summary_table_ARL0_k">
|
57 |
+
<span class="sig-prename descclassname"><span class="pre">package.utils.</span></span><span class="sig-name descname"><span class="pre">populate_summary_table_ARL0_k</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">summary_table_df_ARL0_k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">h</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">GT</span></span></span><a class="headerlink" href="#package.utils.populate_summary_table_ARL0_k" title="Link to this definition">¶</a></dt>
|
58 |
+
<dd><p>Populate ARLTheoretical.summary_table_df_ARL0_k.</p>
|
59 |
+
<dl class="field-list simple">
|
60 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
61 |
+
<dd class="field-odd"><ul class="simple">
|
62 |
+
<li><p><strong>summary_table_df_ARL0_k</strong> (<em>pd.DataFrame</em>) – Dataframe of ARL0 and its respective values of k.</p></li>
|
63 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
64 |
+
</ul>
|
65 |
+
</dd>
|
66 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
67 |
+
<dd class="field-even"><p>Table of ARL0 and k in HTML format.</p>
|
68 |
+
</dd>
|
69 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
70 |
+
<dd class="field-odd"><p>gt.GT</p>
|
71 |
+
</dd>
|
72 |
+
</dl>
|
73 |
+
</dd></dl>
|
74 |
+
|
75 |
+
<dl class="py function">
|
76 |
+
<dt class="sig sig-object py" id="package.utils.populate_summary_table_ARL1_k">
|
77 |
+
<span class="sig-prename descclassname"><span class="pre">package.utils.</span></span><span class="sig-name descname"><span class="pre">populate_summary_table_ARL1_k</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">summary_table_df_ARL1_k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_ARL0_k</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OrderedDict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">h</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">GT</span></span></span><a class="headerlink" href="#package.utils.populate_summary_table_ARL1_k" title="Link to this definition">¶</a></dt>
|
78 |
+
<dd><p>Populate Multiindex table specific for ARLTheoretical.summary_table_df_ARL1_k</p>
|
79 |
+
<dl class="field-list simple">
|
80 |
+
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
81 |
+
<dd class="field-odd"><ul class="simple">
|
82 |
+
<li><p><strong>summary_table_df_ARL1_k</strong> (<em>pd.DataFrame</em>) – Dataframe with ARL1 and k values.</p></li>
|
83 |
+
<li><p><strong>dict_ARL0_k</strong> (<em>OrderedDict</em>) – Data Dictionary with the mapping between ARL0 and k.</p></li>
|
84 |
+
<li><p><strong>h</strong> (<em>float</em>) – Normalized threshold.</p></li>
|
85 |
+
</ul>
|
86 |
+
</dd>
|
87 |
+
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
88 |
+
<dd class="field-even"><p>Table for ARL1 and k in HTML format.</p>
|
89 |
+
</dd>
|
90 |
+
<dt class="field-odd">Return type<span class="colon">:</span></dt>
|
91 |
+
<dd class="field-odd"><p>gt.GT</p>
|
92 |
+
</dd>
|
93 |
+
</dl>
|
94 |
+
</dd></dl>
|
95 |
+
|
96 |
+
</section>
|
97 |
+
|
98 |
+
|
99 |
+
</div>
|
100 |
+
|
101 |
+
</div>
|
102 |
+
</div>
|
103 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
104 |
+
<div class="sphinxsidebarwrapper">
|
105 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
106 |
+
|
107 |
+
|
108 |
+
|
109 |
+
|
110 |
+
|
111 |
+
|
112 |
+
<p>
|
113 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
114 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
115 |
+
</p>
|
116 |
+
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
<search id="searchbox" style="display: none" role="search">
|
123 |
+
<div class="searchformwrapper">
|
124 |
+
<form class="search" action="search.html" method="get">
|
125 |
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
126 |
+
<input type="submit" value="Go" />
|
127 |
+
</form>
|
128 |
+
</div>
|
129 |
+
</search>
|
130 |
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
131 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
132 |
+
<ul class="current">
|
133 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
134 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
135 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
136 |
+
<li class="toctree-l1 current"><a class="current reference internal" href="#">Utils</a><ul>
|
137 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.utils.get_greattable_as_html"><code class="docutils literal notranslate"><span class="pre">get_greattable_as_html()</span></code></a></li>
|
138 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.utils.populate_summary_table_ARL0_k"><code class="docutils literal notranslate"><span class="pre">populate_summary_table_ARL0_k()</span></code></a></li>
|
139 |
+
<li class="toctree-l2"><a class="reference internal" href="#package.utils.populate_summary_table_ARL1_k"><code class="docutils literal notranslate"><span class="pre">populate_summary_table_ARL1_k()</span></code></a></li>
|
140 |
+
</ul>
|
141 |
+
</li>
|
142 |
+
</ul>
|
143 |
+
|
144 |
+
<div class="relations">
|
145 |
+
<h3>Related Topics</h3>
|
146 |
+
<ul>
|
147 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
148 |
+
<li>Previous: <a href="ref_theoretical.html" title="previous chapter">ARLTheoretical</a></li>
|
149 |
+
</ul></li>
|
150 |
+
</ul>
|
151 |
+
</div>
|
152 |
+
|
153 |
+
|
154 |
+
|
155 |
+
|
156 |
+
|
157 |
+
|
158 |
+
|
159 |
+
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
<div class="clearer"></div>
|
163 |
+
</div>
|
164 |
+
<div class="footer">
|
165 |
+
|
166 |
+
|
167 |
+
|
168 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
169 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
170 |
+
|
171 |
+
|
|
172 |
+
<a href="_sources/ref_utils.rst.txt"
|
173 |
+
rel="nofollow">Page source</a>
|
174 |
+
</div>
|
175 |
+
|
176 |
+
|
177 |
+
|
178 |
+
|
179 |
+
</body>
|
180 |
+
</html>
|
docs/build/html/search.html
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
|
3 |
+
<html lang="en" data-content_root="./">
|
4 |
+
<head>
|
5 |
+
<meta charset="utf-8" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7 |
+
<title>Search — AIM-CU 1.0.0 documentation</title>
|
8 |
+
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
|
9 |
+
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=d35aba6c" />
|
10 |
+
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=0ca6144b" />
|
11 |
+
|
12 |
+
<script src="_static/documentation_options.js?v=8d563738"></script>
|
13 |
+
<script src="_static/doctools.js?v=9bcbadda"></script>
|
14 |
+
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
15 |
+
<script src="_static/searchtools.js"></script>
|
16 |
+
<script src="_static/language_data.js"></script>
|
17 |
+
<link rel="index" title="Index" href="genindex.html" />
|
18 |
+
<link rel="search" title="Search" href="#" />
|
19 |
+
<script src="searchindex.js" defer="defer"></script>
|
20 |
+
<meta name="robots" content="noindex" />
|
21 |
+
|
22 |
+
|
23 |
+
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
24 |
+
|
25 |
+
|
26 |
+
|
27 |
+
|
28 |
+
|
29 |
+
|
30 |
+
</head><body>
|
31 |
+
|
32 |
+
|
33 |
+
<div class="document">
|
34 |
+
<div class="documentwrapper">
|
35 |
+
<div class="bodywrapper">
|
36 |
+
|
37 |
+
|
38 |
+
<div class="body" role="main">
|
39 |
+
|
40 |
+
<h1 id="search-documentation">Search</h1>
|
41 |
+
|
42 |
+
<noscript>
|
43 |
+
<div class="admonition warning">
|
44 |
+
<p>
|
45 |
+
Please activate JavaScript to enable the search
|
46 |
+
functionality.
|
47 |
+
</p>
|
48 |
+
</div>
|
49 |
+
</noscript>
|
50 |
+
|
51 |
+
|
52 |
+
<p>
|
53 |
+
Searching for multiple words only shows matches that contain
|
54 |
+
all words.
|
55 |
+
</p>
|
56 |
+
|
57 |
+
|
58 |
+
<form action="" method="get">
|
59 |
+
<input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
60 |
+
<input type="submit" value="search" />
|
61 |
+
<span id="search-progress" style="padding-left: 10px"></span>
|
62 |
+
</form>
|
63 |
+
|
64 |
+
|
65 |
+
<div id="search-results"></div>
|
66 |
+
|
67 |
+
|
68 |
+
</div>
|
69 |
+
|
70 |
+
</div>
|
71 |
+
</div>
|
72 |
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
73 |
+
<div class="sphinxsidebarwrapper">
|
74 |
+
<h1 class="logo"><a href="index.html">AIM-CU</a></h1>
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
|
81 |
+
<p>
|
82 |
+
<iframe src="https://ghbtns.com/github-btn.html?user=DIDSR&repo=AIM-CU&type=watch&count=true&size=large&v=2"
|
83 |
+
allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe>
|
84 |
+
</p>
|
85 |
+
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
|
90 |
+
<h3>Navigation</h3>
|
91 |
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
92 |
+
<ul>
|
93 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_method.html">Methods</a></li>
|
94 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_cusum.html">CUSUM</a></li>
|
95 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_theoretical.html">ARLTheoretical</a></li>
|
96 |
+
<li class="toctree-l1"><a class="reference internal" href="ref_utils.html">Utils</a></li>
|
97 |
+
</ul>
|
98 |
+
|
99 |
+
<div class="relations">
|
100 |
+
<h3>Related Topics</h3>
|
101 |
+
<ul>
|
102 |
+
<li><a href="index.html">Documentation overview</a><ul>
|
103 |
+
</ul></li>
|
104 |
+
</ul>
|
105 |
+
</div>
|
106 |
+
|
107 |
+
|
108 |
+
|
109 |
+
|
110 |
+
|
111 |
+
|
112 |
+
|
113 |
+
|
114 |
+
</div>
|
115 |
+
</div>
|
116 |
+
<div class="clearer"></div>
|
117 |
+
</div>
|
118 |
+
<div class="footer">
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
123 |
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
124 |
+
|
125 |
+
</div>
|
126 |
+
|
127 |
+
|
128 |
+
|
129 |
+
|
130 |
+
</body>
|
131 |
+
</html>
|
docs/build/html/searchindex.js
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
Search.setIndex({"alltitles": {"AIM-CU documentation": [[0, null]], "ARLTheoretical": [[3, null]], "CUSUM": [[1, null]], "CUSUM chart": [[2, "cusum-chart"]], "CUSUM parameters": [[2, "cusum-parameters"], [2, "id1"]], "Code execution": [[0, "code-execution"]], "Contents:": [[0, null]], "Demo": [[0, "demo"]], "Methods": [[2, null]], "Utils": [[4, null]]}, "docnames": ["index", "ref_cusum", "ref_method", "ref_theoretical", "ref_utils"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.rst", "ref_cusum.rst", "ref_method.rst", "ref_theoretical.rst", "ref_utils.rst"], "indexentries": {"change_detection() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.change_detection", false]], "compute_cusum() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.compute_cusum", false]], "cusum (class in package.cusum)": [[1, "package.cusum.CUSUM", false]], "initialize() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.initialize", false]], "module": [[1, "module-package.cusum", false]], "package.cusum": [[1, "module-package.cusum", false]], "plot_cusum_plotly() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.plot_cusum_plotly", false]], "plot_input_metric_plotly() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.plot_input_metric_plotly", false]], "plot_input_metric_plotly_raw() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.plot_input_metric_plotly_raw", false]], "set_df_metric_csv() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.set_df_metric_csv", false]], "set_df_metric_default() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.set_df_metric_default", false]], "set_init_stats() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.set_init_stats", false]], "set_timeline() (package.cusum.cusum method)": [[1, "package.cusum.CUSUM.set_timeline", false]]}, "objects": {"package": [[3, 0, 0, "-", "ARLTheoretical"], [1, 0, 0, "-", "cusum"], [4, 0, 0, "-", "utils"]], "package.ARLTheoretical": [[3, 1, 1, "", "get_ARL_1"], [3, 1, 1, "", "get_ARL_1_h_mu1_k"], [3, 1, 1, "", "get_ref_value"], [3, 1, 1, "", "get_ref_value_k"]], "package.cusum": [[1, 2, 1, "", "CUSUM"]], "package.cusum.CUSUM": [[1, 3, 1, "", "change_detection"], [1, 3, 1, "", "compute_cusum"], [1, 3, 1, "", "initialize"], [1, 3, 1, "", "plot_cusum_plotly"], [1, 3, 1, "", "plot_input_metric_plotly"], [1, 3, 1, "", "plot_input_metric_plotly_raw"], [1, 3, 1, "", "set_df_metric_csv"], [1, 3, 1, "", "set_df_metric_default"], [1, 3, 1, "", "set_init_stats"], [1, 3, 1, "", "set_timeline"]], "package.utils": [[4, 1, 1, "", "get_greattable_as_html"], [4, 1, 1, "", "populate_summary_table_ARL0_k"], [4, 1, 1, "", "populate_summary_table_ARL1_k"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "terms": {"0": [0, 1, 2], "1": 2, "10": 0, "3": 0, "30": 1, "4": [1, 2], "5": [1, 2], "7860": 0, "A": [0, 1, 2], "If": 0, "In": 1, "The": [0, 2], "To": 2, "_": 2, "accept": 0, "accumul": 2, "across": 1, "ai": [0, 1], "alarm": 0, "along": 3, "also": 0, "an": [0, 1], "app": 0, "apt": 0, "ar": [1, 2], "arl0": [3, 4], "arl1": [3, 4], "arl_0": [2, 3], "arl_1": [2, 3], "arltheoret": [0, 4], "assign": 1, "author": [1, 3], "avail": 0, "awai": 2, "ax": 1, "base": 0, "befor": 2, "being": 2, "between": 4, "button": 0, "calcul": [1, 2, 3], "can": 0, "cd": 0, "chang": [0, 1, 2], "change_detect": 1, "chart": 0, "choic": [0, 2], "class": 1, "click": 0, "clone": 0, "co": 0, "com": 0, "comma": 1, "command": 0, "comput": [0, 1, 2], "compute_cusum": 1, "configur": 1, "consid": 1, "control": [1, 2], "csv": 1, "cumul": [0, 1, 2], "cusum": 0, "d": 2, "dai": 1, "data": [1, 3, 4], "data_csv": 1, "datafram": [1, 3, 4], "default": [1, 2], "delai": [0, 3], "denot": 2, "depend": 0, "descript": 2, "detect": [0, 1, 2, 3], "determin": 2, "deviat": [1, 2], "df": 4, "dict_arl0_k": [3, 4], "dictionari": [3, 4], "didsr": 0, "differ": [2, 4], "dimension": 1, "displac": 0, "drift": 2, "e": 2, "estim": 0, "exampl": 1, "fals": [0, 2], "figur": 1, "file": 1, "float": [1, 3, 4], "follow": 0, "format": 4, "from": [0, 2, 4], "function": 1, "get": [0, 3, 4], "get_arl_1": [0, 3], "get_arl_1_h_mu1_k": [0, 3], "get_greattable_as_html": [0, 4], "get_ref_valu": [0, 3], "get_ref_value_k": [0, 3], "git": 0, "github": 0, "given": [0, 3], "go": 1, "graph": 1, "great_tabl": 4, "gt": 4, "h": [2, 3, 4], "handl": 4, "hat": 2, "hi": 2, "html": 4, "http": 0, "huggingfac": 0, "i": [0, 1, 2, 3], "individu": 2, "init_dai": 1, "initi": 1, "input": 1, "instal": 0, "int": 1, "intend": 3, "interest": [1, 2], "its": [1, 4], "k": [1, 2, 3, 4], "label": 1, "let": 2, "limit": 2, "list": [1, 3], "list_arl_0": 3, "lo": 2, "local": 0, "magnitud": [1, 2], "map": 4, "max": 2, "mean": [1, 2, 3], "method": 0, "metric": [0, 1, 2], "monitor": [0, 1, 2], "mu": 2, "mu1": 3, "mu_": 2, "mu_0": 1, "multiindex": 4, "ndarrai": 1, "neg": [1, 2], "none": 1, "normal": [1, 2, 3, 4], "normalized_ref_valu": 1, "normalized_threshold": 1, "np": 1, "number": [1, 2], "object": 1, "observ": [1, 2], "one": [1, 2], "open": 0, "oper": 4, "option": 1, "ordereddict": [3, 4], "output": 1, "packag": [1, 3, 4], "panda": 4, "paramet": [0, 1, 3, 4], "paus": 0, "pd": [3, 4], "perform": [0, 1, 2], "phase": 1, "pip": 0, "plot": 1, "plot_cusum_plotli": 1, "plot_input_metric_plotli": 1, "plot_input_metric_plotly_raw": 1, "plotli": 1, "point": 0, "popul": 4, "populate_summary_table_arl0_k": [0, 4], "populate_summary_table_arl1_k": [0, 4], "posit": [1, 2], "prathapan": [1, 3], "pre_change_dai": 1, "process": [1, 2], "provid": [1, 3], "py": 0, "python": 0, "python3": 0, "quantiti": 2, "r": 0, "rate": 0, "read": 1, "refer": [1, 2, 3], "relat": [1, 2], "rendera": 4, "repositori": 0, "requir": 0, "respect": 4, "restart": 0, "return": [1, 3, 4], "run": 0, "s_": 2, "s_hi": 2, "s_lo": 2, "scatter": 1, "scheme": 2, "separ": 1, "set": 1, "set_df_metric_csv": 1, "set_df_metric_default": 1, "set_init_stat": 1, "set_timelin": 1, "shift": 3, "shift_in_mean": 3, "side": 2, "sigma_": 2, "signal": 2, "smriti": [1, 3], "space": 0, "specif": 4, "stabl": 1, "standard": [1, 2], "statist": 0, "structur": 1, "sum": [0, 1, 2], "summary_table_df_arl0_k": 4, "summary_table_df_arl1_k": 4, "tabl": [3, 4], "target": [0, 2], "textfileread": 1, "thi": 2, "those": 0, "threshold": [1, 2, 3, 4], "through": 0, "time": 2, "timelin": 1, "tool": 0, "true": 2, "tupl": [1, 3], "two": [1, 2], "txt": 0, "type": [1, 3, 4], "unit": [1, 2], "url": 0, "us": [0, 1], "util": 0, "valu": [1, 2, 3, 4], "when": [1, 2], "where": [2, 3], "which": 2, "x": 1, "x_d": 2, "y": 0, "\u03bc_in": 2, "\u03c3_in": 2}, "titles": ["AIM-CU documentation", "CUSUM", "Methods", "ARLTheoretical", "Utils"], "titleterms": {"aim": 0, "arltheoret": 3, "chart": 2, "code": 0, "content": 0, "cu": 0, "cusum": [1, 2], "demo": 0, "document": 0, "execut": 0, "method": 2, "paramet": 2, "util": 4}})
|
docs/build/latex/LICRcyr2utf8.xdy
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
;; -*- coding: utf-8; mode: Lisp; -*-
|
2 |
+
;; style file for xindy
|
3 |
+
;; filename: LICRcyr2utf8.xdy
|
4 |
+
;; description: style file for xindy which maps back LaTeX Internal
|
5 |
+
;; Character Representation of Cyrillic to utf-8
|
6 |
+
;; usage: for use with pdflatex produced .idx files.
|
7 |
+
;; Contributed by the Sphinx team, July 2018.
|
8 |
+
(merge-rule "\IeC {\'\CYRG }" "Ѓ" :string)
|
9 |
+
(merge-rule "\IeC {\'\CYRK }" "Ќ" :string)
|
10 |
+
(merge-rule "\IeC {\'\cyrg }" "ѓ" :string)
|
11 |
+
(merge-rule "\IeC {\'\cyrk }" "ќ" :string)
|
12 |
+
(merge-rule "\IeC {\CYRA }" "А" :string)
|
13 |
+
(merge-rule "\IeC {\CYRB }" "Б" :string)
|
14 |
+
(merge-rule "\IeC {\CYRC }" "Ц" :string)
|
15 |
+
(merge-rule "\IeC {\CYRCH }" "Ч" :string)
|
16 |
+
(merge-rule "\IeC {\CYRD }" "Д" :string)
|
17 |
+
(merge-rule "\IeC {\CYRDJE }" "Ђ" :string)
|
18 |
+
(merge-rule "\IeC {\CYRDZE }" "Ѕ" :string)
|
19 |
+
(merge-rule "\IeC {\CYRDZHE }" "Џ" :string)
|
20 |
+
(merge-rule "\IeC {\CYRE }" "Е" :string)
|
21 |
+
(merge-rule "\IeC {\CYREREV }" "Э" :string)
|
22 |
+
(merge-rule "\IeC {\CYRERY }" "Ы" :string)
|
23 |
+
(merge-rule "\IeC {\CYRF }" "Ф" :string)
|
24 |
+
(merge-rule "\IeC {\CYRG }" "Г" :string)
|
25 |
+
(merge-rule "\IeC {\CYRGUP }" "Ґ" :string)
|
26 |
+
(merge-rule "\IeC {\CYRH }" "Х" :string)
|
27 |
+
(merge-rule "\IeC {\CYRHRDSN }" "Ъ" :string)
|
28 |
+
(merge-rule "\IeC {\CYRI }" "И" :string)
|
29 |
+
(merge-rule "\IeC {\CYRIE }" "Є" :string)
|
30 |
+
(merge-rule "\IeC {\CYRII }" "І" :string)
|
31 |
+
(merge-rule "\IeC {\CYRISHRT }" "Й" :string)
|
32 |
+
(merge-rule "\IeC {\CYRJE }" "Ј" :string)
|
33 |
+
(merge-rule "\IeC {\CYRK }" "К" :string)
|
34 |
+
(merge-rule "\IeC {\CYRL }" "Л" :string)
|
35 |
+
(merge-rule "\IeC {\CYRLJE }" "Љ" :string)
|
36 |
+
(merge-rule "\IeC {\CYRM }" "М" :string)
|
37 |
+
(merge-rule "\IeC {\CYRN }" "Н" :string)
|
38 |
+
(merge-rule "\IeC {\CYRNJE }" "Њ" :string)
|
39 |
+
(merge-rule "\IeC {\CYRO }" "О" :string)
|
40 |
+
(merge-rule "\IeC {\CYRP }" "П" :string)
|
41 |
+
(merge-rule "\IeC {\CYRR }" "Р" :string)
|
42 |
+
(merge-rule "\IeC {\CYRS }" "С" :string)
|
43 |
+
(merge-rule "\IeC {\CYRSFTSN }" "Ь" :string)
|
44 |
+
(merge-rule "\IeC {\CYRSH }" "Ш" :string)
|
45 |
+
(merge-rule "\IeC {\CYRSHCH }" "Щ" :string)
|
46 |
+
(merge-rule "\IeC {\CYRT }" "Т" :string)
|
47 |
+
(merge-rule "\IeC {\CYRTSHE }" "Ћ" :string)
|
48 |
+
(merge-rule "\IeC {\CYRU }" "У" :string)
|
49 |
+
(merge-rule "\IeC {\CYRUSHRT }" "Ў" :string)
|
50 |
+
(merge-rule "\IeC {\CYRV }" "В" :string)
|
51 |
+
(merge-rule "\IeC {\CYRYA }" "Я" :string)
|
52 |
+
(merge-rule "\IeC {\CYRYI }" "Ї" :string)
|
53 |
+
(merge-rule "\IeC {\CYRYO }" "Ё" :string)
|
54 |
+
(merge-rule "\IeC {\CYRYU }" "Ю" :string)
|
55 |
+
(merge-rule "\IeC {\CYRZ }" "З" :string)
|
56 |
+
(merge-rule "\IeC {\CYRZH }" "Ж" :string)
|
57 |
+
(merge-rule "\IeC {\cyra }" "а" :string)
|
58 |
+
(merge-rule "\IeC {\cyrb }" "б" :string)
|
59 |
+
(merge-rule "\IeC {\cyrc }" "ц" :string)
|
60 |
+
(merge-rule "\IeC {\cyrch }" "ч" :string)
|
61 |
+
(merge-rule "\IeC {\cyrd }" "д" :string)
|
62 |
+
(merge-rule "\IeC {\cyrdje }" "ђ" :string)
|
63 |
+
(merge-rule "\IeC {\cyrdze }" "ѕ" :string)
|
64 |
+
(merge-rule "\IeC {\cyrdzhe }" "џ" :string)
|
65 |
+
(merge-rule "\IeC {\cyre }" "е" :string)
|
66 |
+
(merge-rule "\IeC {\cyrerev }" "э" :string)
|
67 |
+
(merge-rule "\IeC {\cyrery }" "ы" :string)
|
68 |
+
(merge-rule "\IeC {\cyrf }" "ф" :string)
|
69 |
+
(merge-rule "\IeC {\cyrg }" "г" :string)
|
70 |
+
(merge-rule "\IeC {\cyrgup }" "ґ" :string)
|
71 |
+
(merge-rule "\IeC {\cyrh }" "х" :string)
|
72 |
+
(merge-rule "\IeC {\cyrhrdsn }" "ъ" :string)
|
73 |
+
(merge-rule "\IeC {\cyri }" "и" :string)
|
74 |
+
(merge-rule "\IeC {\cyrie }" "є" :string)
|
75 |
+
(merge-rule "\IeC {\cyrii }" "і" :string)
|
76 |
+
(merge-rule "\IeC {\cyrishrt }" "й" :string)
|
77 |
+
(merge-rule "\IeC {\cyrje }" "ј" :string)
|
78 |
+
(merge-rule "\IeC {\cyrk }" "к" :string)
|
79 |
+
(merge-rule "\IeC {\cyrl }" "л" :string)
|
80 |
+
(merge-rule "\IeC {\cyrlje }" "љ" :string)
|
81 |
+
(merge-rule "\IeC {\cyrm }" "м" :string)
|
82 |
+
(merge-rule "\IeC {\cyrn }" "н" :string)
|
83 |
+
(merge-rule "\IeC {\cyrnje }" "њ" :string)
|
84 |
+
(merge-rule "\IeC {\cyro }" "о" :string)
|
85 |
+
(merge-rule "\IeC {\cyrp }" "п" :string)
|
86 |
+
(merge-rule "\IeC {\cyrr }" "р" :string)
|
87 |
+
(merge-rule "\IeC {\cyrs }" "с" :string)
|
88 |
+
(merge-rule "\IeC {\cyrsftsn }" "ь" :string)
|
89 |
+
(merge-rule "\IeC {\cyrsh }" "ш" :string)
|
90 |
+
(merge-rule "\IeC {\cyrshch }" "щ" :string)
|
91 |
+
(merge-rule "\IeC {\cyrt }" "т" :string)
|
92 |
+
(merge-rule "\IeC {\cyrtshe }" "ћ" :string)
|
93 |
+
(merge-rule "\IeC {\cyru }" "у" :string)
|
94 |
+
(merge-rule "\IeC {\cyrushrt }" "ў" :string)
|
95 |
+
(merge-rule "\IeC {\cyrv }" "в" :string)
|
96 |
+
(merge-rule "\IeC {\cyrya }" "я" :string)
|
97 |
+
(merge-rule "\IeC {\cyryi }" "ї" :string)
|
98 |
+
(merge-rule "\IeC {\cyryo }" "ё" :string)
|
99 |
+
(merge-rule "\IeC {\cyryu }" "ю" :string)
|
100 |
+
(merge-rule "\IeC {\cyrz }" "з" :string)
|
101 |
+
(merge-rule "\IeC {\cyrzh }" "ж" :string)
|
docs/build/latex/LICRlatin2utf8.xdy
ADDED
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
;; style file for xindy
|
2 |
+
;; filename: LICRlatin2utf8.xdy
|
3 |
+
;; description: style file for xindy which maps back LaTeX Internal
|
4 |
+
;; Character Representation of letters (as arising in .idx index
|
5 |
+
;; file) to UTF-8 encoding for correct sorting by xindy.
|
6 |
+
;; usage: for use with the pdflatex engine,
|
7 |
+
;; *not* for use with xelatex or lualatex.
|
8 |
+
;;
|
9 |
+
;; This is based upon xindy's distributed file tex/inputenc/utf8.xdy.
|
10 |
+
;; The modifications include:
|
11 |
+
;;
|
12 |
+
;; - Updates for compatibility with current LaTeX macro encoding.
|
13 |
+
;;
|
14 |
+
;; - Systematic usage of the \IeC {...} mark-up, because mark-up in
|
15 |
+
;; tex/inputenc/utf8.xdy was using it on seemingly random basis, and
|
16 |
+
;; Sphinx coercing of xindy usability for both Latin and Cyrillic scripts
|
17 |
+
;; with pdflatex requires its systematic presence here.
|
18 |
+
;;
|
19 |
+
;; - Support for some extra letters: Ÿ, Ŋ, ŋ, Œ, œ, IJ, ij, ȷ and ẞ.
|
20 |
+
;;
|
21 |
+
;; Indeed Sphinx needs to support for pdflatex engine all Unicode letters
|
22 |
+
;; available in TeX T1 font encoding. The above letters are found in
|
23 |
+
;; that encoding but not in the Latin1, 2, 3 charsets which are those
|
24 |
+
;; covered by original tex/inputenc/utf8.xdy.
|
25 |
+
;;
|
26 |
+
;; - There is a problem that ȷ is not supported out-of-the box by LaTeX
|
27 |
+
;; with inputenc, one must add explicitly
|
28 |
+
;; \DeclareUnicodeCharacter{0237}{\j}
|
29 |
+
;; to preamble of LaTeX document. However this character is not supported
|
30 |
+
;; by the TeX "times" font used by default by Sphinx for pdflatex engine.
|
31 |
+
;;
|
32 |
+
;; **Update**: since LaTeX 2018/12/01, the \j as well as \SS, \k{} and
|
33 |
+
;; \.{} need no extra user declaration anymore.
|
34 |
+
;;
|
35 |
+
;; - ẞ needs \DeclareUnicodeCharacter{1E9E}{\SS} (but ß needs no extra set-up).
|
36 |
+
;;
|
37 |
+
;; - U+02DB (˛) and U+02D9 (˙) are also not supported by inputenc
|
38 |
+
;; out of the box and require
|
39 |
+
;; \DeclareUnicodeCharacter{02DB}{\k{}}
|
40 |
+
;; \DeclareUnicodeCharacter{02D9}{\.{}}
|
41 |
+
;; to be added to preamble.
|
42 |
+
;;
|
43 |
+
;; - U+0127 ħ and U+0126 Ħ are absent from TeX T1+TS1 font encodings.
|
44 |
+
;;
|
45 |
+
;; - Characters Ŋ and ŋ are not supported by TeX font "times" used by
|
46 |
+
;; default by Sphinx for pdflatex engine but they are supported by
|
47 |
+
;; some TeX fonts, in particular by the default LaTeX font for T1
|
48 |
+
;; encoding.
|
49 |
+
;;
|
50 |
+
;; - " and ~ must be escaped as ~" and resp. ~~ in xindy merge rules.
|
51 |
+
;;
|
52 |
+
;; Contributed by the Sphinx team, July 2018.
|
53 |
+
;;
|
54 |
+
;; See sphinx.xdy for superior figures, as they are escaped by LaTeX writer.
|
55 |
+
(merge-rule "\IeC {\textonesuperior }" "¹" :string)
|
56 |
+
(merge-rule "\IeC {\texttwosuperior }" "²" :string)
|
57 |
+
(merge-rule "\IeC {\textthreesuperior }" "³" :string)
|
58 |
+
(merge-rule "\IeC {\'a}" "á" :string)
|
59 |
+
(merge-rule "\IeC {\'A}" "Á" :string)
|
60 |
+
(merge-rule "\IeC {\`a}" "à" :string)
|
61 |
+
(merge-rule "\IeC {\`A}" "À" :string)
|
62 |
+
(merge-rule "\IeC {\^a}" "â" :string)
|
63 |
+
(merge-rule "\IeC {\^A}" "Â" :string)
|
64 |
+
(merge-rule "\IeC {\~"a}" "ä" :string)
|
65 |
+
(merge-rule "\IeC {\~"A}" "Ä" :string)
|
66 |
+
(merge-rule "\IeC {\~~a}" "ã" :string)
|
67 |
+
(merge-rule "\IeC {\~~A}" "Ã" :string)
|
68 |
+
(merge-rule "\IeC {\c c}" "ç" :string)
|
69 |
+
(merge-rule "\IeC {\c C}" "Ç" :string)
|
70 |
+
(merge-rule "\IeC {\'c}" "ć" :string)
|
71 |
+
(merge-rule "\IeC {\'C}" "Ć" :string)
|
72 |
+
(merge-rule "\IeC {\^c}" "ĉ" :string)
|
73 |
+
(merge-rule "\IeC {\^C}" "Ĉ" :string)
|
74 |
+
(merge-rule "\IeC {\.c}" "ċ" :string)
|
75 |
+
(merge-rule "\IeC {\.C}" "Ċ" :string)
|
76 |
+
(merge-rule "\IeC {\c s}" "ş" :string)
|
77 |
+
(merge-rule "\IeC {\c S}" "Ş" :string)
|
78 |
+
(merge-rule "\IeC {\c t}" "ţ" :string)
|
79 |
+
(merge-rule "\IeC {\c T}" "Ţ" :string)
|
80 |
+
(merge-rule "\IeC {\-}" "" :string); soft hyphen
|
81 |
+
(merge-rule "\IeC {\textdiv }" "÷" :string)
|
82 |
+
(merge-rule "\IeC {\'e}" "é" :string)
|
83 |
+
(merge-rule "\IeC {\'E}" "É" :string)
|
84 |
+
(merge-rule "\IeC {\`e}" "è" :string)
|
85 |
+
(merge-rule "\IeC {\`E}" "È" :string)
|
86 |
+
(merge-rule "\IeC {\^e}" "ê" :string)
|
87 |
+
(merge-rule "\IeC {\^E}" "Ê" :string)
|
88 |
+
(merge-rule "\IeC {\~"e}" "ë" :string)
|
89 |
+
(merge-rule "\IeC {\~"E}" "Ë" :string)
|
90 |
+
(merge-rule "\IeC {\^g}" "ĝ" :string)
|
91 |
+
(merge-rule "\IeC {\^G}" "Ĝ" :string)
|
92 |
+
(merge-rule "\IeC {\.g}" "ġ" :string)
|
93 |
+
(merge-rule "\IeC {\.G}" "Ġ" :string)
|
94 |
+
(merge-rule "\IeC {\^h}" "ĥ" :string)
|
95 |
+
(merge-rule "\IeC {\^H}" "Ĥ" :string)
|
96 |
+
(merge-rule "\IeC {\H o}" "ő" :string)
|
97 |
+
(merge-rule "\IeC {\H O}" "Ő" :string)
|
98 |
+
(merge-rule "\IeC {\textacutedbl }" "˝" :string)
|
99 |
+
(merge-rule "\IeC {\H u}" "ű" :string)
|
100 |
+
(merge-rule "\IeC {\H U}" "Ű" :string)
|
101 |
+
(merge-rule "\IeC {\ae }" "æ" :string)
|
102 |
+
(merge-rule "\IeC {\AE }" "Æ" :string)
|
103 |
+
(merge-rule "\IeC {\textcopyright }" "©" :string)
|
104 |
+
(merge-rule "\IeC {\c \ }" "¸" :string)
|
105 |
+
(merge-rule "\IeC {\dh }" "ð" :string)
|
106 |
+
(merge-rule "\IeC {\DH }" "Ð" :string)
|
107 |
+
(merge-rule "\IeC {\dj }" "đ" :string)
|
108 |
+
(merge-rule "\IeC {\DJ }" "Đ" :string)
|
109 |
+
(merge-rule "\IeC {\guillemotleft }" "«" :string)
|
110 |
+
(merge-rule "\IeC {\guillemotright }" "»" :string)
|
111 |
+
(merge-rule "\IeC {\'\i }" "í" :string)
|
112 |
+
(merge-rule "\IeC {\`\i }" "ì" :string)
|
113 |
+
(merge-rule "\IeC {\^\i }" "î" :string)
|
114 |
+
(merge-rule "\IeC {\~"\i }" "ï" :string)
|
115 |
+
(merge-rule "\IeC {\i }" "ı" :string)
|
116 |
+
(merge-rule "\IeC {\^\j }" "ĵ" :string)
|
117 |
+
(merge-rule "\IeC {\k {}}" "˛" :string)
|
118 |
+
(merge-rule "\IeC {\l }" "ł" :string)
|
119 |
+
(merge-rule "\IeC {\L }" "Ł" :string)
|
120 |
+
(merge-rule "\IeC {\nobreakspace }" " " :string)
|
121 |
+
(merge-rule "\IeC {\o }" "ø" :string)
|
122 |
+
(merge-rule "\IeC {\O }" "Ø" :string)
|
123 |
+
(merge-rule "\IeC {\textsterling }" "£" :string)
|
124 |
+
(merge-rule "\IeC {\textparagraph }" "¶" :string)
|
125 |
+
(merge-rule "\IeC {\ss }" "ß" :string)
|
126 |
+
(merge-rule "\IeC {\textsection }" "§" :string)
|
127 |
+
(merge-rule "\IeC {\textbrokenbar }" "¦" :string)
|
128 |
+
(merge-rule "\IeC {\textcent }" "¢" :string)
|
129 |
+
(merge-rule "\IeC {\textcurrency }" "¤" :string)
|
130 |
+
(merge-rule "\IeC {\textdegree }" "°" :string)
|
131 |
+
(merge-rule "\IeC {\textexclamdown }" "¡" :string)
|
132 |
+
(merge-rule "\IeC {\texthbar }" "ħ" :string)
|
133 |
+
(merge-rule "\IeC {\textHbar }" "Ħ" :string)
|
134 |
+
(merge-rule "\IeC {\textonehalf }" "½" :string)
|
135 |
+
(merge-rule "\IeC {\textonequarter }" "¼" :string)
|
136 |
+
(merge-rule "\IeC {\textordfeminine }" "ª" :string)
|
137 |
+
(merge-rule "\IeC {\textordmasculine }" "º" :string)
|
138 |
+
(merge-rule "\IeC {\textperiodcentered }" "·" :string)
|
139 |
+
(merge-rule "\IeC {\textquestiondown }" "¿" :string)
|
140 |
+
(merge-rule "\IeC {\textregistered }" "®" :string)
|
141 |
+
(merge-rule "\IeC {\textthreequarters }" "¾" :string)
|
142 |
+
(merge-rule "\IeC {\textyen }" "¥" :string)
|
143 |
+
(merge-rule "\IeC {\th }" "þ" :string)
|
144 |
+
(merge-rule "\IeC {\TH }" "Þ" :string)
|
145 |
+
(merge-rule "\IeC {\'I}" "Í" :string)
|
146 |
+
(merge-rule "\IeC {\`I}" "Ì" :string)
|
147 |
+
(merge-rule "\IeC {\^I}" "Î" :string)
|
148 |
+
(merge-rule "\IeC {\~"I}" "Ï" :string)
|
149 |
+
(merge-rule "\IeC {\.I}" "İ" :string)
|
150 |
+
(merge-rule "\IeC {\^J}" "Ĵ" :string)
|
151 |
+
(merge-rule "\IeC {\k a}" "ą" :string)
|
152 |
+
(merge-rule "\IeC {\k A}" "Ą" :string)
|
153 |
+
(merge-rule "\IeC {\k e}" "ę" :string)
|
154 |
+
(merge-rule "\IeC {\k E}" "Ę" :string)
|
155 |
+
(merge-rule "\IeC {\'l}" "ĺ" :string)
|
156 |
+
(merge-rule "\IeC {\'L}" "Ĺ" :string)
|
157 |
+
(merge-rule "\IeC {\textlnot }" "¬" :string)
|
158 |
+
(merge-rule "\IeC {\textmu }" "µ" :string)
|
159 |
+
(merge-rule "\IeC {\'n}" "ń" :string)
|
160 |
+
(merge-rule "\IeC {\'N}" "Ń" :string)
|
161 |
+
(merge-rule "\IeC {\~~n}" "ñ" :string)
|
162 |
+
(merge-rule "\IeC {\~~N}" "Ñ" :string)
|
163 |
+
(merge-rule "\IeC {\'o}" "ó" :string)
|
164 |
+
(merge-rule "\IeC {\'O}" "Ó" :string)
|
165 |
+
(merge-rule "\IeC {\`o}" "ò" :string)
|
166 |
+
(merge-rule "\IeC {\`O}" "Ò" :string)
|
167 |
+
(merge-rule "\IeC {\^o}" "ô" :string)
|
168 |
+
(merge-rule "\IeC {\^O}" "Ô" :string)
|
169 |
+
(merge-rule "\IeC {\~"o}" "ö" :string)
|
170 |
+
(merge-rule "\IeC {\~"O}" "Ö" :string)
|
171 |
+
(merge-rule "\IeC {\~~o}" "õ" :string)
|
172 |
+
(merge-rule "\IeC {\~~O}" "Õ" :string)
|
173 |
+
(merge-rule "\IeC {\textpm }" "±" :string)
|
174 |
+
(merge-rule "\IeC {\r a}" "å" :string)
|
175 |
+
(merge-rule "\IeC {\r A}" "Å" :string)
|
176 |
+
(merge-rule "\IeC {\'r}" "ŕ" :string)
|
177 |
+
(merge-rule "\IeC {\'R}" "Ŕ" :string)
|
178 |
+
(merge-rule "\IeC {\r u}" "ů" :string)
|
179 |
+
(merge-rule "\IeC {\r U}" "Ů" :string)
|
180 |
+
(merge-rule "\IeC {\'s}" "ś" :string)
|
181 |
+
(merge-rule "\IeC {\'S}" "Ś" :string)
|
182 |
+
(merge-rule "\IeC {\^s}" "ŝ" :string)
|
183 |
+
(merge-rule "\IeC {\^S}" "Ŝ" :string)
|
184 |
+
(merge-rule "\IeC {\textasciidieresis }" "¨" :string)
|
185 |
+
(merge-rule "\IeC {\textasciimacron }" "¯" :string)
|
186 |
+
(merge-rule "\IeC {\.{}}" "˙" :string)
|
187 |
+
(merge-rule "\IeC {\textasciiacute }" "´" :string)
|
188 |
+
(merge-rule "\IeC {\texttimes }" "×" :string)
|
189 |
+
(merge-rule "\IeC {\u a}" "ă" :string)
|
190 |
+
(merge-rule "\IeC {\u A}" "Ă" :string)
|
191 |
+
(merge-rule "\IeC {\u g}" "ğ" :string)
|
192 |
+
(merge-rule "\IeC {\u G}" "Ğ" :string)
|
193 |
+
(merge-rule "\IeC {\textasciibreve }" "˘" :string)
|
194 |
+
(merge-rule "\IeC {\'u}" "ú" :string)
|
195 |
+
(merge-rule "\IeC {\'U}" "Ú" :string)
|
196 |
+
(merge-rule "\IeC {\`u}" "ù" :string)
|
197 |
+
(merge-rule "\IeC {\`U}" "Ù" :string)
|
198 |
+
(merge-rule "\IeC {\^u}" "û" :string)
|
199 |
+
(merge-rule "\IeC {\^U}" "Û" :string)
|
200 |
+
(merge-rule "\IeC {\~"u}" "ü" :string)
|
201 |
+
(merge-rule "\IeC {\~"U}" "Ü" :string)
|
202 |
+
(merge-rule "\IeC {\u u}" "ŭ" :string)
|
203 |
+
(merge-rule "\IeC {\u U}" "Ŭ" :string)
|
204 |
+
(merge-rule "\IeC {\v c}" "č" :string)
|
205 |
+
(merge-rule "\IeC {\v C}" "Č" :string)
|
206 |
+
(merge-rule "\IeC {\v d}" "ď" :string)
|
207 |
+
(merge-rule "\IeC {\v D}" "Ď" :string)
|
208 |
+
(merge-rule "\IeC {\v e}" "ě" :string)
|
209 |
+
(merge-rule "\IeC {\v E}" "Ě" :string)
|
210 |
+
(merge-rule "\IeC {\v l}" "ľ" :string)
|
211 |
+
(merge-rule "\IeC {\v L}" "Ľ" :string)
|
212 |
+
(merge-rule "\IeC {\v n}" "ň" :string)
|
213 |
+
(merge-rule "\IeC {\v N}" "Ň" :string)
|
214 |
+
(merge-rule "\IeC {\v r}" "ř" :string)
|
215 |
+
(merge-rule "\IeC {\v R}" "Ř" :string)
|
216 |
+
(merge-rule "\IeC {\v s}" "š" :string)
|
217 |
+
(merge-rule "\IeC {\v S}" "Š" :string)
|
218 |
+
(merge-rule "\IeC {\textasciicaron }" "ˇ" :string)
|
219 |
+
(merge-rule "\IeC {\v t}" "ť" :string)
|
220 |
+
(merge-rule "\IeC {\v T}" "Ť" :string)
|
221 |
+
(merge-rule "\IeC {\v z}" "ž" :string)
|
222 |
+
(merge-rule "\IeC {\v Z}" "Ž" :string)
|
223 |
+
(merge-rule "\IeC {\'y}" "ý" :string)
|
224 |
+
(merge-rule "\IeC {\'Y}" "Ý" :string)
|
225 |
+
(merge-rule "\IeC {\~"y}" "ÿ" :string)
|
226 |
+
(merge-rule "\IeC {\'z}" "ź" :string)
|
227 |
+
(merge-rule "\IeC {\'Z}" "Ź" :string)
|
228 |
+
(merge-rule "\IeC {\.z}" "ż" :string)
|
229 |
+
(merge-rule "\IeC {\.Z}" "Ż" :string)
|
230 |
+
;; letters not in Latin1, 2, 3 but available in TeX T1 font encoding
|
231 |
+
(merge-rule "\IeC {\~"Y}" "Ÿ" :string)
|
232 |
+
(merge-rule "\IeC {\NG }" "Ŋ" :string)
|
233 |
+
(merge-rule "\IeC {\ng }" "ŋ" :string)
|
234 |
+
(merge-rule "\IeC {\OE }" "Œ" :string)
|
235 |
+
(merge-rule "\IeC {\oe }" "œ" :string)
|
236 |
+
(merge-rule "\IeC {\IJ }" "IJ" :string)
|
237 |
+
(merge-rule "\IeC {\ij }" "ij" :string)
|
238 |
+
(merge-rule "\IeC {\j }" "ȷ" :string)
|
239 |
+
(merge-rule "\IeC {\SS }" "ẞ" :string)
|