From dc8b5aba81a46e9c6564796f27edfd57d769a4dc Mon Sep 17 00:00:00 2001
From: Frederik Hennig <frederik.hennig@fau.de>
Date: Mon, 11 Mar 2024 19:32:40 +0100
Subject: [PATCH] start rebuilding the documentation

---
 doc/sphinx/nbackend/arrays.rst                |   6 ---
 doc/sphinx/nbackend/ast.rst                   |   6 ---
 doc/sphinx/nbackend/expressions.rst           |  15 ------
 doc/sphinx/nbackend/type_system.rst           |   6 ---
 docs/.gitignore                               |   1 +
 docs/Makefile                                 |  20 +++++++
 docs/make.bat                                 |  35 ++++++++++++
 docs/source/_static/img/logo.png              | Bin 0 -> 10116 bytes
 docs/source/api/index.rst                     |  10 ++++
 docs/source/api/kernelcreation/index.rst      |  14 +++++
 docs/source/api/sympyextensions/astnodes.rst  |   9 ++++
 docs/source/api/sympyextensions/field.rst     |   9 ++++
 docs/source/api/sympyextensions/index.rst     |  10 ++++
 docs/source/api/types/basic_types.rst         |   6 +++
 docs/source/api/types/index.rst               |  18 +++++++
 docs/source/api/types/quick.rst               |   6 +++
 docs/source/backend/arrays.rst                |   6 +++
 docs/source/backend/ast.rst                   |   9 ++++
 .../source/backend}/index.rst                 |   8 ++-
 .../nbackend => docs/source/backend}/jit.rst  |   2 +-
 .../source/backend}/kernelcreation.rst        |   2 +-
 .../source/backend}/rationale.rst             |   0
 docs/source/conf.py                           |  51 ++++++++++++++++++
 docs/source/index.rst                         |  18 +++++++
 pyproject.toml                                |   2 +-
 src/pystencils/backend/arrays.py              |   2 +-
 src/pystencils/backend/jit/__init__.py        |   3 +-
 .../backend/kernelcreation/__init__.py        |   2 +-
 src/pystencils/backend/kernelfunction.py      |   2 +-
 src/pystencils/config.py                      |   8 +--
 .../datahandling/datahandling_interface.py    |   3 +-
 .../datahandling/parallel_datahandling.py     |   1 -
 .../datahandling/serial_datahandling.py       |   4 +-
 src/pystencils/kernelcreation.py              |  13 ++++-
 src/pystencils/runhelper/db.py                |   2 +-
 src/pystencils/sympyextensions/__init__.py    |   4 +-
 src/pystencils/types/__init__.py              |  10 ++++
 src/pystencils/types/basic_types.py           |   8 ++-
 src/pystencils/types/quick.py                 |  32 +++++------
 39 files changed, 282 insertions(+), 81 deletions(-)
 delete mode 100644 doc/sphinx/nbackend/arrays.rst
 delete mode 100644 doc/sphinx/nbackend/ast.rst
 delete mode 100644 doc/sphinx/nbackend/expressions.rst
 delete mode 100644 doc/sphinx/nbackend/type_system.rst
 create mode 100644 docs/.gitignore
 create mode 100644 docs/Makefile
 create mode 100644 docs/make.bat
 create mode 100644 docs/source/_static/img/logo.png
 create mode 100644 docs/source/api/index.rst
 create mode 100644 docs/source/api/kernelcreation/index.rst
 create mode 100644 docs/source/api/sympyextensions/astnodes.rst
 create mode 100644 docs/source/api/sympyextensions/field.rst
 create mode 100644 docs/source/api/sympyextensions/index.rst
 create mode 100644 docs/source/api/types/basic_types.rst
 create mode 100644 docs/source/api/types/index.rst
 create mode 100644 docs/source/api/types/quick.rst
 create mode 100644 docs/source/backend/arrays.rst
 create mode 100644 docs/source/backend/ast.rst
 rename {doc/sphinx/nbackend => docs/source/backend}/index.rst (63%)
 rename {doc/sphinx/nbackend => docs/source/backend}/jit.rst (69%)
 rename {doc/sphinx/nbackend => docs/source/backend}/kernelcreation.rst (51%)
 rename {doc/sphinx/nbackend => docs/source/backend}/rationale.rst (100%)
 create mode 100644 docs/source/conf.py
 create mode 100644 docs/source/index.rst

