From cd008762e37e2afca0a878ea1f28a87aec501b7b Mon Sep 17 00:00:00 2001 From: Sortofamudkip <wishyutp0328@gmail.com> Date: Fri, 14 Jul 2023 02:53:50 +0200 Subject: [PATCH] sphinx documentation --- docs/Makefile | 20 + docs/_build/doctrees/environment.pickle | Bin 0 -> 256052 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 5007 bytes docs/_build/doctrees/source/modules.doctree | Bin 0 -> 2770 bytes docs/_build/doctrees/source/src.doctree | Bin 0 -> 153021 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_sources/index.rst.txt | 20 + .../html/_sources/source/modules.rst.txt | 7 + docs/_build/html/_sources/source/src.rst.txt | 45 + docs/_build/html/_static/alabaster.css | 703 ++++++++++++++ docs/_build/html/_static/basic.css | 903 ++++++++++++++++++ docs/_build/html/_static/custom.css | 1 + docs/_build/html/_static/doctools.js | 156 +++ .../html/_static/documentation_options.js | 14 + docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/language_data.js | 199 ++++ docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 83 ++ docs/_build/html/_static/searchtools.js | 566 +++++++++++ docs/_build/html/_static/sphinx_highlight.js | 144 +++ docs/_build/html/genindex.html | 306 ++++++ docs/_build/html/index.html | 109 +++ docs/_build/html/objects.inv | 8 + docs/_build/html/py-modindex.html | 133 +++ docs/_build/html/search.html | 117 +++ docs/_build/html/searchindex.js | 1 + docs/_build/html/source/modules.html | 169 ++++ docs/_build/html/source/src.html | 589 ++++++++++++ docs/conf.py | 55 ++ docs/index.rst | 20 + docs/make.bat | 35 + docs/source/modules.rst | 7 + docs/source/src.rst | 45 + src/Dataset.py | 2 +- src/test_dataset.py | 5 + test_package.egg-info/PKG-INFO | 5 + test_package.egg-info/SOURCES.txt | 0 test_package.egg-info/dependency_links.txt | 1 + test_package.egg-info/requires.txt | 3 + test_package.egg-info/top_level.txt | 1 + 41 files changed, 4475 insertions(+), 1 deletion(-) create mode 100644 docs/Makefile create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/doctrees/source/modules.doctree create mode 100644 docs/_build/doctrees/source/src.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_sources/source/modules.rst.txt create mode 100644 docs/_build/html/_sources/source/src.rst.txt create mode 100644 docs/_build/html/_static/alabaster.css create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/sphinx_highlight.js create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_build/html/source/modules.html create mode 100644 docs/_build/html/source/src.html create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat create mode 100644 docs/source/modules.rst create mode 100644 docs/source/src.rst create mode 100644 test_package.egg-info/PKG-INFO create mode 100644 test_package.egg-info/SOURCES.txt create mode 100644 test_package.egg-info/dependency_links.txt create mode 100644 test_package.egg-info/requires.txt create mode 100644 test_package.egg-info/top_level.txt diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..e2d1c88827ee4387e1ffaa874d7af86d9728dead GIT binary patch literal 256052 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	fmi?jf<J6Jjli?x_$xB=(Ycfy9>S5EhBqvmoY? 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 Jw$ZoZ{{ge+t)Tz_ literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..15587ca854ef885240995ed0662c2b60c3365c25 GIT binary patch literal 5007 zcmds5-EJI76?Wpxpa1P_0;}DKj?iwLB{P#axd7jwC@cuf8Yw{wdl7YNx@)G&(_P)E zs<y{Sh+VWnF_Z*ody%+<SKtZI3JGbic>*2*AtWR&_^P^lradN35O-J_tLxP1Q>V`P z&R>7n`1Iq;3+~UXtCVpu>5(uLNk~<0+F=r8F%>%hB)|Dl{^NYxbR;=aNhSlDn+0$L zj7OoQB7cm{HOsGgq<W=*R*=M}-e(Q-IZ>esy-GCEJP}?@l%~=f@`&E@0!fLcp*J{Q zDpcw|&3G_Ynn>+|`J0k^-^n8H&OPt;&hDMNyZ654?cCnE+gth|$-ICFkAx)Eo@QJ* zksj1YBdTe1?CHcihW=i}$6SnVd4o)QTziToSrmFidl7{$OF<$u;Q}(KCzC{bPjnJ! zN$C?W<dO!OAJSgVT90$qF_*qiC)P&)S9g1sTaTM&O5k3dvlTTUW{GGmIcx@aSU4>5 zP{H-46+}cS5b@j)BrcxXVV2Go0}_lS9Xg)QB#w4fN-T`psica^Lz-u%rOC*?k+UUs zl`Wc%U*ROjs#ziLr~O#ye%SxkyAR*HzyCr1!FTUJdenbJaV}uw-|IhwL?Q#`JxYf9 z2siNF6(cSvm2i4LmC3<QUn<(&x!WDdBul%{o{xmZYF9BRlZD-sYjQ*cA9sh6h#&Q# ziRyC^(n(J$otsM$1m=5<Yyb$fl*L3Mrjf!LtZCt~jm?JUI-<2LbNvT20w}44ql<?d z>U2b0FR-;~zC6$Q*AIVthPUw5HcWPhz0DTcjeT}=KN}GC1vrVl4v@Zq-!=Tcgx~eY zdB)yieX!pu*x5F_xz}<RY1>#yG7;9)EpEaV;GQA~&hEYFAa>O>oXvm{7+3NF87o`_ zQ5I4g@D32|m`p;NYL@R^1ey@O)|jUA0C9--)Gq8jijqNoVw#MHAu`U1SuLeZ32l+Z z11f2l?=6@mXLXf`=oq|9NL)1q?6NwAy>HF&4R*tsp#!trpSPV^FK^yGk|a&3%*nht zzkb@BFh8A|-*`ubzq>jC)R6zWs#_u3WkAR)U1YA8yyswp)cyDl4qlw|<5!AwJp<wG zieR?BEkYhp<q;8jnhdN1Tpru}k6SZnJ^k;XC2A^dIA|>ovItq&k2u1oswguRJEmiI ze6DF++cxXF$Qrv(MpQT;J*l#82bqbC;0{*fX3yPS7R*XYaZfSwCwTiTL&r3^Z~<IX zq<DAJw5zl7+3kPx;@fYVOYRV}sB{RN<A2v4O6MVx!&ASWhgO}*H1QsAk+bii(%Q!u zMJQ*#H!ZC6af)=gXhoZ4{HK#N;sMt{x7|jX6Zv!Z9xCOCB1O$EViEq!65(4=!<?sv zW&U}M`DZU<{umNJn)w^pXV0d9EBzNIa0ilS>Azo8`|LC4v0u%tKb>2{E0u(rS3W<- zE9`f#<d8p~cexii<S(!85cY?f=5;q*hSC0X-r;pOSmr;zjQLzQtQKKZ)WtJS`1_m_ ziuKG1#d;GZ*wxjV3;y-LyWpSaUF-!eIA~s2KtX!duz(jT)$2ZZ4QBnvd8gNXV445+ zGUl^Bn3aJl#aG$eG>eRwn+xx_lKhie(7F71s)%eMer)FMB6D}k%snd`)owknpIax8 zl+RPG?6ugoHNge57G%;kf__QgH!BszrO|!UR#a<bTnrAIwzj!JU?^PyM_O#YPofO9 zrpmXbnPfW6biU8}`=*1GOC`~X%&`d3|D)ZHQ!JK?15q`^7|W${naK#NRg`7lHkNi5 z2RCeqKhDk85Iws{G_7s!T`;S*OGA&~Plkz%b5Pb4dXm&H=M)8zZxj?7p_@eG;U96$ z{HndhiRBArzY8-+nkEuejULj-b}vheMAK!%Y|;sb)ilwWs+bz45z;|6!f|UhZQD8p zxs=49bhJcYY%hguzQzS?<WmvY^f^LDl<8sjt6g-fxq0*Srcb3zq|X442ptLlkGlmZ z1M7vQYf>6cN^Y*r?aYZd_@NE5wL<PphwAM&PjAe<Y&Ps26b!{+qR937s}T{SjEpEO z9-^3CL?34^W1dQ6=%fEb&BigdN!&M0%wR)Y6Bgm2k0D{mCpl}HHInJXpOMT(4tTAG zS)BS)2*R+Az|lTRK_V+~-BDm&p{)C7q*T!?Onl5F;Mzc0O%(O(Z#t9&+CSuq7Z6?d zL#}M|go~6~wyMxz+hzrqQ3!^jw*zWQHh<diUbRm+1e1?#b>SN;EriRL(V9+|fas=; zFCa&Z0K|yLDERMf+%Rh?O?}%1AS#g*pgCHe6nKa3HaN@|nbxV=?e{@ez4TbKMD!9l z>gVQ)<#Y;w(?`Dr_h>hY(X{*4?R&82nj8jm;w@z+{_RRUf|Xdvj;ZW%s)z0jB!E8C zafHJ<NL7fU(DwFia}Ah`{b_hkFW?u`;ECB##~8gQKI0=6;pZl;#6o{X#rOi?Kg|%= z3WmDu*2U6~l7N)6#I=B-GYsq`=z<bfb|%Ez<19tDWWQ6m;h@X|m?S{qVh9XWiDAp8 z3Y87!_;_r=8zrQOMmqzJb6^HzM~DzUh6;?L^*S+E0&tCeiViOF@l6Fot{sq{o6T}m z1X!bCk=9PkA{B=@`X<vZ(h1@hP_zl(er)iIhR#h&n@|eS(#WrX4Mr$CiJPrc)MDrc z8PbN+g>5eFybgNH5{u_;HfHSL4g&q4hku#r*ge~8x)Gm^Pu%87#$LC>BxAQ69}}5b zt-I05T}3<UFmIt#P;9hTe8mOol!6am4dC{8kVI2tIM&zZh*R#)DT$rxRQJ->Df#ZJ zk<Ij1=4F*T7!;990*t%>3>xbo!I0u+dDN5EgOdIUtoAH_h`7Mife6Ew1_dM(2ToJU fDf04^?3}q=4yypq$bKeS3T@Ua6NK%dvO(|PYzBfO literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/source/modules.doctree b/docs/_build/doctrees/source/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d79d74219bf868d555dfac7546cc4cd20ddb8ac2 GIT binary patch literal 2770 zcmZ8jO>Y}F5Or)zmSjo(NK+I@+@>hfBxvL<(j1DO8U#TPZgfbB067E%wM#8o?~+@R zYs&=!q=ytS%3Ijq)W6lo-PKyMfrZ5(IWv6o-jMG*|Nb}FsQ%oZDY%e}W11vVCCqr& zOH^FuOj`fRKm5zT^AB8K({rOr9W(DXup;InOEi=It#{+F+=|Q`H~V)Ci>*+y-Of9_ z%Xi-T2fXh(R@jWKOt~$iV;`n5yZswmgs`>ogRi4^3yN6Q^8?o>ZE}3eb(@@~ZaWi_ z`Dr<$Za}ToVpdw5CFH&(5)<;=i8E>pjQHJ=G_Qa4lCroO%xHY7**vT%-HxScnDTs& z-{wPphi~yC_fM2d8zs>%&tJZHI(-v8`}OIoSJ5j5f0k+TBznmVqdMkyU#Yo0N9K2* z%M{r$Eo2%MTK)bw(uPeQ|1e3lDvJrS5~&P;PYh@JtV||_u=JctaXOi6D*uddXcN_k zjdGQg88gS)0Ff_GHp>}+>%}TBR4J1cWNXm*1`eWPtJx~*&D>W2h<^>}zrlA8-+g=! z@!fXg^>Dxs32ITHHg$t$Hq`EKPu)<+I4cu27f220@t>*d<#ds-!g7DI4fJVIkpi_! zGd1&<uFFM|fJ2vV)a-5zJz3^6rdi@oHr$}1j8QVXz}f+*c$G=XzvGYj5q|_Ewo#=B z4B)G$a(m6;C+C_L1=F6c9yIKqTva#t0f|`aq9!6;;<Fq!FooR%?B1%mQDuR8tY@$q zu4OEL6!zY5<G9p;+oWakaA~O-?Rth;3+6zW2d&cPT1m@LZP$HGvl5WEQthhJ7Nzx5 zzBhIKlu4$kRoY{aP-w!^yue_$4oDE?6vL*Tq|_NkBVa~?7Q!q7cLLxS-W|@BvQk;L zGI?^tje_7&F|wE|oqJfu22?2sNEv8t;PQ5DVHt!13pp2-lcgdNvDwf_bn1qh6-rx@ zu``zWlTA0^G;4<)cfb|`s99=Dvs~11orKNG6ye4Yo&;)Gp&89#>03=>77pb<y0MVJ zh%gze1gpI3mv%n+aRMQFcV~T)Fs+p)oXR8veNaN2Ew<k6)kv>+=~Q04JGwS=%>{q& z#<kO{1eROxtWR9q>Gs0`3{c|0C&Pif8)a0cB~2ONPB7ktq})x-Vx<!T{edP36NEc; z-B`&v&ImX}LJG7xvGBa>#<aAGT$$Xa0Jla-nHQwxA5g6f0@TxzX2IcJWdXF(gxX)3 z3d71okwqT(w9giWGK{S5tSAy&awd$Z`MF0DVdyLi2Whh0S?Yp6azh-(Knb*IBco;+ zS@s<FdH97OhUu^dg$dpg)O#0AqaA{u2SHq*jZDG9Oyt7)7yI|!xL^eVDCj>^gYb z%ZwuTpbYl~x3(}pMG?&AxVW%f$z!F{$h%u%Wt9L{63cRw$D$lP*eCbCe*!$mdLCbM zA1qhyzg@bAQfc7pDbvS-*?AQM>W{e1GX(2fI)j9g&|7=%2!zZ@tIhTR#1w%cmu}x& zNJ|%li<D>hK;G?41>O%$PNA|tN{HG3sGHTe9+FJOv~K6_DCQLTgd46>Bv7s(#O~9w zK#1@PsQPr%1kluB5poU=EW5&C=o6-#U0WyeK;BHzT8iN+KlR`YZh!>(y+8__F^eF# zVyrqPET<wPc(7<zUFaX(LG$DQS+jZF(=Oc>lV{;c;Cgj0fp|ehArk>{SYoM88F~|* z0|!V7)UtTSfHt_r!pp%Ou376x0?hC>ZwK8VA-peO-wDS0H-E!l8`lp8dr<(`cb>nw zH2iD)f6a%+jaG|Q?H<Lr@~iOhSX+W7m+R^@S1o}^l@-O!XDVy!Ul~8UW^7mY*F5%@ zQL9adYyQz&wGGYu)^%Ua3~pw0j2N#D(89ajSY;W21%$XVcAho%PdNMs{}SxSD-Jrs nJISElb-=c9teJOPb5*k4=5+vyq@h}aB=okX4TPJwoE`rUoRCep literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/source/src.doctree b/docs/_build/doctrees/source/src.doctree new file mode 100644 index 0000000000000000000000000000000000000000..df7b3c3b191849c2740b3c13047b24593df37666 GIT binary patch literal 153021 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 literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000..d033249 --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 3bd87c5970a2b25d4590719e2d2fd180 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 0000000..5200b2a --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. asdsd documentation master file, created by + sphinx-quickstart on Fri Jul 14 02:13:49 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to asdsd's documentation! +================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_build/html/_sources/source/modules.rst.txt b/docs/_build/html/_sources/source/modules.rst.txt new file mode 100644 index 0000000..e9ff8ac --- /dev/null +++ b/docs/_build/html/_sources/source/modules.rst.txt @@ -0,0 +1,7 @@ +src +=== + +.. toctree:: + :maxdepth: 4 + + src diff --git a/docs/_build/html/_sources/source/src.rst.txt b/docs/_build/html/_sources/source/src.rst.txt new file mode 100644 index 0000000..ba434d4 --- /dev/null +++ b/docs/_build/html/_sources/source/src.rst.txt @@ -0,0 +1,45 @@ +src package +=========== + +Submodules +---------- + +src.Dataset module +------------------ + +.. automodule:: src.Dataset + :members: + :undoc-members: + :show-inheritance: + +src.Plotter module +------------------ + +.. automodule:: src.Plotter + :members: + :undoc-members: + :show-inheritance: + +src.test\_dataset module +------------------------ + +.. automodule:: src.test_dataset + :members: + :undoc-members: + :show-inheritance: + +src.test\_plotter module +------------------------ + +.. automodule:: src.test_plotter + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: src + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css new file mode 100644 index 0000000..517d0b2 --- /dev/null +++ b/docs/_build/html/_static/alabaster.css @@ -0,0 +1,703 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 0000000..7577acb --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/docs/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 0000000..cf359c0 --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '0.1', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0002xNkl<Zcmb`G zgHi?o6ovOGdxdP*AltSE*&JruJwUGI3!FN?xxO>s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHD<M{a4P!N^sPbQKi=?mBx zoos%BSoiGXjr-;%$QixXMOVNSUNp6L0a1Oz&cgu)wqE?07u5I7qrQIu4Fij)Y3c&0 z@0u_#NH6I?Mk(n;dT}d~^J<WkTLqp|RW-hV56tKpXqu)k@V{?amI+5DOlEU@funz+ kySsbM>fiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/docs/_build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 0000000..9abe04b --- /dev/null +++ b/docs/_build/html/_static/pygments.css @@ -0,0 +1,83 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 0000000..97d56a7 --- /dev/null +++ b/docs/_build/html/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..aae669d --- /dev/null +++ b/docs/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '<p class="highlight-link">' + + '<a href="javascript:SphinxHighlight.hideSearchWords()">' + + _("Hide Search Matches") + + "</a></p>" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html new file mode 100644 index 0000000..5629873 --- /dev/null +++ b/docs/_build/html/genindex.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Index — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="_static/alabaster.css" /> + <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/sphinx_highlight.js"></script> + <link rel="index" title="Index" href="#" /> + <link rel="search" title="Search" href="search.html" /> + + <link rel="stylesheet" href="_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + +<h1 id="index">Index</h1> + +<div class="genindex-jumpbox"> + <a href="#C"><strong>C</strong></a> + | <a href="#D"><strong>D</strong></a> + | <a href="#G"><strong>G</strong></a> + | <a href="#M"><strong>M</strong></a> + | <a href="#P"><strong>P</strong></a> + | <a href="#R"><strong>R</strong></a> + | <a href="#S"><strong>S</strong></a> + | <a href="#T"><strong>T</strong></a> + +</div> +<h2 id="C">C</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Plotter.Plotter.customize_plot">customize_plot() (src.Plotter.Plotter method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="D">D</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Dataset.Dataset">Dataset (class in src.Dataset)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Plotter.Plotter.distribution_plot">distribution_plot() (src.Plotter.Plotter method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="G">G</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Dataset.Dataset.get_category_counts">get_category_counts() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.get_combined_anxiety_score">get_combined_anxiety_score() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.get_dataframe">get_dataframe() (src.Dataset.Dataset method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Dataset.Dataset.get_is_competitive_col">get_is_competitive_col() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.get_is_narcissist_col">get_is_narcissist_col() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.get_sorted_column">get_sorted_column() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.get_unique_column_values">get_unique_column_values() (src.Dataset.Dataset method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="M">M</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li> + module + + <ul> + <li><a href="source/src.html#module-src">src</a> +</li> + <li><a href="source/src.html#module-src.Dataset">src.Dataset</a> +</li> + <li><a href="source/src.html#module-src.Plotter">src.Plotter</a> +</li> + <li><a href="source/src.html#module-src.test_dataset">src.test_dataset</a> +</li> + <li><a href="source/src.html#module-src.test_plotter">src.test_plotter</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="P">P</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Plotter.Plotter.plot_categorical_bar_chart">plot_categorical_bar_chart() (src.Plotter.Plotter method)</a> +</li> + <li><a href="source/src.html#src.Plotter.Plotter.plot_categorical_boxplot">plot_categorical_boxplot() (src.Plotter.Plotter method)</a> +</li> + <li><a href="source/src.html#src.Plotter.Plotter.plot_categorical_histplot">plot_categorical_histplot() (src.Plotter.Plotter method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Plotter.Plotter.plot_scatterplot">plot_scatterplot() (src.Plotter.Plotter method)</a> +</li> + <li><a href="source/src.html#src.Plotter.Plotter">Plotter (class in src.Plotter)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.preprocess_dataset">preprocess_dataset() (src.Dataset.Dataset method)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.preprocess_whyplay">preprocess_whyplay() (src.Dataset.Dataset method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="R">R</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.Dataset.Dataset.remove_nonaccepting_rows">remove_nonaccepting_rows() (src.Dataset.Dataset method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="S">S</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li> + src + + <ul> + <li><a href="source/src.html#module-src">module</a> +</li> + </ul></li> + <li> + src.Dataset + + <ul> + <li><a href="source/src.html#module-src.Dataset">module</a> +</li> + </ul></li> + <li> + src.Plotter + + <ul> + <li><a href="source/src.html#module-src.Plotter">module</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li> + src.test_dataset + + <ul> + <li><a href="source/src.html#module-src.test_dataset">module</a> +</li> + </ul></li> + <li> + src.test_plotter + + <ul> + <li><a href="source/src.html#module-src.test_plotter">module</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="T">T</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.test_dataset.test_bool_or_none_params">test_bool_or_none_params() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_catch_colname_not_in_df">test_catch_colname_not_in_df() (in module src.test_dataset)</a> + + <ul> + <li><a href="source/src.html#src.test_plotter.test_catch_colname_not_in_df">(in module src.test_plotter)</a> +</li> + </ul></li> + <li><a href="source/src.html#src.test_dataset.test_catch_colname_not_string">test_catch_colname_not_string() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_catch_non_bool">test_catch_non_bool() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_catch_non_dataframe">test_catch_non_dataframe() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_catch_plotter_init_not_Dataset">test_catch_plotter_init_not_Dataset() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_catch_styling_params_not_dict">test_catch_styling_params_not_dict() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_catch_target_not_string">test_catch_target_not_string() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_combined_anxiety_score">test_combined_anxiety_score() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_customize_plot">test_customize_plot() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_distribution_plot">test_distribution_plot() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_get_dataframe">test_get_dataframe() (in module src.test_dataset)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="source/src.html#src.test_dataset.test_get_is_narcissist_col">test_get_is_narcissist_col() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_get_sorted_columns">test_get_sorted_columns() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_get_unique_column_values">test_get_unique_column_values() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_incorrectly_load_Dataset_class">test_incorrectly_load_Dataset_class() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_load_Dataset_class">test_load_Dataset_class() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_load_plotter">test_load_plotter() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_plot_categorical_bar_chart">test_plot_categorical_bar_chart() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_plot_categorical_boxplot">test_plot_categorical_boxplot() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_plot_categorical_histplot">test_plot_categorical_histplot() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_plotter.test_plot_scatterplot">test_plot_scatterplot() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.test_dataset.test_preprocessed_dataframe">test_preprocessed_dataframe() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_dataset.the_dataset">the_dataset() (in module src.test_dataset)</a> +</li> + <li><a href="source/src.html#src.test_plotter.the_plotter">the_plotter() (in module src.test_plotter)</a> +</li> + <li><a href="source/src.html#src.Dataset.Dataset.treat_outliers">treat_outliers() (src.Dataset.Dataset method)</a> +</li> + </ul></td> +</tr></table> + + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="index.html">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="index.html">Documentation overview</a><ul> + </ul></li> +</ul> +</div> +<div id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</div> +<script>document.getElementById('searchbox').style.display = "block"</script> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 0000000..eef5e0d --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,109 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>Welcome to asdsd’s documentation! — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="_static/alabaster.css" /> + <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/sphinx_highlight.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + + <link rel="stylesheet" href="_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + <section id="welcome-to-asdsd-s-documentation"> +<h1>Welcome to asdsd’s documentation!<a class="headerlink" href="#welcome-to-asdsd-s-documentation" title="Permalink to this heading">¶</a></h1> +<div class="toctree-wrapper compound"> +</div> +</section> +<section id="indices-and-tables"> +<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h1> +<ul class="simple"> +<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li> +<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li> +<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li> +</ul> +</section> + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="#">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="#">Documentation overview</a><ul> + </ul></li> +</ul> +</div> +<div id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</div> +<script>document.getElementById('searchbox').style.display = "block"</script> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + | + <a href="_sources/index.rst.txt" + rel="nofollow">Page source</a> + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000..332a1e7 --- /dev/null +++ b/docs/_build/html/objects.inv @@ -0,0 +1,8 @@ +# Sphinx inventory version 2 +# Project: asdsd +# Version: +# The remainder of this file is compressed using zlib. +xÚ–±’Û †{?™¤µ“k¯¾&Ef<“"%ƒam1A °«;+U^#¯—'É"ìX:Û9©²üì²ÚßµhºÇ:˜Öø$0´QÃGŒzUQíÞç‰å±\¤±'E + +$C©v +Q<œ)¯HV; ©Á.ÄNêÐzÂþ@U0÷rB½±ŒT~o:‰:D(Æ~ÞFU—,¦35@–ì3𳛂ò*j‹h‘&‘0Dâ1¢}1¥õöGŠ|V®…²‹k"41h@ì~¬À ˜—ªkœêŠ0êÀ7åƒWZCCÖïd/e¡QE2´ä,ÄÛkˆ Þó$Cé[á+ÉJ·H¡¶?A6<rÏAÿý.Ëh7-ÙàË)IxlV+'7*J]©8.ìç;[Å!O£!ãøåfÒè+¹±D†ºü² ÁÉS¡ó¥+îr}}n[¯Ó Þx†üÂAè*uϽ’‰Ü¬¼4Ûy©´ün"CíÞ3r†2ÖU«*ÂÙU1å¢ÏÓF^ƒ“P×§h=§;‚&×I”‘‡–-sç,ÅΈ:ùçoÚÕV0ì·Ê›ûh¨›5\à†˜e©‡>‡7Ä"u.ù}n‡=ØX=•J*¦ò-kccÞ™Ka.:u©/÷AAþoù3!O¶?phýåÄWö7¨‚;²¿o½½@2NmÀ‰åƒ8ŽöëÄçô¸8-3A§EƒßÀ±u 4~ýFÁËÚ<©´ý»w…;5Ýò8‘Q_rWÉ{fß;þ“äÇj¶¬j,ÌcYó5ϯՇÜäÖ…Ã0Ç3YÉ)\œ²yaõ1Çi¥h”þžöø¹—®q \ No newline at end of file diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html new file mode 100644 index 0000000..0b231f4 --- /dev/null +++ b/docs/_build/html/py-modindex.html @@ -0,0 +1,133 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Python Module Index — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="_static/alabaster.css" /> + <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/sphinx_highlight.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + + + <link rel="stylesheet" href="_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + + <h1>Python Module Index</h1> + + <div class="modindex-jumpbox"> + <a href="#cap-s"><strong>s</strong></a> + </div> + + <table class="indextable modindextable"> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-s"><td></td><td> + <strong>s</strong></td><td></td></tr> + <tr> + <td><img src="_static/minus.png" class="toggler" + id="toggle-1" style="display: none" alt="-" /></td> + <td> + <a href="source/src.html#module-src"><code class="xref">src</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="source/src.html#module-src.Dataset"><code class="xref">src.Dataset</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="source/src.html#module-src.Plotter"><code class="xref">src.Plotter</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="source/src.html#module-src.test_dataset"><code class="xref">src.test_dataset</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="source/src.html#module-src.test_plotter"><code class="xref">src.test_plotter</code></a></td><td> + <em></em></td></tr> + </table> + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="index.html">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="index.html">Documentation overview</a><ul> + </ul></li> +</ul> +</div> +<div id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</div> +<script>document.getElementById('searchbox').style.display = "block"</script> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 0000000..09453b1 --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,117 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Search — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="_static/alabaster.css" /> + + <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/sphinx_highlight.js"></script> + <script src="_static/searchtools.js"></script> + <script src="_static/language_data.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="#" /> + <script src="searchindex.js" defer></script> + + + <link rel="stylesheet" href="_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + <h1 id="search-documentation">Search</h1> + + <noscript> + <div class="admonition warning"> + <p> + Please activate JavaScript to enable the search + functionality. + </p> + </div> + </noscript> + + + <p> + Searching for multiple words only shows matches that contain + all words. + </p> + + + <form action="" method="get"> + <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="search" /> + <span id="search-progress" style="padding-left: 10px"></span> + </form> + + + + <div id="search-results"> + + </div> + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="index.html">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="index.html">Documentation overview</a><ul> + </ul></li> +</ul> +</div> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 0000000..97b0265 --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["index", "source/modules", "source/src"], "filenames": ["index.rst", "source/modules.rst", "source/src.rst"], "titles": ["Welcome to asdsd\u2019s documentation!", "src", "src package"], "terms": {"index": 0, "modul": [0, 1], "search": 0, "page": 0, "packag": 1, "submodul": 1, "dataset": 1, "get_category_count": [1, 2], "get_combined_anxiety_scor": [1, 2], "get_datafram": [1, 2], "get_is_competitive_col": [1, 2], "get_is_narcissist_col": [1, 2], "get_sorted_column": [1, 2], "get_unique_column_valu": [1, 2], "preprocess_dataset": [1, 2], "preprocess_whyplai": [1, 2], "remove_nonaccepting_row": [1, 2], "treat_outli": [1, 2], "plotter": 1, "customize_plot": [1, 2], "distribution_plot": [1, 2], "plot_categorical_bar_chart": [1, 2], "plot_categorical_boxplot": [1, 2], "plot_categorical_histplot": [1, 2], "plot_scatterplot": [1, 2], "test_dataset": 1, "test_bool_or_none_param": [1, 2], "test_catch_colname_not_in_df": [1, 2], "test_catch_colname_not_str": [1, 2], "test_catch_non_bool": [1, 2], "test_catch_non_datafram": [1, 2], "test_combined_anxiety_scor": [1, 2], "test_get_datafram": [1, 2], "test_get_is_narcissist_col": [1, 2], "test_get_sorted_column": [1, 2], "test_get_unique_column_valu": [1, 2], "test_incorrectly_load_dataset_class": [1, 2], "test_load_dataset_class": [1, 2], "test_preprocessed_datafram": [1, 2], "the_dataset": [1, 2], "test_plott": 1, "test_catch_plotter_init_not_dataset": [1, 2], "test_catch_styling_params_not_dict": [1, 2], "test_catch_target_not_str": [1, 2], "test_customize_plot": [1, 2], "test_distribution_plot": [1, 2], "test_load_plott": [1, 2], "test_plot_categorical_bar_chart": [1, 2], "test_plot_categorical_boxplot": [1, 2], "test_plot_categorical_histplot": [1, 2], "test_plot_scatterplot": [1, 2], "the_plott": [1, 2], "content": 1, "class": 2, "dataset_filenam": 2, "str": 2, "base": 2, "object": 2, "colnam": 2, "ascend": 2, "bool": 2, "none": 2, "seri": 2, "return": 2, "count": 2, "categor": 2, "valu": 2, "paramet": 2, "column": 2, "name": 2, "option": 2, "direct": 2, "sort": 2, "result": 2, "If": 2, "set": 2, "ar": 2, "default": 2, "categori": 2, "type": 2, "pd": 2, "datafram": 2, "get": 2, "combin": 2, "anxieti": 2, "score": 2, "thi": 2, "i": 2, "gan": 2, "spin": 2, "swl": 2, "metric": 2, "each": 2, "three": 2, "first": 2, "normalis": 2, "mean": 2, "A": 2, "getter": 2, "function": 2, "boolean": 2, "narcissist": 2, "The": 2, "narciss": 2, "1": 2, "0": 2, "consid": 2, "Not": 2, "while": 2, "all": 2, "abov": 2, "true": 2, "singl": 2, "either": 2, "descend": 2, "see": 2, "get_dataset_column": 2, "order": 2, "an": 2, "arrai": 2, "string": 2, "contain": 2, "uniqu": 2, "present": 2, "raw_datafram": 2, "preprocess": 2, "immedi": 2, "after": 2, "load": 2, "raw": 2, "read": 2, "from": 2, "read_csv": 2, "discard": 2, "afterward": 2, "whyplai": 2, "is_competit": 2, "col": 2, "remov": 2, "row": 2, "where": 2, "particip": 2, "did": 2, "consent": 2, "data": 2, "process": 2, "df": 2, "treat": 2, "outlier": 2, "numer": 2, "filter": 2, "fig": 2, "ax": 2, "styling_param": 2, "plt": 2, "figur": 2, "dict": 2, "target": 2, "plot": 2, "distribut": 2, "must": 2, "category1": 2, "category2": 2, "bar": 2, "chart": 2, "boxplot": 2, "bin": 2, "30": 2, "hisplot": 2, "target1": 2, "target2": 2, "scatterplot": 2, "test": 2, "file": 2, "py": 2, "param": 2, "take": 2, "correctli": 2, "work": 2, "intend": 2, "catch": 2, "incorrect": 2, "input": 2, "successfulli": 2, "": 2, "init": 2, "actual": 2, "non": 2, "dictionari": 2, "can": 2, "initialis": 2, "instanc": 2, "fixtur": 2}, "objects": {"": [[2, 0, 0, "-", "src"]], "src": [[2, 0, 0, "-", "Dataset"], [2, 0, 0, "-", "Plotter"], [2, 0, 0, "-", "test_dataset"], [2, 0, 0, "-", "test_plotter"]], "src.Dataset": [[2, 1, 1, "", "Dataset"]], "src.Dataset.Dataset": [[2, 2, 1, "", "get_category_counts"], [2, 2, 1, "", "get_combined_anxiety_score"], [2, 2, 1, "", "get_dataframe"], [2, 2, 1, "", "get_is_competitive_col"], [2, 2, 1, "", "get_is_narcissist_col"], [2, 2, 1, "", "get_sorted_column"], [2, 2, 1, "", "get_unique_column_values"], [2, 2, 1, "", "preprocess_dataset"], [2, 2, 1, "", "preprocess_whyplay"], [2, 2, 1, "", "remove_nonaccepting_rows"], [2, 2, 1, "", "treat_outliers"]], "src.Plotter": [[2, 1, 1, "", "Plotter"]], "src.Plotter.Plotter": [[2, 2, 1, "", "customize_plot"], [2, 2, 1, "", "distribution_plot"], [2, 2, 1, "", "plot_categorical_bar_chart"], [2, 2, 1, "", "plot_categorical_boxplot"], [2, 2, 1, "", "plot_categorical_histplot"], [2, 2, 1, "", "plot_scatterplot"]], "src.test_dataset": [[2, 3, 1, "", "test_bool_or_none_params"], [2, 3, 1, "", "test_catch_colname_not_in_df"], [2, 3, 1, "", "test_catch_colname_not_string"], [2, 3, 1, "", "test_catch_non_bool"], [2, 3, 1, "", "test_catch_non_dataframe"], [2, 3, 1, "", "test_combined_anxiety_score"], [2, 3, 1, "", "test_get_dataframe"], [2, 3, 1, "", "test_get_is_narcissist_col"], [2, 3, 1, "", "test_get_sorted_columns"], [2, 3, 1, "", "test_get_unique_column_values"], [2, 3, 1, "", "test_incorrectly_load_Dataset_class"], [2, 3, 1, "", "test_load_Dataset_class"], [2, 3, 1, "", "test_preprocessed_dataframe"], [2, 3, 1, "", "the_dataset"]], "src.test_plotter": [[2, 3, 1, "", "test_catch_colname_not_in_df"], [2, 3, 1, "", "test_catch_plotter_init_not_Dataset"], [2, 3, 1, "", "test_catch_styling_params_not_dict"], [2, 3, 1, "", "test_catch_target_not_string"], [2, 3, 1, "", "test_customize_plot"], [2, 3, 1, "", "test_distribution_plot"], [2, 3, 1, "", "test_load_plotter"], [2, 3, 1, "", "test_plot_categorical_bar_chart"], [2, 3, 1, "", "test_plot_categorical_boxplot"], [2, 3, 1, "", "test_plot_categorical_histplot"], [2, 3, 1, "", "test_plot_scatterplot"], [2, 3, 1, "", "the_plotter"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"welcom": 0, "asdsd": 0, "": 0, "document": 0, "indic": 0, "tabl": 0, "src": [1, 2], "packag": 2, "submodul": 2, "dataset": 2, "modul": 2, "plotter": 2, "test_dataset": 2, "test_plott": 2, "content": 2}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Welcome to asdsd\u2019s documentation!": [[0, "welcome-to-asdsd-s-documentation"]], "Indices and tables": [[0, "indices-and-tables"]], "src": [[1, "src"]], "src package": [[2, "src-package"]], "Submodules": [[2, "submodules"]], "src.Dataset module": [[2, "module-src.Dataset"]], "src.Plotter module": [[2, "module-src.Plotter"]], "src.test_dataset module": [[2, "module-src.test_dataset"]], "src.test_plotter module": [[2, "module-src.test_plotter"]], "Module contents": [[2, "module-src"]]}, "indexentries": {"dataset (class in src.dataset)": [[2, "src.Dataset.Dataset"]], "plotter (class in src.plotter)": [[2, "src.Plotter.Plotter"]], "customize_plot() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.customize_plot"]], "distribution_plot() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.distribution_plot"]], "get_category_counts() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_category_counts"]], "get_combined_anxiety_score() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_combined_anxiety_score"]], "get_dataframe() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_dataframe"]], "get_is_competitive_col() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_is_competitive_col"]], "get_is_narcissist_col() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_is_narcissist_col"]], "get_sorted_column() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_sorted_column"]], "get_unique_column_values() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.get_unique_column_values"]], "module": [[2, "module-src"], [2, "module-src.Dataset"], [2, "module-src.Plotter"], [2, "module-src.test_dataset"], [2, "module-src.test_plotter"]], "plot_categorical_bar_chart() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.plot_categorical_bar_chart"]], "plot_categorical_boxplot() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.plot_categorical_boxplot"]], "plot_categorical_histplot() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.plot_categorical_histplot"]], "plot_scatterplot() (src.plotter.plotter method)": [[2, "src.Plotter.Plotter.plot_scatterplot"]], "preprocess_dataset() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.preprocess_dataset"]], "preprocess_whyplay() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.preprocess_whyplay"]], "remove_nonaccepting_rows() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.remove_nonaccepting_rows"]], "src": [[2, "module-src"]], "src.dataset": [[2, "module-src.Dataset"]], "src.plotter": [[2, "module-src.Plotter"]], "src.test_dataset": [[2, "module-src.test_dataset"]], "src.test_plotter": [[2, "module-src.test_plotter"]], "test_bool_or_none_params() (in module src.test_dataset)": [[2, "src.test_dataset.test_bool_or_none_params"]], "test_catch_colname_not_in_df() (in module src.test_dataset)": [[2, "src.test_dataset.test_catch_colname_not_in_df"]], "test_catch_colname_not_in_df() (in module src.test_plotter)": [[2, "src.test_plotter.test_catch_colname_not_in_df"]], "test_catch_colname_not_string() (in module src.test_dataset)": [[2, "src.test_dataset.test_catch_colname_not_string"]], "test_catch_non_bool() (in module src.test_dataset)": [[2, "src.test_dataset.test_catch_non_bool"]], "test_catch_non_dataframe() (in module src.test_dataset)": [[2, "src.test_dataset.test_catch_non_dataframe"]], "test_catch_plotter_init_not_dataset() (in module src.test_plotter)": [[2, "src.test_plotter.test_catch_plotter_init_not_Dataset"]], "test_catch_styling_params_not_dict() (in module src.test_plotter)": [[2, "src.test_plotter.test_catch_styling_params_not_dict"]], "test_catch_target_not_string() (in module src.test_plotter)": [[2, "src.test_plotter.test_catch_target_not_string"]], "test_combined_anxiety_score() (in module src.test_dataset)": [[2, "src.test_dataset.test_combined_anxiety_score"]], "test_customize_plot() (in module src.test_plotter)": [[2, "src.test_plotter.test_customize_plot"]], "test_distribution_plot() (in module src.test_plotter)": [[2, "src.test_plotter.test_distribution_plot"]], "test_get_dataframe() (in module src.test_dataset)": [[2, "src.test_dataset.test_get_dataframe"]], "test_get_is_narcissist_col() (in module src.test_dataset)": [[2, "src.test_dataset.test_get_is_narcissist_col"]], "test_get_sorted_columns() (in module src.test_dataset)": [[2, "src.test_dataset.test_get_sorted_columns"]], "test_get_unique_column_values() (in module src.test_dataset)": [[2, "src.test_dataset.test_get_unique_column_values"]], "test_incorrectly_load_dataset_class() (in module src.test_dataset)": [[2, "src.test_dataset.test_incorrectly_load_Dataset_class"]], "test_load_dataset_class() (in module src.test_dataset)": [[2, "src.test_dataset.test_load_Dataset_class"]], "test_load_plotter() (in module src.test_plotter)": [[2, "src.test_plotter.test_load_plotter"]], "test_plot_categorical_bar_chart() (in module src.test_plotter)": [[2, "src.test_plotter.test_plot_categorical_bar_chart"]], "test_plot_categorical_boxplot() (in module src.test_plotter)": [[2, "src.test_plotter.test_plot_categorical_boxplot"]], "test_plot_categorical_histplot() (in module src.test_plotter)": [[2, "src.test_plotter.test_plot_categorical_histplot"]], "test_plot_scatterplot() (in module src.test_plotter)": [[2, "src.test_plotter.test_plot_scatterplot"]], "test_preprocessed_dataframe() (in module src.test_dataset)": [[2, "src.test_dataset.test_preprocessed_dataframe"]], "the_dataset() (in module src.test_dataset)": [[2, "src.test_dataset.the_dataset"]], "the_plotter() (in module src.test_plotter)": [[2, "src.test_plotter.the_plotter"]], "treat_outliers() (src.dataset.dataset method)": [[2, "src.Dataset.Dataset.treat_outliers"]]}}) \ No newline at end of file diff --git a/docs/_build/html/source/modules.html b/docs/_build/html/source/modules.html new file mode 100644 index 0000000..7e51a8d --- /dev/null +++ b/docs/_build/html/source/modules.html @@ -0,0 +1,169 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>src — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" /> + <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/sphinx_highlight.js"></script> + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + + <link rel="stylesheet" href="../_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + <section id="src"> +<h1>src<a class="headerlink" href="#src" title="Permalink to this heading">¶</a></h1> +<div class="toctree-wrapper compound"> +<ul> +<li class="toctree-l1"><a class="reference internal" href="src.html">src package</a><ul> +<li class="toctree-l2"><a class="reference internal" href="src.html#submodules">Submodules</a></li> +<li class="toctree-l2"><a class="reference internal" href="src.html#module-src.Dataset">src.Dataset module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.Dataset.Dataset"><code class="docutils literal notranslate"><span class="pre">Dataset</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_category_counts"><code class="docutils literal notranslate"><span class="pre">Dataset.get_category_counts()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_combined_anxiety_score"><code class="docutils literal notranslate"><span class="pre">Dataset.get_combined_anxiety_score()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_dataframe"><code class="docutils literal notranslate"><span class="pre">Dataset.get_dataframe()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_is_competitive_col"><code class="docutils literal notranslate"><span class="pre">Dataset.get_is_competitive_col()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_is_narcissist_col"><code class="docutils literal notranslate"><span class="pre">Dataset.get_is_narcissist_col()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_sorted_column"><code class="docutils literal notranslate"><span class="pre">Dataset.get_sorted_column()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.get_unique_column_values"><code class="docutils literal notranslate"><span class="pre">Dataset.get_unique_column_values()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.preprocess_dataset"><code class="docutils literal notranslate"><span class="pre">Dataset.preprocess_dataset()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.preprocess_whyplay"><code class="docutils literal notranslate"><span class="pre">Dataset.preprocess_whyplay()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.remove_nonaccepting_rows"><code class="docutils literal notranslate"><span class="pre">Dataset.remove_nonaccepting_rows()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Dataset.Dataset.treat_outliers"><code class="docutils literal notranslate"><span class="pre">Dataset.treat_outliers()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="src.html#module-src.Plotter">src.Plotter module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.Plotter.Plotter"><code class="docutils literal notranslate"><span class="pre">Plotter</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.customize_plot"><code class="docutils literal notranslate"><span class="pre">Plotter.customize_plot()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.distribution_plot"><code class="docutils literal notranslate"><span class="pre">Plotter.distribution_plot()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.plot_categorical_bar_chart"><code class="docutils literal notranslate"><span class="pre">Plotter.plot_categorical_bar_chart()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.plot_categorical_boxplot"><code class="docutils literal notranslate"><span class="pre">Plotter.plot_categorical_boxplot()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.plot_categorical_histplot"><code class="docutils literal notranslate"><span class="pre">Plotter.plot_categorical_histplot()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="src.html#src.Plotter.Plotter.plot_scatterplot"><code class="docutils literal notranslate"><span class="pre">Plotter.plot_scatterplot()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="src.html#module-src.test_dataset">src.test_dataset module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_bool_or_none_params"><code class="docutils literal notranslate"><span class="pre">test_bool_or_none_params()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_catch_colname_not_in_df"><code class="docutils literal notranslate"><span class="pre">test_catch_colname_not_in_df()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_catch_colname_not_string"><code class="docutils literal notranslate"><span class="pre">test_catch_colname_not_string()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_catch_non_bool"><code class="docutils literal notranslate"><span class="pre">test_catch_non_bool()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_catch_non_dataframe"><code class="docutils literal notranslate"><span class="pre">test_catch_non_dataframe()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_combined_anxiety_score"><code class="docutils literal notranslate"><span class="pre">test_combined_anxiety_score()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_get_dataframe"><code class="docutils literal notranslate"><span class="pre">test_get_dataframe()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_get_is_narcissist_col"><code class="docutils literal notranslate"><span class="pre">test_get_is_narcissist_col()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_get_sorted_columns"><code class="docutils literal notranslate"><span class="pre">test_get_sorted_columns()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_get_unique_column_values"><code class="docutils literal notranslate"><span class="pre">test_get_unique_column_values()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_incorrectly_load_Dataset_class"><code class="docutils literal notranslate"><span class="pre">test_incorrectly_load_Dataset_class()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_load_Dataset_class"><code class="docutils literal notranslate"><span class="pre">test_load_Dataset_class()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.test_preprocessed_dataframe"><code class="docutils literal notranslate"><span class="pre">test_preprocessed_dataframe()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_dataset.the_dataset"><code class="docutils literal notranslate"><span class="pre">the_dataset()</span></code></a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="src.html#module-src.test_plotter">src.test_plotter module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_catch_colname_not_in_df"><code class="docutils literal notranslate"><span class="pre">test_catch_colname_not_in_df()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_catch_plotter_init_not_Dataset"><code class="docutils literal notranslate"><span class="pre">test_catch_plotter_init_not_Dataset()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_catch_styling_params_not_dict"><code class="docutils literal notranslate"><span class="pre">test_catch_styling_params_not_dict()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_catch_target_not_string"><code class="docutils literal notranslate"><span class="pre">test_catch_target_not_string()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_customize_plot"><code class="docutils literal notranslate"><span class="pre">test_customize_plot()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_distribution_plot"><code class="docutils literal notranslate"><span class="pre">test_distribution_plot()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_load_plotter"><code class="docutils literal notranslate"><span class="pre">test_load_plotter()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_plot_categorical_bar_chart"><code class="docutils literal notranslate"><span class="pre">test_plot_categorical_bar_chart()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_plot_categorical_boxplot"><code class="docutils literal notranslate"><span class="pre">test_plot_categorical_boxplot()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_plot_categorical_histplot"><code class="docutils literal notranslate"><span class="pre">test_plot_categorical_histplot()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.test_plot_scatterplot"><code class="docutils literal notranslate"><span class="pre">test_plot_scatterplot()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="src.html#src.test_plotter.the_plotter"><code class="docutils literal notranslate"><span class="pre">the_plotter()</span></code></a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="src.html#module-src">Module contents</a></li> +</ul> +</li> +</ul> +</div> +</section> + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="../index.html">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="../index.html">Documentation overview</a><ul> + </ul></li> +</ul> +</div> +<div id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</div> +<script>document.getElementById('searchbox').style.display = "block"</script> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + | + <a href="../_sources/source/modules.rst.txt" + rel="nofollow">Page source</a> + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/_build/html/source/src.html b/docs/_build/html/source/src.html new file mode 100644 index 0000000..2f01235 --- /dev/null +++ b/docs/_build/html/source/src.html @@ -0,0 +1,589 @@ +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>src package — asdsd 0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css" /> + <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" /> + <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> + <script src="../_static/doctools.js"></script> + <script src="../_static/sphinx_highlight.js"></script> + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + + <link rel="stylesheet" href="../_static/custom.css" type="text/css" /> + + + <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> + + </head><body> + + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + + + <div class="body" role="main"> + + <section id="src-package"> +<h1>src package<a class="headerlink" href="#src-package" title="Permalink to this heading">¶</a></h1> +<section id="submodules"> +<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2> +</section> +<section id="module-src.Dataset"> +<span id="src-dataset-module"></span><h2>src.Dataset module<a class="headerlink" href="#module-src.Dataset" title="Permalink to this heading">¶</a></h2> +<dl class="py class"> +<dt class="sig sig-object py" id="src.Dataset.Dataset"> +<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">src.Dataset.</span></span><span class="sig-name descname"><span class="pre">Dataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_filename</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.Dataset.Dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_category_counts"> +<span class="sig-name descname"><span class="pre">get_category_counts</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">colname</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ascending</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Series</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.get_category_counts" title="Permalink to this definition">¶</a></dt> +<dd><p>Returns a count of categorical values in the dataset.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>colname</strong> (<em>str</em>) – the column name.</p></li> +<li><p><strong>ascending</strong> (<em>bool</em><em>, </em><em>optional</em>) – Direction to sort results. +If set to None, the results are not sorted. Defaults to None.</p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the counted categories.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.Series</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_combined_anxiety_score"> +<span class="sig-name descname"><span class="pre">get_combined_anxiety_score</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataframe</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">Series</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.get_combined_anxiety_score" title="Permalink to this definition">¶</a></dt> +<dd><p>Get the combined anxiety score, as a column. +This score is based on the GAN, SPIN and SWL metrics. +Each of the three columns are first normalised, +then the mean is returned.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>dataframe</strong> (<em>pd.DataFrame</em>) – the dataframe.</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the anxiety score column.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.Series</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_dataframe"> +<span class="sig-name descname"><span class="pre">get_dataframe</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">DataFrame</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.get_dataframe" title="Permalink to this definition">¶</a></dt> +<dd><p>A getter function for the dataframe.</p> +<dl class="field-list simple"> +<dt class="field-odd">Returns<span class="colon">:</span></dt> +<dd class="field-odd"><p>the dataset.</p> +</dd> +<dt class="field-even">Return type<span class="colon">:</span></dt> +<dd class="field-even"><p>pd.DataFrame</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_is_competitive_col"> +<span class="sig-name descname"><span class="pre">get_is_competitive_col</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataframe</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><a class="headerlink" href="#src.Dataset.Dataset.get_is_competitive_col" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_is_narcissist_col"> +<span class="sig-name descname"><span class="pre">get_is_narcissist_col</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataframe</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">Series</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.get_is_narcissist_col" title="Permalink to this definition">¶</a></dt> +<dd><p>Get a boolean narcissist column. +The Narcissism score of 1.0 is considered Not a Narcissist, +while all values above that are above are considered Narcissist.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>dataframe</strong> (<em>pd.DataFrame</em>) – the dataframe</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the boolean narcissist column.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.Series</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_sorted_column"> +<span class="sig-name descname"><span class="pre">get_sorted_column</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">colname</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ascending</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</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">True</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">Series</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.get_sorted_column" title="Permalink to this definition">¶</a></dt> +<dd><p>Returns a single column, sorted either ascending or descending.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>colname</strong> (<em>str</em>) – the column name (see get_dataset_columns()).</p></li> +<li><p><strong>ascending</strong> (<em>bool</em><em>, </em><em>optional</em>) – Sorting order. Defaults to True.</p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>The sorted column.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.Series</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.get_unique_column_values"> +<span class="sig-name descname"><span class="pre">get_unique_column_values</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">colname</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.Dataset.Dataset.get_unique_column_values" title="Permalink to this definition">¶</a></dt> +<dd><p>Returns a count of categorical values in the dataset.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>colname</strong> (<em>str</em>) – the column name.</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>an array of strings containing the unique values +present in the column</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>string array</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.preprocess_dataset"> +<span class="sig-name descname"><span class="pre">preprocess_dataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">raw_dataframe</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">DataFrame</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.preprocess_dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>preprocess dataframe immediately after loading it.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>raw_dataframe</strong> (<em>pd.DataFrame</em>) – raw dataframe as read from pd.read_csv(). +This dataframe is discarded afterwards.</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>resulting preprocessed dataframe.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.DataFrame</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.preprocess_whyplay"> +<span class="sig-name descname"><span class="pre">preprocess_whyplay</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataframe</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">Series</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.preprocess_whyplay" title="Permalink to this definition">¶</a></dt> +<dd><p>Preprocesses the whyplay column, and returns a Is_competitive col.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>dataframe</strong> (<em>pd.DataFrame</em>) – the dataframe.</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the Is_competitive column.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.Series</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.remove_nonaccepting_rows"> +<span class="sig-name descname"><span class="pre">remove_nonaccepting_rows</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataframe</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">DataFrame</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.remove_nonaccepting_rows" title="Permalink to this definition">¶</a></dt> +<dd><p>Removes rows where participants did not consent to data processing.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><p><strong>dataframe</strong> (<em>pd.DataFrame</em>) – the dataframe.</p> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the dataframe.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.DataFrame</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Dataset.Dataset.treat_outliers"> +<span class="sig-name descname"><span class="pre">treat_outliers</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>, <em class="sig-param"><span class="n"><span class="pre">colname</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">DataFrame</span></span></span><a class="headerlink" href="#src.Dataset.Dataset.treat_outliers" title="Permalink to this definition">¶</a></dt> +<dd><p>Treat outliers of numerical columns.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>df</strong> (<em>pd.DataFrame</em>) – the dataframe.</p></li> +<li><p><strong>colname</strong> (<em>str</em>) – the column name to treat.</p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>the filtered dataframe.</p> +</dd> +<dt class="field-odd">Return type<span class="colon">:</span></dt> +<dd class="field-odd"><p>pd.DataFrame</p> +</dd> +</dl> +</dd></dl> + +</dd></dl> + +</section> +<section id="module-src.Plotter"> +<span id="src-plotter-module"></span><h2>src.Plotter module<a class="headerlink" href="#module-src.Plotter" title="Permalink to this heading">¶</a></h2> +<dl class="py class"> +<dt class="sig sig-object py" id="src.Plotter.Plotter"> +<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">src.Plotter.</span></span><span class="sig-name descname"><span class="pre">Plotter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.Plotter.Plotter" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p> +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.customize_plot"> +<span class="sig-name descname"><span class="pre">customize_plot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fig</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ax</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</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="#src.Plotter.Plotter.customize_plot" title="Permalink to this definition">¶</a></dt> +<dd><dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>fig</strong> (<em>plt.figure.Figure</em>) – </p></li> +<li><p><strong>ax</strong> (<em>plt.axes.Axes</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.distribution_plot"> +<span class="sig-name descname"><span class="pre">distribution_plot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</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="#src.Plotter.Plotter.distribution_plot" title="Permalink to this definition">¶</a></dt> +<dd><p>plot a distribution plot.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>target</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.plot_categorical_bar_chart"> +<span class="sig-name descname"><span class="pre">plot_categorical_bar_chart</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">category1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">category2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</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="#src.Plotter.Plotter.plot_categorical_bar_chart" title="Permalink to this definition">¶</a></dt> +<dd><p>plot a categorical bar chart.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>category1</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>category2</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.plot_categorical_boxplot"> +<span class="sig-name descname"><span class="pre">plot_categorical_boxplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">category</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</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="#src.Plotter.Plotter.plot_categorical_boxplot" title="Permalink to this definition">¶</a></dt> +<dd><p>plot a categorical boxplot.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>target</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>category</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.plot_categorical_histplot"> +<span class="sig-name descname"><span class="pre">plot_categorical_histplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">category</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">30</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="#src.Plotter.Plotter.plot_categorical_histplot" title="Permalink to this definition">¶</a></dt> +<dd><p>plot a categorical hisplot.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>target</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>category</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt class="sig sig-object py" id="src.Plotter.Plotter.plot_scatterplot"> +<span class="sig-name descname"><span class="pre">plot_scatterplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">target1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">styling_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</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="#src.Plotter.Plotter.plot_scatterplot" title="Permalink to this definition">¶</a></dt> +<dd><p>plot a scatterplot.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters<span class="colon">:</span></dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>target1</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>target2</strong> (<em>str</em><em>, </em><em>must be present as a column in the dataset</em>) – </p></li> +<li><p><strong>styling_params</strong> (<em>dict</em>) – </p></li> +</ul> +</dd> +<dt class="field-even">Returns<span class="colon">:</span></dt> +<dd class="field-even"><p>None</p> +</dd> +</dl> +</dd></dl> + +</dd></dl> + +</section> +<section id="module-src.test_dataset"> +<span id="src-test-dataset-module"></span><h2>src.test_dataset module<a class="headerlink" href="#module-src.test_dataset" title="Permalink to this heading">¶</a></h2> +<p>This test file tests the Dataset class in Dataset.py.</p> +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_bool_or_none_params"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_bool_or_none_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_bool_or_none_params" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take bool or None correctly +work as intended.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_catch_colname_not_in_df"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_catch_colname_not_in_df</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_catch_colname_not_in_df" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take colname correctly +catch colnames not in dataset.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_catch_colname_not_string"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_catch_colname_not_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_catch_colname_not_string" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take colname correctly +catch colnames not in dataset.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_catch_non_bool"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_catch_non_bool</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_catch_non_bool" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take bool or None correctly +catch incorrect input data types.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_catch_non_dataframe"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_catch_non_dataframe</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_catch_non_dataframe" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take pd.DataFrame correctly +catch incorrect input data types.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_combined_anxiety_score"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_combined_anxiety_score</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_combined_anxiety_score" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests Dataset.get_combined_anxiety_score().</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_get_dataframe"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_get_dataframe</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_get_dataframe" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests Dataset.get_dataframe().</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_get_is_narcissist_col"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_get_is_narcissist_col</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_get_is_narcissist_col" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests Dataset.get_is_narcissist_col().</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_get_sorted_columns"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_get_sorted_columns</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_get_sorted_columns" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests Dataset.get_sorted_column().</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_get_unique_column_values"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_get_unique_column_values</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_get_unique_column_values" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests Dataset.get_combined_anxiety_score().</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_incorrectly_load_Dataset_class"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_incorrectly_load_Dataset_class</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_incorrectly_load_Dataset_class" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_load_Dataset_class"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_load_Dataset_class</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_load_Dataset_class" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests if the dataset is successfully loaded.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.test_preprocessed_dataframe"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">test_preprocessed_dataframe</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_dataset.test_preprocessed_dataframe" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that the dataframe is preprocessed correctly.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_dataset.the_dataset"> +<span class="sig-prename descclassname"><span class="pre">src.test_dataset.</span></span><span class="sig-name descname"><span class="pre">the_dataset</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"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#src.test_dataset.the_dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>Returns the initialised Dataset instance as a fixture.</p> +<dl class="field-list simple"> +<dt class="field-odd">Returns<span class="colon">:</span></dt> +<dd class="field-odd"><p>the initialised Dataset.</p> +</dd> +<dt class="field-even">Return type<span class="colon">:</span></dt> +<dd class="field-even"><p><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset">Dataset</a></p> +</dd> +</dl> +</dd></dl> + +</section> +<section id="module-src.test_plotter"> +<span id="src-test-plotter-module"></span><h2>src.test_plotter module<a class="headerlink" href="#module-src.test_plotter" title="Permalink to this heading">¶</a></h2> +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_catch_colname_not_in_df"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_catch_colname_not_in_df</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_catch_colname_not_in_df" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take colname correctly +catch colnames not in dataset.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_catch_plotter_init_not_Dataset"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_catch_plotter_init_not_Dataset</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_catch_plotter_init_not_Dataset" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that the Plotter’s init actually takes a src.Dataset.Dataset.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_catch_styling_params_not_dict"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_catch_styling_params_not_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_catch_styling_params_not_dict" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take styling_params correctly +catch non dictionaries.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_catch_target_not_string"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_catch_target_not_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_catch_target_not_string" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that functions that take target correctly +catch non strings.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_customize_plot"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_customize_plot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_customize_plot" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_distribution_plot"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_distribution_plot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_distribution_plot" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_load_plotter"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_load_plotter</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_load_plotter" title="Permalink to this definition">¶</a></dt> +<dd><p>Tests that the Plotter class can be loaded.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_plot_categorical_bar_chart"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_plot_categorical_bar_chart</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_plot_categorical_bar_chart" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_plot_categorical_boxplot"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_plot_categorical_boxplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_plot_categorical_boxplot" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_plot_categorical_histplot"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_plot_categorical_histplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_plot_categorical_histplot" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.test_plot_scatterplot"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">test_plot_scatterplot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">the_plotter</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#src.Plotter.Plotter" title="src.Plotter.Plotter"><span class="pre">Plotter</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.test_plotter.test_plot_scatterplot" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="src.test_plotter.the_plotter"> +<span class="sig-prename descclassname"><span class="pre">src.test_plotter.</span></span><span class="sig-name descname"><span class="pre">the_plotter</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"><a class="reference internal" href="#src.Dataset.Dataset" title="src.Dataset.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#src.test_plotter.the_plotter" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +</section> +<section id="module-src"> +<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-src" title="Permalink to this heading">¶</a></h2> +</section> +</section> + + + </div> + + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<h1 class="logo"><a href="../index.html">asdsd</a></h1> + + + + + + + + +<h3>Navigation</h3> + +<div class="relations"> +<h3>Related Topics</h3> +<ul> + <li><a href="../index.html">Documentation overview</a><ul> + </ul></li> +</ul> +</div> +<div id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</div> +<script>document.getElementById('searchbox').style.display = "block"</script> + + + + + + + + + </div> + </div> + <div class="clearer"></div> + </div> + <div class="footer"> + ©2023, asdasdasdadadasd. + + | + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.0.1</a> + & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> + + | + <a href="../_sources/source/src.rst.txt" + rel="nofollow">Page source</a> + </div> + + + + + </body> +</html> \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..16220ff --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,55 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("..")) + + +# -- Project information ----------------------------------------------------- + +project = "asdsd" +copyright = "2023, asdasdasdadadasd" +author = "asdasdasdadadasd" + +# The full version, including alpha/beta/rc tags +release = "0.1" + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.napoleon", "sphinx.ext.autodoc"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "alabaster" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..5200b2a --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,20 @@ +.. asdsd documentation master file, created by + sphinx-quickstart on Fri Jul 14 02:13:49 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to asdsd's documentation! +================================= + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..8084272 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/modules.rst b/docs/source/modules.rst new file mode 100644 index 0000000..e9ff8ac --- /dev/null +++ b/docs/source/modules.rst @@ -0,0 +1,7 @@ +src +=== + +.. toctree:: + :maxdepth: 4 + + src diff --git a/docs/source/src.rst b/docs/source/src.rst new file mode 100644 index 0000000..ba434d4 --- /dev/null +++ b/docs/source/src.rst @@ -0,0 +1,45 @@ +src package +=========== + +Submodules +---------- + +src.Dataset module +------------------ + +.. automodule:: src.Dataset + :members: + :undoc-members: + :show-inheritance: + +src.Plotter module +------------------ + +.. automodule:: src.Plotter + :members: + :undoc-members: + :show-inheritance: + +src.test\_dataset module +------------------------ + +.. automodule:: src.test_dataset + :members: + :undoc-members: + :show-inheritance: + +src.test\_plotter module +------------------------ + +.. automodule:: src.test_plotter + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: src + :members: + :undoc-members: + :show-inheritance: diff --git a/src/Dataset.py b/src/Dataset.py index 6d2b92a..6fee9ca 100644 --- a/src/Dataset.py +++ b/src/Dataset.py @@ -187,7 +187,7 @@ class Dataset: """Get the combined anxiety score, as a column. This score is based on the GAN, SPIN and SWL metrics. Each of the three columns are first normalised, - then the mean is returned. + then the mean is returned. Args: dataframe (pd.DataFrame): the dataframe. diff --git a/src/test_dataset.py b/src/test_dataset.py index 87d66df..1fd5853 100644 --- a/src/test_dataset.py +++ b/src/test_dataset.py @@ -13,6 +13,11 @@ this_file_dir = Path(__file__).parent @pytest.fixture def the_dataset() -> Dataset: + """Returns the initialised Dataset instance as a fixture. + + Returns: + Dataset: the initialised Dataset. + """ dataset = Dataset(str(this_file_dir / "../data/GamingStudy_data.csv")) return dataset diff --git a/test_package.egg-info/PKG-INFO b/test_package.egg-info/PKG-INFO new file mode 100644 index 0000000..37383eb --- /dev/null +++ b/test_package.egg-info/PKG-INFO @@ -0,0 +1,5 @@ +Metadata-Version: 2.1 +Name: test-package +Version: 0.1.0 +Author: me +License-File: LICENSE.txt diff --git a/test_package.egg-info/SOURCES.txt b/test_package.egg-info/SOURCES.txt new file mode 100644 index 0000000..e69de29 diff --git a/test_package.egg-info/dependency_links.txt b/test_package.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/test_package.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/test_package.egg-info/requires.txt b/test_package.egg-info/requires.txt new file mode 100644 index 0000000..6a5762e --- /dev/null +++ b/test_package.egg-info/requires.txt @@ -0,0 +1,3 @@ +matplotlib +pandas +pytest diff --git a/test_package.egg-info/top_level.txt b/test_package.egg-info/top_level.txt new file mode 100644 index 0000000..59c251e --- /dev/null +++ b/test_package.egg-info/top_level.txt @@ -0,0 +1 @@ +test-package -- GitLab