diff --git a/doc/sphinx/nbackend/arrays.rst b/doc/sphinx/nbackend/arrays.rst
deleted file mode 100644
index b668d3c0a..000000000
--- a/doc/sphinx/nbackend/arrays.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-******
-Arrays
-******
-
-.. automodule:: pystencils.nbackend.arrays
-    :members:
diff --git a/doc/sphinx/nbackend/ast.rst b/doc/sphinx/nbackend/ast.rst
deleted file mode 100644
index ca0ccf2b9..000000000
--- a/doc/sphinx/nbackend/ast.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-********************
-Abstract Syntax Tree
-********************
-
-.. automodule:: pystencils.nbackend.ast
-    :members:
diff --git a/doc/sphinx/nbackend/expressions.rst b/doc/sphinx/nbackend/expressions.rst
deleted file mode 100644
index 8dcf58b61..000000000
--- a/doc/sphinx/nbackend/expressions.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-***********************
-Expression Manipulation
-***********************
-
-Variables and Constants
-=======================
-
-.. automodule:: pystencils.nbackend.typed_expressions
-    :members:
-
-Functions
-=========
-
-.. automodule:: pystencils.nbackend.functions
-    :members:
diff --git a/doc/sphinx/nbackend/type_system.rst b/doc/sphinx/nbackend/type_system.rst
deleted file mode 100644
index 75d126ddb..000000000
--- a/doc/sphinx/nbackend/type_system.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-***************
-The Type System
-***************
-
-.. automodule:: pystencils.nbackend.types
-    :members:
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 000000000..378eac25d
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 000000000..d0c3cbf10
--- /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     = source
+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/make.bat b/docs/make.bat
new file mode 100644
index 000000000..747ffb7b3
--- /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=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.https://www.sphinx-doc.org/
+	exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/source/_static/img/logo.png b/docs/source/_static/img/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..784183cd932787cfce3cf6c38e77622f40699e8f
GIT binary patch
literal 10116
zcmXw91z1#Fw56r|>Fy8_hDPab2@x2Ekw!*BO1e9wduT>UK^$N}x&+Cg1f{#XQ$XJ3
zeedyo!*GW?=bpXK*=w)8_KDWjQF}~CPl$nm@mND$Sr2%JKfLhqfZx)XA69@j95+P`
z1AO4eAK&^Ta82N%4t2x8AY6EOVY)wto&X=xxvLnt>pQ=5_p)?_VR(6Y@!L7QcYAB;
z0^@gfwaGb<rpLfw#n4bzF!0XZ&+|*8JWubHJKx&5Jd^gt%TyQ*Q8g2Z%&6oHjwVU_
zVjJqf>Qvz8IWMCTH=Vj_?~0PJ8G?>DX<1EFOv6;P3OH#aIAb)^9$Un*4!oyTp)(s6
zl-~HE^{V~r*PZ$x123Vj!H(enNSov~&$6};d~eJD8ec9no!`tOern*et(i7^&f|g7
zIJd{;(@8r6PFz(8X*5!V<#R|^JeI^fJUrSnI5p0oC6_sQQeHY4uxmOt<-FPb7ok5s
z?YK53!LCi}n)`4QV9>259T2sMyD8*}hCT2xTE9eVI@!F3Y+^W1$~hHw?NdMd%@6|N
z4Q#)^t!?Tvr;Jt(otQ9Gn)JZFQZzN4r|%=+wJBR5#=)A&6na}!5W(ZhWdv7obF2B-
zyGjRzS7r&r2L6NMv!PM9akKk|u?0M?FZxh}z|EZ6;|AlR2x>)jJtd_sEDH}uM?RHH
z$XX$3Vy}eD5{BZ(S=bVP{j4LU%5!`;F7Xkn;&i5hC|RC0xWo?c2p61E^a?jj;oM(r
zN3jzHvZkv7fza~9cOFSFc~w<h>&*Z%e7rFG7dd&~u)zEoyZ-f?Se=SJ9m4K{V@9f2
zXf4YuJ5nw}VMR|iUNcYz38esPCq$N=*F;nso3@OQZ7zi~&*?fA(SojV2XQ2%OC+Q_
zbp4){KkOVl3ohg6Cv0fxvws#-Nj{g}cOZzORx}I{$KuuH)KJ7<=5LaBF<~yM9?LVT
zrba~vWLDqRK0n;JBUvbYI-|{#*R!s7+|U}wER#);x_g|SsCF?~fG42jt;*UMDnVq}
zu!41S!ozNC!AX|&V(@^Z&vU=PZW8Z>b0Cq-yiys7ztfQ|E6x^y?c9eXF|pSEhM70A
z&oA+?z~iscr3F{LGY7g8+}0ncB4Bhzs^rP`N{3FIvlrBr-vUCEhHlE9MV*k59tD@o
z_>y615sgVIr&2ra`}rKu@Xfg>5oJsikAl!<x&&<KH$QqzaQQ(*=&|ZEew2*%*1oaP
z`R$01es88Iedm)UuP{wq71`rkG`WS5?n+n^NrF4<s%r+)@I#o+D}rfCQ-OvW#fQWy
zT8fBBRxV1kxM)GMOd{EHq<gMj>q4!JdBC{Pots)SjB*U^YQC)UU`}X-aeacWUFOSI
zxcm@;^2*71tB}{;YI8*B(dsj9)iVsWOXuaTFh4qdyI7vBAt=wYrxj)bP!wNg`P2tU
z8H;MV0$32;bG|EB$ijN|)<_j)K~aXw2Ldtij)!D9Y{bj8{^-+F5XTQp<jZdPgr}4u
zpZ;SN)&0DHGNGPjc`Hgvh$5;w4#$GHEhILxlN#Q~Dr~y->s^9Zoqix*!2pNGC+;Or
zg+7w?C!<ph6uch9sOmPl8?1t=h;;3@u%@Y+%Ya)aG{NsEo^omOryxk*Benlny4Ag=
zsK0VobSh=iRp}`=C#-(R`&c%7rV!2<!WqVE(@4w_CP;1pt73UW!yEz37Q`Ey-#;ZW
z<R2VJJ)6?ks6uyE5dwm$D^iACDk>|g!cA?N#o(|~vhb?={Abr5e3;pqD)@A48n`*E
ze1nC<Y?L&8W-pasMKwv!JEV!g1el$n6?QgjRA42;JJ#lBzx7Qr)$)`KrPYz7-;>cA
z*4E_PxeXv=kdlgp&B{1*OGDwjFIheRB)5T3<dNx8=Lx$XuS<rBq8${scQr{p%yNd`
zk$Yu8PHNEl^HYL6p-j=@|Ne-OPg5!L6Mj9avVJ@bPT+NUhWNMkRDwKRoH@$6hZ-X5
zL{FUT_b#(vQIw#!>2s|E&hyn0HXpT+ol;#yHdSqvH5i*OoW3FL^>>J#z8l@p{^$bs
zvFH|5YGc5-azS7m)txcHmK|JZ>Qbu)JFr2j5$MQYBw$SI6E6@^&_RhlUD>;&zgmwp
zmQ5V(+>^5>DweV|7La-WXhZd&n4vB`rr2?Eat!lPLjPc%RL0TN``0gf3VnG9n_d}O
z&e%nn)Kh;WF6IoK9XN_mq24v~37L<QEh@npz`l6P%$Jc&6KuDEb<W8ct7tRVZBuzq
z{2emb1vX3E`-(RWsXC^jY^mD&Oo7@^f^lM`tgUQ}M0tD7-XCAUy~O>c6}TtE48VK-
zrB3o7++Rh5nbmKN{AbT`%54hL|9r;j4dunLUw*^OO^D|AwhAf!o7Bqj`Uy>p;lS_r
zYC>fPZ{A!STHPe<*Lr$dWO-7{80jfm4|sEFw}r}!hf;p&rm9f6NC>q;czxmqF+f%8
z40N&kWFMoMI`+RQrzwBoYY!FAs9OJa?#&tU#9}P&eddezFHrS_{rVAmgoVBXRo00C
zO1eu0p#@bsNi6O>=sr|T#Z~p3CFdgT%E79?OD$PQ1gFODa*u{`SzLaW@|E6{=Sk14
zW3VBolo5YO=!mGG;AAif%1}`ixn?^T#Yw=a!OoE=fAME6)J*~+SHb;dfimJb##5ey
zsZg?%oVYUa#herd=(z<+-!npc)|gI7CX~aaKj~A+@u_=sMD`6MdAGj4wGlVrE{J=g
zNnA$7@-gNIt^nH@3>8Z%IxgS~L@~&tGs+0?!%biNs&pwQpt|l6rJJGZNpGIUw>FQW
zrfL3~S{|Nyea>w@<pO|=4!wOVfDON^)ftuxtEnK`ur}p3YIIAX`Q1<R&UtvUQEIbu
zAXdGe*d47{PmJnR9-(K|>{GXmiP20s`a+*w!EOw{`;F|toiLV<w6vhbQ^ZG2SDZGY
z*A-JZt)ZU7lh@+Tn_5P2n588Vj~%V@Ip_Se==?NswL^B=XAYbOYdXXVSCJ3*pSd(2
ze;iXMX;fr(jrC?WQ9l)Zq{53Fl}QibEaEIJym8TLP_t%Yd3l2gzX?B$Q$2(BxGwlS
zH+C-<AB_SLgHj@OAd*AL?j$T+O}5c$5-EEd7Met+GOtm-aQTjrz5y~5a->zQ+|NvT
zy0@Y02KIFwqEHn+K{O0X4TmKUz0=@I<s>IqITr7?PI=p#@axwv1!-oranYBWnq_5W
zKMpTfPp^RtdgU)G%}i2WF6rdnK<8<>u0kc|o={>X>QR4c=EdO5;*A)}c`-imE1_)d
z<#+WI8RW~66)!(JF(iCf_WD@~93moQ&~Frk3(KZS^bPFx;6EhfLw5=iyPG~`PNaxe
zwR3jf91>f!UTg~}8n>Hss^@?^yoj~SHUNV^tfxbSo#w<lmjz4gR?dBYiSFlqd~Xzy
z?iKXGbkl`r0J*B>)7+W`u58gdO*T~SdsNuvxzD0f7Xh1AAtf&(e*EYHwHYQem@gB>
zASV=CK^jLAUY6AADKLW72VZ-dx3|6hxuzy{f408n!>X#NHU}l4kn5WINoqPFo1k{8
z7MGGVv&~TUa{~y(4b4}t3kIu*GvbLqU7<I##MDqK<;bz{s*RUpn(2z62~<i0{Wg&A
zcpuASu1K<X42I)ES#Sc13JJ_+kAjrn%6yzgD3Fnt>xJ;#?4zn_%8Ume?Myqsy`^>h
z{G=+||4Gi)ITjWagz9pKPwsjsr`Hz%yC|FMheeWwpt_CCQ(nUgi{;J;?wA#v^K!|S
zVf(2%Cn$9!j7&siFVVB=?#j~4d;3xuMo~V%wuN19KM9p?<W48`q!P^_%#P88)j0$_
zLX0RK*^51K5;N=8mj5#xJ0uA~jtUZ|^mCe;n(j?ihdIvH30eKb9~c-o@@>`8U1*k3
z#1ALc!8mknv~_m2Ip6sMGHam)gGV$3<s8~$af|rE>a0U$WSCl70-5&vnZFQE<Bqky
zK~8ua#@LKSpLoYO5RDv$pjZn~;bQ;J@T6wm*lH+8)6vDb8T{V!pQG9^wUB1soT`3X
zVcwqaBCZ96(#ax7fW1zMtC8}z#n+g#a#B-6gJ9Vu(}1VDC!Qhi)4f4sWn!2mC0wO*
z&_#TD$j>oq`fkCg`Q-iRq*w|4*2+jmFM87atnss`{6y(-ubktWd`0T80plGz^3V<n
zr{Hy*YanZ1T<pC&rylQLlY>y=YLDaNV5MbboG$ns{+gIj<w@U3y`ldvQrie{@c1~R
zMz^<L?+fBeG_vo|^YPw4JjG7xjPl^g$4>(PV-{C;tB4)eN^uXt|JvA?Wg)oL(EbDG
zPfp0s^<!_qv`5j(SY3jVf9xNBts?h@Ul_z~z~9Xl`_xjv?Z2o`9SGYrx)Wr-`EM*;
zBUxy0**=hEIEq)4I82MHYoXN-6OZ_Jl%lNNj%V}n%^jn(_oznIf2CECeBNT9*t9YV
z5!6re4_^rL8o!*VPkk^#f{t^XoeJLXI;s9dr4>cqtI2sEv1)5;58ph^_YPgWJMiji
zdR0HGElA6m+P~!4Jo3`O$2azCYiphXPXy_TfW8qmH5Yjk%!0Orj|VE-dc%-p7ShU-
zs#Ci4f^uybr)=t|hY;hJZJHL>YRlolLC?M?$*yeJ4^|ZDEp3k)In|j*?Df=uV5C?a
z?F)$QV$U1(v1vpSCfQU??i(7f_Af0e*A0n6?X9;=Yc4|m04IOK>rIK9Q81H^K6zd_
zlGz43qlBtfgNkaNeYmAjlw~RAj-jwcI96oP*uBW{s6Z5Omzp1Q2s$8j@mgY3)z5Ve
z&0g}P)^@Mgxk4}4%%ZOqKb62TM0K|3+<P~TM9=Bpg?}wOj*Q$TWi<Turdwo0dbOqf
zu<a&OF6dv?fk^sGV8wforp-pJzR#PGZ?j8Mh2$tS;WS{b)Xx<a#EHG98N47coS;Ee
z^-7c0Tq?ioumu;^B(ogH{<c?JX<ARmpb0ZtG;pZv>UCk+(ch!8nJNV9Cv$%{9psfs
zXiZ58p7yvpS1Jw`=2JIW$`iv8LE^D((PQsi-pZCSvI+AdUISPbd3{E5J}bmj=rN)~
z9%MIZBs%z68#5WP!}flrTfUH><hQn^!>8P;-bA%lZyNzHm`Z#6=;lr<UpnjHz==E>
zXWGG2-Ko0%3y?snjfjJrnj~AyoDs}qT|cUNjLbAF)5JQ$b)VF{8%CkYE;(ISg!i@?
zaRPARK?tuP-wFP<KxtJ{8aEr$?kV|auxyfj_5h5>b>OpW|FpC;m!apA7#H)l!ddQf
zR%X(zDib#~EyXdah3=l7uIGOs`i6#)i-#<pu~KoJSc&DYw|Uw0$T$9OLxlc~ReK7Z
z9heAt%vbSt6Qb+1uA3$eE3cKTo^5?B@O*MLx4EGYc|DXVFA>-s;hPZCo1chdw=j=~
zg~`Li({Oh&yM1s_Qdk&f1XATn-KO}xDTTe!JPcH>!dXSl%{dnrp8U;w!tVw%6$EMB
zCGQ?T?V@Qx3-gc~%*7q23w>K5*E@AupL`!U@=u9RH|sls!T0%1a(v3T_hA`x3f)%B
zYQpZEJ6d`pE@yE4$IDJ9Ic9L{mfzd;)a=i?A7^IXYz*b}eywbav7}9d!!P`3A3v4E
zE75yqRZYvp#1uy-5}D)NmUVLCiWL&<W+PtV$TA#{4(37|c>8Oy5~CtEF9eR-jTbCt
zrHuQ}IQM0t%#+d3R;J60kbE4D0p85}ZmEVQF2#Ur?j9T-{4Z}5&RB;o^#C-&_&qsE
zK^Wn^|9#Td&hB$j(N8i+TcP=({JbFXyP@oEFvL^^1}lF1jXwt2FTAAxT-6)v;yxy4
zKmzlfPTA&&v-8GM)R6M5lwbq~R1t;alo3nDq2}8C-7Qlhkeou3myV^PXoiM!t?s53
zp$W|!`9bNEkv{UXdETkKyxi8_zTorc5P%o}R3Vv@fNf6?4)}wBf=keCLkq~r#l^+I
zzBpqr5~|o|K44nw#rtazPu7MZn~@`&5he7G)MNQIqvn(CVXo-n6zeg&mx^pJMa8JH
z5%%UE>CKZ~FOUyN%VL#30?XbrrHpv=$O%OH&#j+cbMx`RPS*N4Q#G{4IqBn9Je!$_
zHZE_DeOnXK^(bLetL3tevNTf3ZdOPA%mxN63K1_~1<zPW2+3%U4W?APgNP`hJzu$T
z48+*#Gd}J7C@oJ&ms~86M6Ash^sfHcJS8KH=zCYALt4olb2?DUdvg4{k&-HR74z$L
zre?a#l|g*ca?eqyC0)Qf9YYu$6&;@#y&C^VON!DGFNhTs{!4U->~}vl#|b)j<QQYq
zpVNK87fSsl+teZG(*eWq(O)86z0I3tuR!mBz}g}CMeI8qFMbK<?+iL^op{hK#_t=y
zP1HF)pAy3ae_q!b(ewyF)(Q%_E7-dfUmGbcDY{3{NIno;>IZ^5d}+FDjs-B^kOE$5
zx0p^IVGw162Q{VX^7gX_%Il(#w%VrK4{@bV3Ewj1QBQHDLc~(#Jp#tVtg2Fh8Bs@C
zCJR3yo=)98<W#rD)#&Pz0gZsIBp2h`Isnp4<0G^USJ4ww-=eOLQ+Th)zQM1ePM$)_
z_|k}RPmAn~`)a;?{+rs6_H#1>T3t$bm?_U3d;W{9mkf;C8Xq{bH;hbdY_v8qgFskG
zq%Gt8x+IJ?${i{m(HUfzVlY`ML`i`u1{0Y8PE02|BtW<R<2w}N&dZv5k)HfIPGcYg
zHy`eooa^#7C94>5rGVVl{+zd*n^By5=wJP85Hc~Nvi64s?|fq2GCZ=SxtC8Ie|^-6
zQh|-83r|gESxhF2SBf31Chm%jk;RABQ@&IU-NDjO#g9$<Jnnuau6<*+GF1N3>1vM=
z86EezttlMM<L{{^-B|UML%`M&3XgD70P%{Crd#cP<`!sgOr10jV(Ky`OkeF-eFVnV
zsQyYsNCcvYBeoupAeS4iG(;Bc*C5#Z{uo$urd27Iy;AwkzfeA0T38i<%jpr;^@}oI
z&CeS){@;Z2R516q5P95&(}I*&zc<Mn6~1Rb5*29hw_asx`MdMA!Gy<b(%RpNPWzmc
z+akkgv~%ontnG}2xpC+aOD)QBRaM#Ud743})TpLGtKq<AO}Le@5EK*ILmoP577#D=
zr;wJ+o#Ldgkxq0N{W;Hz@T|&lEK<c-x~mPzd0!vM5m`!kOZ8Ow$)=|9e@7{t&FYmq
zbr~dSsfGb9b%7i=lKPCVvWm`Q>#q*Bxos_rwTz8e7<Y=!x5$n%riId12A&i}>P|r6
z`yC4u7(sM57yIk-YH=4v@Hp-{n;2Za3gwwKBT(0{X*1~ohOG^Ixpd0@e^ig>0=52V
zDy=?p=M?#=-(}8nu2}pjBK@~^fn6AfT4Lx1x>0T&#3Qx&v$#p&^w-#oB1G@08(9WQ
znh6-Pg0zS@)qp3p#(>ZUJRu>M8d(v%!k(<2GLXHs`Q^X62z3P_pzzV^>J*Kq5P{`-
zn17w~O$oQ7H-gKntHgqnzM$etrk;PPIsxa67!r4C<ogE5ie|*<bueKOy)kl9Dfzj}
zZlH%XO>ERU0Ldr7@{<uEQjJ9EehlVXeI3<)bP(|pc*3C}_vJHXE@f6GY?;UJbWD^C
zA;WrEk*$G}J!}1`1dpV>zZX;ylDC%#qkgL0g}-SbOgad0nDLBVSu1bGPOi+d56%xY
zASqUmqp&Z>_XD>eJ7roU{MLfi(&@-tL}VGQdn%x#<NuX?;o~0{k8e1sfvthSC<d#2
z6ThKSTAB-es<WkMzc(c)o2o>!VuE|FcvujvzVy#I2H1QDsWo1}dbQx`vCYbr8R@%D
z<ze~ZKR<kA=5U>c`IiS`Wu*H(J8$COaa}GgbV+2qL5?1#&{CWnM`!CDym8^BG9yT+
zSFFI+6EYT$bczMt4-oPEd28H=G*nIhd)2w=R0IS`c2Z7oNda|LH_z6>V^2O`U=jm3
z<7yLM<nP94e3pyv*DX$?@Pj10H9OWZRb+lS_6$l2rBfbSudGuvoNh2=N;IXZ7b6JU
z8MOKKzSez;z`ZUX=J~_c%v#)AtXt=Tnd5Z`8!ypz_uT8%o4Z)0*FepG`dpYP2~MZ-
z|Jx&#<#BCWlE4EqiAWqUS-ix0VJQFFs4@CKkbk+BM_>Hxlh?~`B6Xc;aO!)z?YNp!
zJGuE^%z9-wW|fGT7*YxjGSv)UI^*TH4t=k*v!aq_snfNb<gGCEk2*umR>rIipk0;y
z27gWBz8?L0-js$^r+U`aS-VFddRwlTHKLsb`8>DDzV_?LPB@!q69l%5C5-8G?W37b
z2T$jdzZ(A{NGx2!`YneR%ci5eWD4q0uc?r#fYxr;>ktdM1H=kWYYB+(918a>)WXNK
zap&iS`_BY?m>;~R;L~4y$_dsrl`x0P(2gv-z3_$@VjTeUKed01DUf997BTpLA;Uc)
zD1=eMHT*Hd3qijN2YY*aJX5Fc7^;^0e>Va4UwoyR;UH*dafX>>g=5QBc)CvMhenf4
zYtNh0?$*l%bX&m97bNoC-QRO;I1;EM)R=v6#`hKv7dB6ihnxf5jAp%G6YL%>cg?wU
zJ=V$;4EggFf;ikDW|(%U8(9p|1*dQ3`z4f=aBbG4^Fqd^ro=x@$vW{%TEc3e7l(^M
zZ8^dfAk(Hah?!3WgLBJqT7+lmE5z{G_ITc<bK5mne0=<7LA1@&3N0=-op*b2y{qmX
z9+<kOrtzE_?(XhD8U1|egylPPvt4#=eLaT;`LfGZ+`OGMv)6_*Gf$a8%<!-dhH3(%
zM3LJYV`KDW+r@X0nUQHLTD-ixJb?JIl76bFh_e-qDY5fzT~L^0IO7hy+ciIBxj$w}
zXly+lmMSYRUxBp$rHcBG32SM9w{k7y5%ZQCcyGEUs{N+9og-OY91%||6bhIJj2cTL
zQ1b2D&^13T@yXfvE2$sWFLGepW5pG3zQ@4f)HV``k>0*!j_LLwxmPmhlr=UZcoy?b
z9{z`Zi$EuYxC@z{q*I#p{JkM!^_hUcX5(f)2jhR2QWHodf4=t$ftm02lY(E|7%&(N
zWYUmS8F>CRKxb+3c4%>QbQA;VW=Nm(aXjeW5B{_k)&Qzqu?26Ahf3{{%&{WAVWrtn
z&4}!5Zz!MzA)9u1+V1ZT^-WFp{TCJ%hUdK&_wfZs05;hDD(LSx=H>D0={iS-`)kB~
zKb+6F&sunRbG0{dbM&*4{|W_SiKhLk`_nE7Pepz{b5m0jV^E9#wd<x-<zy^!*I}V0
z>xm}(Xsa+0W$^<G!`-y>>(^KVo^=pV{|jnUbO~;4ZMg(WS49-<Hl6-sSiHj9o%n|R
zsi-I%AizLL<LKy^5Q`>a&@uYn@}=Y7vhN|sh<r8B4-zr|camY}=!p9Xg(9yC8Z6e#
zKn2`*2L3xmNWs_EF7EFZ?^{pXM>Y#fOQUGayfMMx>x`i5jKCWa;;^9G-XQD!neV{?
z8HW1$VV1PDwY5h*49-V|EO#G!nf)q8BzE@p_Pn%=>m0W0?-Ikj7JQ=G|LwN-2of8B
zi<_G0wa0DWzkhqU(25bj{}<EF)|M3D?pCbAS#jPc{ZCam$;pz{mFN6Vhpc)Nn1F85
zulaetwtwf9vFe=cC0beR7YFmZ6*k!=M(u&EAC=jyeif+P)!ozw-PE&_M}LHv2Y@q6
zw*42z#@N}DKLX9I$SD*owhDy4MwXRnXyv@nR%RzV-m4k8n9fJ;7Bn}{PTK?ov~C?7
z9GueQcM1Nyy*_=I#OcNm#pB11hrM<uD`|i>-oxO4r!JrZ)UnY%ryCNR>$~RnP2!$=
znWTyzZ4d#5z_>zg8-tja*QtnG<%cVe9fRXJw~=Uf$$fvXUM8=PfC<b#Ysr|CLo8^P
ze@9XJ2X6%r+V2C&qLqJ=1RjOy^Iyh0`zt-nu=OzD)!EsZIKoDl?s!y*BpUec2G9yz
zY69E^lmiO6!V2Yf^vsEmFjQV&9p3+QMmDSv0zxk(;W6<1@V|e3-Ay-x{%r>3o?AoT
z4d+V4F-gGzdF}GG7f<@ixB7(wAaHk)&B&3}l$Lb2=J_~A3DheK$-rCh-n+cqW&p;*
z71?eB+fSj~lsl*NA2ZB+qh<UqmM(9gbq;iZONPDNHiy^SZVs@Qt~U{fHD;`&E-RH9
zsa(fhEdNHMZ;<W(d@%}seW764h*m8G8P^d9M=|?;?2e_G4THG>*Ky{zD>Tx#M_t%;
zVnHBTgmcHC96um{VSvHlfQw=~dQCV;A*D!vV`Paq^zwMM*RB6a#@V%23g<!Vr5UsL
z66OnssnNsc2qK!3ske#MzUTH2-oyYtl?QB`Fm~Rj`I5jQm%lw;TH`qT!l_{ykH7ua
zl}jhLZ#~0&7+?`TXTQ|00XNwUpwUq?d-^F}jpyg*fU=Vm_K4)-x~-@PCzwR;HVG)}
z0WtQ*aTOS}d)-yy@RWvKo;?`=zd@gSVE-q*EanyvumMEDyE?F;Vb33k`CW3t_UaO{
z`M_$mCtmvB)#~j@M!WUS@3LWMp|?H6FC1sqa&vyrqN?zSl%MM4;&%WBY82}Qz?%Wo
z^tnCmg?_iEGQXLbOoB~E^KFbE7M+b#IFEnpzdBw^eRXoPc%MJt>{a7;>9lzRg#1Gq
zlDqAa^9OkqT{qYRS>0i#b~_E-V^xhA0e<~jXzecGYB?%6U|3XJDh!@){IEQ5e$xT{
zS2EpFhb>)zpf}y{fy2VD@IA6IGKwWI6R0qWo8sB-CBvSqo+#9S&;dx3U>EVh^GWlO
zneXqXTYN--$Gq)|d>r0oiEKF;z^tE~n;Tr|j=i3!Z|lyN@$<gFyR>s~um+%MZ=p5k
zLG|KLOE{{$|68f#*fc(z+MVg8lws<b<rYG$tfHcVXs)e!;ymQLSYh(f-OGytAIEzm
z%jTnMq3DYjD8SM>=f&ZPZ^qZBi2FeRJu@!(9568O&L7SKs61dZ5bt<%JxLKBM@tH0
z+wLs-BvpZTz8#)#v7yP$2Tifx-%q0K|L_2U0g&1Nqun|fe*x1ps<OaLPfx!+P7JbM
z`5CR1EB>o-)xp+w>7e;=qnpNj?Z+b)#?eq>WhEu-SZY42f4A2G2XzktSLZkzSzi9I
zy4YL{i++bPPn|DcXG!~@#`7m8CNNji02O!n+&4?qZcJ@qar$H_j09!bh4+v)+$K%E
zgaAtMv`xEM?{-}7j^h0!avg}IP2<JC6T!2zu7{Dz>_1|tc>nr)0`>qP`j04hB<SBM
zHqr}FB7}X<Y|R4B!GWhaix@6|CQjVo0HVg;GroHO_`5cQs2zETJO-OG!d*3gf%>!8
z!2{LHESY|)jag;;i=9&Cb6Ht*(EVl5VSQ`B&BZY!=o|uiQ~MD}Q6y6vB9;>sP!r$n
z;;p9PE)uytoPHmAdU_+2HG$W>$E1YMo-nP9j0}eK^;+uPaLwc{4A|KicQcDQB7_D2
zl(8hKb7sm0NCE`pfu8_|0MQ0*@jedT1r8l_Mi5;C&K}&YY}WzQGm&?L;`?pPetSX*
z%rXPH5^gSyCJ%{aC01Z;VL=Btj!>u?zf=G42XkVSyX25p+bNS%`<>^*?ZE!U?RY+E
zGVXl+h}k>%0aqWe<(qLm%4J!Rzj2NHKSuG6k-!TPAS;fSzVdRSJ#qTn+{_SMzu-%h
zf$lDqyR*C4o9=2pY}<9X2Y}&SXE*`Sm85~fUsFZ^j4iy<f1URsA<sHB$KM<@Cu;IH
zh69`|@S+9*v;}~5G-V;m(kX=kDd{w9(@moZS>w9?vcq#1aSOCIq!~LBn4|y|XTamD
zY_i`>t6zOhegQY2DUr|$Fv<F7s>D)%IBdNXw*Soy^nje(?_P|^-heC^;(sIoE?4&O
zIRB)ub+V3r04qRuE*jqsgpAeNjbClQ3Yysr)&Uq(yoB3^MK;&N%3lwAwTUdbN_ibv
z|8I{%c#Fyy3hf^&)_gbt@@&>m7;u8k^~pN+LO960EtlnPOD&+nBp-<ODu-!d)i~N^
z2cRExY3$UW@<jS_&JDZH4j{aPxf0_(?ZDn;_CHck%WZAEJwZd;{CyBlad;ufwPt`L
z1<xJ~F?r4XXuq3n$Mn>KLLg$CXo$Z4YPcwd*J6N}bL;uUv!JL4Z~EWNE*@O^0KJqb
z5*FsB?rdQgA&Kl2t3cZoJ0Bn41D-S=NIErbmyBQBBg@OJ<{CacP)0!D^BG-dPsSIU
zcc*xuX28a<0@^~gb#(xH1UeG{)Vu9|tH0=n<PFMP&UFE9@;>gSk?_9~1pW(nNzi$r
zMPb%wMCQ`vbV%$Jn0EqjGABig>w&1wysun$L)@4krjD1RSUj1x*N(lVA7Uaqn|^ax
z;1v{_MPa<2CFR8rAlhnu`yJoIYE>J>4Gg?QwqDF&jsue1;4;v;*gwtOvj)0__4A%N
zr)FSq+ugo1z*h4WCNXbxZr6IviKs!WjQ^bislEE$5WVNYoQ5cU_vWb(&}0M5=IUko
zZ=g*0P!azapurE^2f%k%Rp`P3U}+4nR3E2nY%cptXd16*^)~JtgtW)|$wHXk<Ff%u
zdf*4ybu3Gxa1Q`|-GE>{US+w@Gy?SiP%<j&IEvBU*WLR`XaWFIXrt?s!}fbwi^XVv
z07k4g2D3m=)LI(DP%j+-G>GeQ#J``*T~XINkoJMCUxji#z!Q_`ep`Km)<iD;yQoj7
z0`lu{_Vf2fP43%vVt<PT0thrxY;A2nRaYnD5>e;YB-p9&6XR)%{j?HV2)x;stzSZc
zMC`_j6vnSweKzyFY=QIuKu3Vn_gIs;weiQLLvN{`xpJ*VfElaa{9hHus+p2T#`3{k
zGnw5doK!s}Ejgr4|FJ(vZ%wQ3{J9hl5u4fJ_VzQLuYJ9Wz#*#Oc;O=k(@E1(-wtR|
zpDu9zX{!nO27VrD0)brmX{318)z#5o2TG~L<UWJLe$C9-W6bXC?wZ4&Xpo~oK|tfT
zu(1(J*$rOPss_bwY`oK)Jg?x?xKvMZx5_>TPJ9hLG8+}u{)R*vj@05QBzJN$CyoQ7
zY&GTMw&|Li-xKDFVx9nSazg+dtHLX>%YKIwrT`wVwPKrO52ykWnNCJ`TSX#wd8)Ki
ziu`tVc5<1M?j+R+*oq<}BaNSEyy4auD-B6j#J}uEQ#~``)EK}}<3sy0U1<jd+@Vu`
edtvR}KN7Uhl#?)Ac><i6!_ZLCQAR3Sg#Hgk#Qp~W

literal 0
HcmV?d00001

diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst
new file mode 100644
index 000000000..cd608643b
--- /dev/null
+++ b/docs/source/api/index.rst
@@ -0,0 +1,10 @@
+#############
+API Reference
+#############
+
+.. toctree::
+    :maxdepth: 2
+
+    sympyextensions/index
+    kernelcreation/index
+    types/index
diff --git a/docs/source/api/kernelcreation/index.rst b/docs/source/api/kernelcreation/index.rst
new file mode 100644
index 000000000..582ee1668
--- /dev/null
+++ b/docs/source/api/kernelcreation/index.rst
@@ -0,0 +1,14 @@
+***************
+Kernel Creation
+***************
+
+The primary interface for creating numerical kernels in pystencils is the function `create_kernel`.
+
+
+.. autoclass:: pystencils.CreateKernelConfig
+    :members:
+
+.. autofunction:: pystencils.create_kernel
+
+.. autoclass:: pystencils.backend.KernelFunction
+    :members:
diff --git a/docs/source/api/sympyextensions/astnodes.rst b/docs/source/api/sympyextensions/astnodes.rst
new file mode 100644
index 000000000..4d5c4b89f
--- /dev/null
+++ b/docs/source/api/sympyextensions/astnodes.rst
@@ -0,0 +1,9 @@
+----------------
+Kernel Structure
+----------------
+
+.. automodule:: pystencils.sympyextensions.astnodes
+
+.. autoclass:: pystencils.sympyextensions.AssignmentCollection
+    :members:
+
diff --git a/docs/source/api/sympyextensions/field.rst b/docs/source/api/sympyextensions/field.rst
new file mode 100644
index 000000000..a435c716c
--- /dev/null
+++ b/docs/source/api/sympyextensions/field.rst
@@ -0,0 +1,9 @@
+-------------------------
+Fields (pystencils.field)
+-------------------------
+
+.. automodule:: pystencils.field
+    :members:
+
+.. autoclass:: pystencils.sympyextensions.ConditionalFieldAccess
+    :members:
diff --git a/docs/source/api/sympyextensions/index.rst b/docs/source/api/sympyextensions/index.rst
new file mode 100644
index 000000000..606a36771
--- /dev/null
+++ b/docs/source/api/sympyextensions/index.rst
@@ -0,0 +1,10 @@
+*****************
+Symbolic Language
+*****************
+
+.. toctree::
+    :maxdepth: 1
+
+    field
+    astnodes
+
diff --git a/docs/source/api/types/basic_types.rst b/docs/source/api/types/basic_types.rst
new file mode 100644
index 000000000..7a8156c45
--- /dev/null
+++ b/docs/source/api/types/basic_types.rst
@@ -0,0 +1,6 @@
+
+Data Type Class Hierarchy
+-------------------------
+
+.. automodule:: pystencils.types.basic_types
+    :members:
diff --git a/docs/source/api/types/index.rst b/docs/source/api/types/index.rst
new file mode 100644
index 000000000..2ac0410f6
--- /dev/null
+++ b/docs/source/api/types/index.rst
@@ -0,0 +1,18 @@
+**********
+Data Types
+**********
+
+Type System Module (pystencils.types)
+-------------------------------------
+
+.. automodule:: pystencils.types
+
+.. autofunction:: pystencils.types.create_type
+.. autofunction:: pystencils.types.create_numeric_type
+
+.. toctree::
+    :maxdepth: 1
+
+    basic_types
+    quick
+
diff --git a/docs/source/api/types/quick.rst b/docs/source/api/types/quick.rst
new file mode 100644
index 000000000..34bc3cae5
--- /dev/null
+++ b/docs/source/api/types/quick.rst
@@ -0,0 +1,6 @@
+Data Type Abbreviations
+-----------------------
+
+
+.. automodule:: pystencils.types.quick
+    :members:
\ No newline at end of file
diff --git a/docs/source/backend/arrays.rst b/docs/source/backend/arrays.rst
new file mode 100644
index 000000000..c1b09d44c
--- /dev/null
+++ b/docs/source/backend/arrays.rst
@@ -0,0 +1,6 @@
+******
+Arrays
+******
+
+.. automodule:: pystencils.backend.arrays
+    :members:
diff --git a/docs/source/backend/ast.rst b/docs/source/backend/ast.rst
new file mode 100644
index 000000000..68aca4ee5
--- /dev/null
+++ b/docs/source/backend/ast.rst
@@ -0,0 +1,9 @@
+********************
+Abstract Syntax Tree
+********************
+
+.. automodule:: pystencils.backend.ast.structural
+    :members:
+
+.. automodule:: pystencils.backend.ast.expressions
+    :members:
diff --git a/doc/sphinx/nbackend/index.rst b/docs/source/backend/index.rst
similarity index 63%
rename from doc/sphinx/nbackend/index.rst
rename to docs/source/backend/index.rst
index 752fa9ccb..3ee952ad9 100644
--- a/doc/sphinx/nbackend/index.rst
+++ b/docs/source/backend/index.rst
@@ -1,6 +1,6 @@
-#############################################################
-Developer's Reference: Code Generation Backend (``nbackend``)
-#############################################################
+##############################################
+Developer's Reference: Code Generation Backend
+##############################################
 
 
 These pages provide a detailed overview of the next-gen code generation backend ``nbackend`` currently being
@@ -11,8 +11,6 @@ all code generation functionality currently implemented in *pystencils* version
     :maxdepth: 1
     
     rationale
-    type_system
-    expressions
     arrays
     ast
     kernelcreation
diff --git a/doc/sphinx/nbackend/jit.rst b/docs/source/backend/jit.rst
similarity index 69%
rename from doc/sphinx/nbackend/jit.rst
rename to docs/source/backend/jit.rst
index 71541527f..f7a02dbd4 100644
--- a/doc/sphinx/nbackend/jit.rst
+++ b/docs/source/backend/jit.rst
@@ -2,5 +2,5 @@
 Just-In-Time Compilation
 ************************
 
-.. automodule:: pystencils.nbackend.jit
+.. automodule:: pystencils.backend.jit
     :members:
diff --git a/doc/sphinx/nbackend/kernelcreation.rst b/docs/source/backend/kernelcreation.rst
similarity index 51%
rename from doc/sphinx/nbackend/kernelcreation.rst
rename to docs/source/backend/kernelcreation.rst
index 8232a23a1..b07f62158 100644
--- a/doc/sphinx/nbackend/kernelcreation.rst
+++ b/docs/source/backend/kernelcreation.rst
@@ -2,5 +2,5 @@
 Kernel Creation
 ***************
 
-.. automodule:: pystencils.nbackend.kernelcreation
+.. automodule:: pystencils.kernelcreation
     
diff --git a/doc/sphinx/nbackend/rationale.rst b/docs/source/backend/rationale.rst
similarity index 100%
rename from doc/sphinx/nbackend/rationale.rst
rename to docs/source/backend/rationale.rst
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 000000000..ae9c01750
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,51 @@
+import datetime
+import re
+
+from pystencils import __version__ as pystencils_version
+
+project = "pystencils"
+html_logo = "_static/img/logo.png"
+
+copyright = (
+    f"{datetime.datetime.now().year}, Martin Bauer, Markus Holzer, Frederik Hennig"
+)
+author = "Martin Bauer, Markus Holzer, Frederik Hennig"
+
+version = re.sub(r"(\d+\.\d+)\.\d+(.*)", r"\1\2", pystencils_version)
+version = re.sub(r"(\.dev\d+).*?$", r"\1", version)
+# The full version, including alpha/beta/rc tags.
+release = pystencils_version
+
+language = "en"
+default_role = "any"
+pygments_style = "sphinx"
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = [
+    "sphinx.ext.autodoc",
+    "sphinx.ext.doctest",
+    "sphinx.ext.intersphinx",
+    "sphinx.ext.mathjax",
+    "sphinx.ext.napoleon",
+]
+
+templates_path = ["_templates"]
+exclude_patterns = []
+
+autodoc_member_order = "bysource"
+autodoc_typehints = "description"
+
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3.8", None),
+    "numpy": ("https://docs.scipy.org/doc/numpy/", None),
+    "matplotlib": ("https://matplotlib.org/", None),
+    "sympy": ("https://docs.sympy.org/latest/", None),
+}
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = "furo"
+html_static_path = ["_static"]
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 000000000..a62225f96
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,18 @@
+
+Welcome to pystencils's documentation!
+======================================
+
+.. toctree::
+   :maxdepth: 1
+   
+   api/index.rst
+   backend/index.rst
+
+
+
+.. Indices and tables
+.. ==================
+
+.. * :ref:`genindex`
+.. * :ref:`modindex`
+.. * :ref:`search`
diff --git a/pyproject.toml b/pyproject.toml
index 0ccdca068..5ef106e59 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -46,7 +46,7 @@ use_cython = [
 ]
 doc = [
     'sphinx',
-    'sphinx_rtd_theme',
+    'furo',
     'nbsphinx',
     'sphinxcontrib-bibtex',
     'sphinx_autodoc_typehints',
diff --git a/src/pystencils/backend/arrays.py b/src/pystencils/backend/arrays.py
index 16203ac1c..421426afc 100644
--- a/src/pystencils/backend/arrays.py
+++ b/src/pystencils/backend/arrays.py
@@ -19,7 +19,7 @@ or even the field shape must be fixed.
 
 The code generation backend models such requirements and assumptions as *constraints*.
 Constraints are external to the arrays themselves. They are created by the AST passes which
-require them and exposed through the `PsKernelFunction` class to the compiler kernel's runtime
+require them and exposed through the `KernelFunction` class to the compiler kernel's runtime
 environment. It is the responsibility of the runtime environment to fulfill all constraints.
 
 For example, if an array ``arr`` should have both a fixed shape and fixed strides,
diff --git a/src/pystencils/backend/jit/__init__.py b/src/pystencils/backend/jit/__init__.py
index b3340a9ab..7938f7083 100644
--- a/src/pystencils/backend/jit/__init__.py
+++ b/src/pystencils/backend/jit/__init__.py
@@ -2,7 +2,7 @@
 JIT compilation in the ``nbackend`` is managed by subclasses of `JitBase`.
 A JIT compiler may freely be created and configured by the user.
 It can then be passed to `create_kernel` using the ``jit`` argument of
-`CreateKernelConfig`, in which case it is hooked into the `PsKernelFunction.compile` method
+`CreateKernelConfig`, in which case it is hooked into the `KernelFunction.compile` method
 of the generated kernel function::
 
     my_jit = MyJit()
@@ -29,6 +29,7 @@ Both are available here through `LegacyCpuJit` and `LegacyGpuJit`.
 from .jit import JitBase, NoJit, LegacyCpuJit, LegacyGpuJit
 
 no_jit = NoJit()
+"""Disables just-in-time compilation for a kernel."""
 
 __all__ = [
     "JitBase",
diff --git a/src/pystencils/backend/kernelcreation/__init__.py b/src/pystencils/backend/kernelcreation/__init__.py
index c3846e2c9..dea2db232 100644
--- a/src/pystencils/backend/kernelcreation/__init__.py
+++ b/src/pystencils/backend/kernelcreation/__init__.py
@@ -92,7 +92,7 @@ and vectorization on CPU platforms with vector capabilities.
 Finalization
 ^^^^^^^^^^^^
 
-At last, the kernel is packed up as a `PsKernelFunction`.
+At last, the kernel is packed up as a `KernelFunction`.
 It is furthermore annotated with constraints collected during the translation, and returned to the user.
 
 """
diff --git a/src/pystencils/backend/kernelfunction.py b/src/pystencils/backend/kernelfunction.py
index 45ec32603..97837492b 100644
--- a/src/pystencils/backend/kernelfunction.py
+++ b/src/pystencils/backend/kernelfunction.py
@@ -137,7 +137,7 @@ class KernelFunction:
     @property
     def name(self) -> str:
         return self._name
-    
+
     @name.setter
     def name(self, n: str):
         self._name = n
diff --git a/src/pystencils/config.py b/src/pystencils/config.py
index cb82785df..2d3327104 100644
--- a/src/pystencils/config.py
+++ b/src/pystencils/config.py
@@ -110,7 +110,7 @@ class CreateKernelConfig:
     """Just-in-time compiler used to compile and load the kernel for invocation from the current Python environment.
     
     If left at `None`, a default just-in-time compiler will be inferred from the `target` parameter.
-    To explicitly disable JIT compilation, pass `nbackend.jit.no_jit`.
+    To explicitly disable JIT compilation, pass `pystencils.nbackend.jit.no_jit`.
     """
 
     function_name: str = "kernel"
@@ -122,18 +122,18 @@ class CreateKernelConfig:
     Options:
      - `None`: Required ghost layers are inferred from field accesses
      - `int`:  A uniform number of ghost layers in each spatial coordinate is applied
-     - `Sequence[int, tuple[int, int]]`: Ghost layers are specified for each spatial coordinate.
+     - ``Sequence[int, tuple[int, int]]``: Ghost layers are specified for each spatial coordinate.
         In each coordinate, a single integer specifies the ghost layers at both the lower and upper iteration limit,
         while a pair of integers specifies the lower and upper ghost layers separately.
 
     When manually specifying ghost layers, it is the user's responsibility to avoid out-of-bounds memory accesses.
-    If `ghost_layers=None` is specified, the iteration region may otherwise be set using the `iteration_slice` option.
+    If ``ghost_layers=None`` is specified, the iteration region may otherwise be set using the `iteration_slice` option.
     """
 
     iteration_slice: None | Sequence[slice] = None
     """Specifies the kernel's iteration slice.
     
-    `iteration_slice` may only be set if `ghost_layers = None`.
+    `iteration_slice` may only be set if ``ghost_layers=None``.
     If it is set, a slice must be specified for each spatial coordinate.
     TODO: Specification of valid slices and their behaviour
     """
diff --git a/src/pystencils/datahandling/datahandling_interface.py b/src/pystencils/datahandling/datahandling_interface.py
index d7a49bab0..33b565e82 100644
--- a/src/pystencils/datahandling/datahandling_interface.py
+++ b/src/pystencils/datahandling/datahandling_interface.py
@@ -3,7 +3,7 @@ from typing import Callable, Dict, Iterable, Optional, Sequence, Tuple, Union
 
 import numpy as np
 
-from pystencils.enums import Target, Backend
+from pystencils.enums import Target
 from pystencils.field import Field, FieldType
 
 
@@ -18,7 +18,6 @@ class DataHandling(ABC):
     """
 
     _GPU_LIKE_TARGETS = [Target.GPU]
-    _GPU_LIKE_BACKENDS = [Backend.CUDA]
 
     # ---------------------------- Adding and accessing data -----------------------------------------------------------
     @property
diff --git a/src/pystencils/datahandling/parallel_datahandling.py b/src/pystencils/datahandling/parallel_datahandling.py
index c0ddc9a46..9edd1d437 100644
--- a/src/pystencils/datahandling/parallel_datahandling.py
+++ b/src/pystencils/datahandling/parallel_datahandling.py
@@ -7,7 +7,6 @@ import waLBerla as wlb
 
 from pystencils.datahandling.blockiteration import block_iteration, sliced_block_iteration
 from pystencils.datahandling.datahandling_interface import DataHandling
-from pystencils.enums import Backend
 from pystencils.field import Field, FieldType
 from pystencils.sympyextensions.typed_sympy import FieldPointerSymbol
 from pystencils.utils import DotDict
diff --git a/src/pystencils/datahandling/serial_datahandling.py b/src/pystencils/datahandling/serial_datahandling.py
index 0f5ddb431..4eb341df5 100644
--- a/src/pystencils/datahandling/serial_datahandling.py
+++ b/src/pystencils/datahandling/serial_datahandling.py
@@ -254,12 +254,12 @@ class SerialDataHandling(DataHandling):
             self.to_gpu(name)
 
     def run_kernel(self, kernel_function, **kwargs):
-        arrays = self.gpu_arrays if kernel_function.ast.backend in self._GPU_LIKE_BACKENDS else self.cpu_arrays
+        arrays = self.gpu_arrays if kernel_function.target.is_gpu() else self.cpu_arrays
         kernel_function(**{**arrays, **kwargs})
 
     def get_kernel_kwargs(self, kernel_function, **kwargs):
         result = {}
-        result.update(self.gpu_arrays if kernel_function.ast.backend in self._GPU_LIKE_BACKENDS else self.cpu_arrays)
+        result.update(self.gpu_arrays if kernel_function.target.is_gpu() else self.cpu_arrays)
         result.update(kwargs)
         return [result]
 
diff --git a/src/pystencils/kernelcreation.py b/src/pystencils/kernelcreation.py
index a79c68c59..b2fe4b664 100644
--- a/src/pystencils/kernelcreation.py
+++ b/src/pystencils/kernelcreation.py
@@ -36,8 +36,17 @@ __all__ = ["create_kernel"]
 def create_kernel(
     assignments: AssignmentCollection | list[Assignment] | Assignment,
     config: CreateKernelConfig = CreateKernelConfig(),
-):
-    """Create a kernel function from an assignment collection."""
+) -> KernelFunction:
+    """Create a kernel function from a set of assignments.
+    
+    Args:
+        assignments: The kernel's sequence of assignments, expressed using SymPy
+        config: The configuration for the kernel translator
+
+    Returns:
+        The numerical kernel in pystencil's internal representation, ready to be
+        exported or compiled
+    """
 
     ctx = KernelCreationContext(
         default_dtype=config.default_dtype, index_dtype=config.index_dtype
diff --git a/src/pystencils/runhelper/db.py b/src/pystencils/runhelper/db.py
index acbe5dfa9..0acf53bc6 100644
--- a/src/pystencils/runhelper/db.py
+++ b/src/pystencils/runhelper/db.py
@@ -9,7 +9,7 @@ from blitzdb.backends.file.backend import serializer_classes
 from blitzdb.backends.file.utils import JsonEncoder
 
 from pystencils.cpu.cpujit import get_compiler_config
-from pystencils import CreateKernelConfig, Target, Backend, Field
+from pystencils import CreateKernelConfig, Target, Field
 
 import json
 import sympy as sp
diff --git a/src/pystencils/sympyextensions/__init__.py b/src/pystencils/sympyextensions/__init__.py
index 1f0a4c5f4..fd1145bcb 100644
--- a/src/pystencils/sympyextensions/__init__.py
+++ b/src/pystencils/sympyextensions/__init__.py
@@ -3,7 +3,8 @@ from .astnodes import (
     AugmentedAssignment,
     AddAugmentedAssignment,
     AssignmentCollection,
-    SymbolGen
+    SymbolGen,
+    ConditionalFieldAccess
 )
 from .typed_sympy import TypedSymbol, CastFunc
 from .simplificationstrategy import SimplificationStrategy
@@ -63,6 +64,7 @@ __all__ = [
     "AddAugmentedAssignment",
     "AssignmentCollection",
     "SymbolGen",
+    "ConditionalFieldAccess",
     "TypedSymbol",
     "CastFunc",
     "SimplificationStrategy",
diff --git a/src/pystencils/types/__init__.py b/src/pystencils/types/__init__.py
index 140151b2b..98fd2dd24 100644
--- a/src/pystencils/types/__init__.py
+++ b/src/pystencils/types/__init__.py
@@ -1,3 +1,13 @@
+"""
+The `pystencils.types` module contains the set of classes used by pystencils
+to model data types. Data types are used extensively within the code generator,
+but can safely be ignored by most users unless you wish to force certain types on
+symbols, generate mixed-precision kernels, et cetera.
+
+For more user-friendly and less verbose access to the type modelling system, refer to
+the `pystencils.types.quick` submodule. 
+"""
+
 from .basic_types import (
     PsType,
     PsCustomType,
diff --git a/src/pystencils/types/basic_types.py b/src/pystencils/types/basic_types.py
index 4648c3210..f62571922 100644
--- a/src/pystencils/types/basic_types.py
+++ b/src/pystencils/types/basic_types.py
@@ -291,17 +291,15 @@ class PsNumericType(PsType, ABC):
     """Class to model numeric types, which are all types that may occur at the top-level inside
     arithmetic-logical expressions.
 
-    Constants
-    ---------
+    **Constants**
 
     Every numeric type has to act as a factory for compile-time constants of that type.
-    The `PsTypedConstant` class relies on `create_constant` to instantiate constants
+    The `PsConstant` class relies on `create_constant` to instantiate constants
     of a given numeric type. The object returned by `create_constant` must implement the
     necessary arithmetic operations, and its arithmetic behaviour must match the given type.
 
     `create_constant` should fail whenever its input cannot safely be interpreted as the given
-    type. As for which interpretations are considered 'safe', it should be as restrictive as possible.
-    However, `create_constant` must *never* fail for the literals ``0``, ``1`` and ``-1``.
+    type.
     """
 
     @abstractmethod
diff --git a/src/pystencils/types/quick.py b/src/pystencils/types/quick.py
index 60ec516f1..7e8628f61 100644
--- a/src/pystencils/types/quick.py
+++ b/src/pystencils/types/quick.py
@@ -1,8 +1,4 @@
-"""Abbreviations and creation functions for pystencils type-modelling classes
-for quick, user-friendly construction and compact pattern matching.
-
-This module is meant to be included whole, e.g. as `from pystencils.nbackend.types.quick import *`
-"""
+"""Quick access to the pystencils data type system."""
 
 from __future__ import annotations
 
@@ -29,7 +25,7 @@ def create_type(type_spec: UserTypeSpec) -> PsType:
     """Create a pystencils type object from a variety of specifications.
 
     Possible arguments are:
-        - Strings ('str'): will be parsed as common C types, throwing an exception if that fails.
+        - Strings (`str`): will be parsed as common C types, throwing an exception if that fails.
           To construct a `PsCustomType` instead, use the constructor of `PsCustomType` or its abbreviation
           ``types.quick.Custom`` instead
         - Python builtin data types (instances of `type`): Attempts to interpret Python numeric types like so:
@@ -39,7 +35,7 @@ def create_type(type_spec: UserTypeSpec) -> PsType:
         - Supported Numpy scalar data types (see https://numpy.org/doc/stable/reference/arrays.scalars.html)
           are converted to pystencils scalar data types
         - Instances of `numpy.dtype`: Attempt to interpret scalar types like above, and structured types as structs.
-        - Instances of `PsAbstractType` will be returned as they are
+        - Instances of `PsType` will be returned as they are
     """
 
     from .parsing import parse_type_string, interpret_python_type, interpret_numpy_dtype
@@ -56,7 +52,7 @@ def create_type(type_spec: UserTypeSpec) -> PsType:
 
 
 def create_numeric_type(type_spec: UserTypeSpec) -> PsNumericType:
-    """Like `make_type`, but only for numeric types."""
+    """Like `create_type`, but only for numeric types."""
     dtype = create_type(type_spec)
     if not isinstance(dtype, PsNumericType):
         raise ValueError(
@@ -66,31 +62,31 @@ def create_numeric_type(type_spec: UserTypeSpec) -> PsNumericType:
 
 
 Custom = PsCustomType
-"""`Custom(name)` matches `PsCustomType(name)`"""
+"""Custom data types are modelled only by their name."""
 
 Scalar = PsScalarType
-"""`Scalar()` matches any subclass of `PsScalarType`"""
+"""``Scalar()`` matches any subclass of ``PsScalarType``"""
 
 Ptr = PsPointerType
-"""`Ptr(t)` matches `PsPointerType(base_type=t)`"""
+"""``Ptr(t)`` matches ``PsPointerType(base_type=t)``"""
 
 Arr = PsArrayType
-"""`Arr(t, s)` matches PsArrayType(base_type=t, size=s)"""
+"""``Arr(t, s)`` matches ``PsArrayType(base_type=t, size=s)``"""
 
 Bool = PsBoolType
-"""Bool() matches PsBoolType()"""
+"""``Bool()`` matches ``PsBoolType()``"""
 
 AnyInt = PsIntegerType
-"""`AnyInt(width)` matches both `PsUnsignedIntegerType(width)` and `PsSignedIntegerType(width)`"""
+"""``AnyInt(width)`` matches both ``PsUnsignedIntegerType(width)`` and ``PsSignedIntegerType(width)``"""
 
 UInt = PsUnsignedIntegerType
-"""`UInt(width)` matches `PsUnsignedIntegerType(width)`"""
+"""``UInt(width)`` matches ``PsUnsignedIntegerType(width)``"""
 
 Int = PsSignedIntegerType
-"""`Int(width)` matches `PsSignedIntegerType(width)`"""
+"""``Int(width)`` matches ``PsSignedIntegerType(width)``"""
 
 SInt = PsSignedIntegerType
-"""`SInt(width)` matches `PsSignedIntegerType(width)`"""
+"""``SInt(width)` matches `PsSignedIntegerType(width)``"""
 
 Fp = PsIeeeFloatType
-"""`Fp(width)` matches `PsIeeeFloatType(width)`"""
+"""``Fp(width)` matches `PsIeeeFloatType(width)``"""
-- 
GitLab