diff --git a/docs/Documentation.pdf b/docs/Documentation.pdf
index 2daecd61500597d00921f5930e6da2c9f14947bd..7d08df0f2fceb1e10f7f095860975e0c9e3bf88e 100644
Binary files a/docs/Documentation.pdf and b/docs/Documentation.pdf differ
diff --git a/docs/Documentation.tex b/docs/Documentation.tex
index bf4db8b0725bdfbc2a18b508252dbfecc78acf69..a4673e810b093a44e246faacb340b0650f2334cd 100644
--- a/docs/Documentation.tex
+++ b/docs/Documentation.tex
@@ -43,7 +43,7 @@
 
 
 \usepackage[Bjarne]{fncychap}
-\usepackage[,numfigreset=2,mathnumfig]{sphinx}
+\usepackage[,numfigreset=2,mathnumfig,mathnumsep={.}]{sphinx}
 
 \fvset{fontsize=auto}
 \usepackage{geometry}
@@ -166,7 +166,8 @@ Functions for finding nearest neighbours using bisection.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.neighbours.SortedError}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{exception\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{SortedError}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{exception}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{SortedError}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Error class for Sortedness
@@ -178,7 +179,8 @@ Error class for Sortedness
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.neighbours.SortedWarning}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{exception\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{SortedWarning}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{exception}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{SortedWarning}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Warning class for Sortedness
@@ -190,7 +192,10 @@ Warning class for Sortedness
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.neighbours.find_nearest}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{find\_nearest}}}{\sphinxparam{\DUrole{n}{vals}}\sphinxparamcomma \sphinxparam{\DUrole{n}{test}}\sphinxparamcomma \sphinxparam{\DUrole{n}{check\_sorted}\DUrole{o}{=}\DUrole{default_value}{True}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.neighbours.}}\sphinxbfcode{\sphinxupquote{find\_nearest}}}
+{\sphinxparam{\DUrole{n}{vals}}\sphinxparamcomma \sphinxparam{\DUrole{n}{test}}\sphinxparamcomma \sphinxparam{\DUrole{n}{check\_sorted}\DUrole{o}{=}\DUrole{default_value}{True}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Find the nearest value in a list of values for each test value.
@@ -252,7 +257,10 @@ neighbours.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Ellipse}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Ellipse}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{a}}\sphinxparamcomma \sphinxparam{\DUrole{n}{b}}\sphinxparamcomma \sphinxparam{\DUrole{n}{theta}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Ellipse}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{a}}\sphinxparamcomma \sphinxparam{\DUrole{n}{b}}\sphinxparamcomma \sphinxparam{\DUrole{n}{theta}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A simple Ellipse Class for an ellipse on the surface of a sphere.
@@ -286,7 +294,10 @@ A simple Ellipse Class for an ellipse on the surface of a sphere.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Ellipse.contains}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{contains}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{contains}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a point is contained within the Ellipse
@@ -304,7 +315,10 @@ Test if a point is contained within the Ellipse
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Ellipse.nearby_rect}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby\_rect}}}{\sphinxparam{\DUrole{n}{rect}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby\_rect}}}
+{\sphinxparam{\DUrole{n}{rect}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a rectangle is near to the Ellipse
@@ -325,7 +339,10 @@ Test if a rectangle is near to the Ellipse
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{QuadTree}}}{\sphinxparam{\DUrole{n}{boundary}}\sphinxparamcomma \sphinxparam{\DUrole{n}{capacity}\DUrole{o}{=}\DUrole{default_value}{5}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{QuadTree}}}
+{\sphinxparam{\DUrole{n}{boundary}}\sphinxparamcomma \sphinxparam{\DUrole{n}{capacity}\DUrole{o}{=}\DUrole{default_value}{5}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A Simple QuadTree class for PyCOADS
@@ -357,7 +374,10 @@ capacity for cells at the maximum depth.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.divide}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{divide}}}{}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{divide}}}
+{}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Divide the QuadTree
@@ -369,7 +389,10 @@ Divide the QuadTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.insert}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{insert}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{insert}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Insert a point into the QuadTree
@@ -387,7 +410,10 @@ Insert a point into the QuadTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.len}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{len}}}{\sphinxparam{\DUrole{n}{\_current\_len}\DUrole{o}{=}\DUrole{default_value}{0}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{len}}}
+{\sphinxparam{\DUrole{n}{\_current\_len}\DUrole{o}{=}\DUrole{default_value}{0}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get the number of points in the OctTree
@@ -405,7 +431,10 @@ Get the number of points in the OctTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.nearby_points}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby\_points}}}{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby\_points}}}
+{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get all points that are nearby another point
@@ -423,7 +452,10 @@ Get all points that are nearby another point
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.query}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{query}}}{\sphinxparam{\DUrole{n}{rect}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{query}}}
+{\sphinxparam{\DUrole{n}{rect}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get points that fall in a rectangle
@@ -441,7 +473,10 @@ Get points that fall in a rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.query_ellipse}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{query\_ellipse}}}{\sphinxparam{\DUrole{n}{ellipse}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{query\_ellipse}}}
+{\sphinxparam{\DUrole{n}{ellipse}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get points that fall in an ellipse.
@@ -459,7 +494,10 @@ Get points that fall in an ellipse.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.QuadTree.remove}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{remove}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{remove}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Remove a Record from the QuadTree if it is in the QuadTree.
@@ -483,7 +521,10 @@ Returns True if the Record is removed.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Record}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Record}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{datetime}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{uid}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{fix\_lon}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{o}{**}\DUrole{n}{data}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Record}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{datetime}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{uid}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{fix\_lon}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{o}{**}\DUrole{n}{data}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 ICOADS Record class
@@ -530,7 +571,10 @@ classes.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Record.distance}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{distance}}}{\sphinxparam{\DUrole{n}{other}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{distance}}}
+{\sphinxparam{\DUrole{n}{other}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute the Haversine distance to another Record
@@ -551,7 +595,10 @@ Compute the Haversine distance to another Record
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Rectangle}}}{\sphinxparam{\DUrole{n}{west}}\sphinxparamcomma \sphinxparam{\DUrole{n}{east}}\sphinxparamcomma \sphinxparam{\DUrole{n}{south}}\sphinxparamcomma \sphinxparam{\DUrole{n}{north}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.quadtree.}}\sphinxbfcode{\sphinxupquote{Rectangle}}}
+{\sphinxparam{\DUrole{n}{west}}\sphinxparamcomma \sphinxparam{\DUrole{n}{east}}\sphinxparamcomma \sphinxparam{\DUrole{n}{south}}\sphinxparamcomma \sphinxparam{\DUrole{n}{north}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A simple Rectangle class
@@ -581,7 +628,10 @@ A simple Rectangle class
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.contains}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{contains}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{contains}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a point is contained within the Rectangle
@@ -599,7 +649,8 @@ Test if a point is contained within the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.edge_dist}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{edge\_dist}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{edge\_dist}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Approximate maximum distance from the centre to an edge
@@ -611,7 +662,10 @@ Approximate maximum distance from the centre to an edge
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.intersects}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{intersects}}}{\sphinxparam{\DUrole{n}{other}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{intersects}}}
+{\sphinxparam{\DUrole{n}{other}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if another Rectangle object intersects this Rectangle
@@ -629,7 +683,8 @@ Test if another Rectangle object intersects this Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.lat}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Centre latitude of the Rectangle
@@ -641,7 +696,8 @@ Centre latitude of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.lat_range}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Latitude range of the Rectangle
@@ -653,7 +709,8 @@ Latitude range of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.lon}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Centre longitude of the Rectangle
@@ -665,7 +722,8 @@ Centre longitude of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.lon_range}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Longitude range of the Rectangle
@@ -677,7 +735,10 @@ Longitude range of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.quadtree.Rectangle.nearby}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby}}}{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby}}}
+{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Check if point is nearby the Rectangle
@@ -707,7 +768,10 @@ neighbours.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{OctTree}}}{\sphinxparam{\DUrole{n}{boundary}}\sphinxparamcomma \sphinxparam{\DUrole{n}{capacity}\DUrole{o}{=}\DUrole{default_value}{5}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{OctTree}}}
+{\sphinxparam{\DUrole{n}{boundary}}\sphinxparamcomma \sphinxparam{\DUrole{n}{capacity}\DUrole{o}{=}\DUrole{default_value}{5}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A Simple OctTree class for PyCOADS.
@@ -757,7 +821,10 @@ capacity for cells at the maximum depth.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.divide}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{divide}}}{}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{divide}}}
+{}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Divide the QuadTree
@@ -769,7 +836,10 @@ Divide the QuadTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.insert}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{insert}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{insert}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Insert a SpaceTimeRecord into the QuadTree.
@@ -791,7 +861,10 @@ is consistent with the OctTree.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.len}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{len}}}{\sphinxparam{\DUrole{n}{\_current\_len}\DUrole{o}{=}\DUrole{default_value}{0}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{len}}}
+{\sphinxparam{\DUrole{n}{\_current\_len}\DUrole{o}{=}\DUrole{default_value}{0}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get the number of points in the OctTree
@@ -809,7 +882,10 @@ Get the number of points in the OctTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.nearby_points}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby\_points}}}{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{t\_dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby\_points}}}
+{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{t\_dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get all points that are nearby another point.
@@ -881,7 +957,10 @@ children OctTrees.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.query}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{query}}}{\sphinxparam{\DUrole{n}{rect}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{query}}}
+{\sphinxparam{\DUrole{n}{rect}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get points that fall in a SpaceTimeRectangle
@@ -899,7 +978,10 @@ Get points that fall in a SpaceTimeRectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.query_ellipse}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{query\_ellipse}}}{\sphinxparam{\DUrole{n}{ellipse}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{query\_ellipse}}}
+{\sphinxparam{\DUrole{n}{ellipse}}\sphinxparamcomma \sphinxparam{\DUrole{n}{points}\DUrole{o}{=}\DUrole{default_value}{None}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get points that fall in an ellipse.
@@ -917,7 +999,10 @@ Get points that fall in an ellipse.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.OctTree.remove}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{remove}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{remove}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Remove a SpaceTimeRecord from the OctTree if it is in the OctTree.
@@ -941,7 +1026,10 @@ Returns True if the SpaceTimeRecord is removed.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeEllipse}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeEllipse}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{a}}\sphinxparamcomma \sphinxparam{\DUrole{n}{b}}\sphinxparamcomma \sphinxparam{\DUrole{n}{theta}}\sphinxparamcomma \sphinxparam{\DUrole{n}{start}}\sphinxparamcomma \sphinxparam{\DUrole{n}{end}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeEllipse}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{a}}\sphinxparamcomma \sphinxparam{\DUrole{n}{b}}\sphinxparamcomma \sphinxparam{\DUrole{n}{theta}}\sphinxparamcomma \sphinxparam{\DUrole{n}{start}}\sphinxparamcomma \sphinxparam{\DUrole{n}{end}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A simple Ellipse Class for an ellipse on the surface of a sphere.
@@ -983,7 +1071,10 @@ A simple Ellipse Class for an ellipse on the surface of a sphere.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeEllipse.contains}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{contains}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{contains}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a point is contained within the Ellipse
@@ -1001,7 +1092,10 @@ Test if a point is contained within the Ellipse
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeEllipse.nearby_rect}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby\_rect}}}{\sphinxparam{\DUrole{n}{rect}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby\_rect}}}
+{\sphinxparam{\DUrole{n}{rect}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a rectangle is near to the Ellipse
@@ -1022,7 +1116,10 @@ Test if a rectangle is near to the Ellipse
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRecord}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRecord}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{datetime}}\sphinxparamcomma \sphinxparam{\DUrole{n}{uid}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{fix\_lon}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{o}{**}\DUrole{n}{data}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRecord}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{datetime}}\sphinxparamcomma \sphinxparam{\DUrole{n}{uid}\DUrole{o}{=}\DUrole{default_value}{None}}\sphinxparamcomma \sphinxparam{\DUrole{n}{fix\_lon}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{o}{**}\DUrole{n}{data}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 ICOADS Record class.
@@ -1077,7 +1174,10 @@ or classes.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRecord.distance}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{distance}}}{\sphinxparam{\DUrole{n}{other}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{distance}}}
+{\sphinxparam{\DUrole{n}{other}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute the Haversine distance to another SpaceTimeRecord.
@@ -1099,7 +1199,10 @@ Only computes spatial distance.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRecords}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRecords}}}{\sphinxparam{\DUrole{n}{iterable}\DUrole{o}{=}\DUrole{default_value}{()}}\sphinxparamcomma \sphinxparam{\DUrole{o}{/}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRecords}}}
+{\sphinxparam{\DUrole{n}{iterable}\DUrole{o}{=}\DUrole{default_value}{()}}\sphinxparamcomma \sphinxparam{\DUrole{positional-only-separator}{\DUrole{o}{\sphinxstyleabbreviation{/} (Positional\sphinxhyphen{}only parameter separator (PEP 570))}}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 List of SpaceTimeRecords
@@ -1111,7 +1214,10 @@ List of SpaceTimeRecords
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRectangle}}}{\sphinxparam{\DUrole{n}{west}}\sphinxparamcomma \sphinxparam{\DUrole{n}{east}}\sphinxparamcomma \sphinxparam{\DUrole{n}{south}}\sphinxparamcomma \sphinxparam{\DUrole{n}{north}}\sphinxparamcomma \sphinxparam{\DUrole{n}{start}}\sphinxparamcomma \sphinxparam{\DUrole{n}{end}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.octtree.}}\sphinxbfcode{\sphinxupquote{SpaceTimeRectangle}}}
+{\sphinxparam{\DUrole{n}{west}}\sphinxparamcomma \sphinxparam{\DUrole{n}{east}}\sphinxparamcomma \sphinxparam{\DUrole{n}{south}}\sphinxparamcomma \sphinxparam{\DUrole{n}{north}}\sphinxparamcomma \sphinxparam{\DUrole{n}{start}}\sphinxparamcomma \sphinxparam{\DUrole{n}{end}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A simple Space Time SpaceTimeRectangle class.
@@ -1163,7 +1269,8 @@ the time extent (dt) is the full time range of the box.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.centre_datetime}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{centre\_datetime}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }datetime}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{centre\_datetime}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }datetime}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 The midpoint time of the Rectangle
@@ -1175,7 +1282,10 @@ The midpoint time of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.contains}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{contains}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{contains}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if a point is contained within the SpaceTimeRectangle
@@ -1193,7 +1303,8 @@ Test if a point is contained within the SpaceTimeRectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.edge_dist}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{edge\_dist}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{edge\_dist}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Approximate maximum distance from the centre to an edge
@@ -1205,7 +1316,10 @@ Approximate maximum distance from the centre to an edge
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.intersects}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{intersects}}}{\sphinxparam{\DUrole{n}{other}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{intersects}}}
+{\sphinxparam{\DUrole{n}{other}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Test if another Rectangle object intersects this Rectangle
@@ -1223,7 +1337,8 @@ Test if another Rectangle object intersects this Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.lat}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Centre latitude of the Rectangle
@@ -1235,7 +1350,8 @@ Centre latitude of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.lat_range}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lat\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Latitude range of the Rectangle
@@ -1247,7 +1363,8 @@ Latitude range of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.lon}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Centre longitude of the Rectangle
@@ -1259,7 +1376,8 @@ Centre longitude of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.lon_range}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{lon\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }float}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 Longitude range of the Rectangle
@@ -1271,7 +1389,10 @@ Longitude range of the Rectangle
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.nearby}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{nearby}}}{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{t\_dist}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{nearby}}}
+{\sphinxparam{\DUrole{n}{point}}\sphinxparamcomma \sphinxparam{\DUrole{n}{dist}}\sphinxparamcomma \sphinxparam{\DUrole{n}{t\_dist}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Check if point is nearby the Rectangle
@@ -1324,7 +1445,8 @@ True if the point is \textless{}= dist + max(dist(centre, corners))
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.octtree.SpaceTimeRectangle.time_range}}
 \pysigstartsignatures
-\pysigline{\sphinxbfcode{\sphinxupquote{property\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{time\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }timedelta}}}
+\pysigline
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{property}\DUrole{w}{ }}}\sphinxbfcode{\sphinxupquote{time\_range}}\sphinxbfcode{\sphinxupquote{\DUrole{p}{:}\DUrole{w}{ }timedelta}}}
 \pysigstopsignatures
 \sphinxAtStartPar
 The time extent of the Rectangle
@@ -1351,7 +1473,10 @@ of the earth is accounted for.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.kdtree.KDTree}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.kdtree.}}\sphinxbfcode{\sphinxupquote{KDTree}}}{\sphinxparam{\DUrole{n}{points}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{20}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.kdtree.}}\sphinxbfcode{\sphinxupquote{KDTree}}}
+{\sphinxparam{\DUrole{n}{points}}\sphinxparamcomma \sphinxparam{\DUrole{n}{depth}\DUrole{o}{=}\DUrole{default_value}{0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{max\_depth}\DUrole{o}{=}\DUrole{default_value}{20}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A Haverine distance implementation of a balanced KDTree.
@@ -1390,7 +1515,10 @@ only 1 point in the branch.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.kdtree.KDTree.delete}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{delete}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{delete}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Delete a Record from the KDTree. May unbalance the KDTree
@@ -1408,7 +1536,10 @@ Delete a Record from the KDTree. May unbalance the KDTree
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.kdtree.KDTree.insert}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{insert}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{insert}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Insert a Record into the KDTree. May unbalance the KDTree.
@@ -1429,7 +1560,10 @@ The point will not be inserted if it is already in the KDTree.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.kdtree.KDTree.query}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{query}}}{\sphinxparam{\DUrole{n}{point}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{query}}}
+{\sphinxparam{\DUrole{n}{point}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Find the nearest Record within the KDTree to a query Record
@@ -1457,7 +1591,10 @@ comparisons between GreatCircle objects.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.GreatCircle}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{GreatCircle}}}{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{R}\DUrole{o}{=}\DUrole{default_value}{6371}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{\DUrole{k}{class}\DUrole{w}{ }}}\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{GreatCircle}}}
+{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{R}\DUrole{o}{=}\DUrole{default_value}{6371}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 A GreatCircle object for a pair of positions.
@@ -1497,7 +1634,10 @@ Construct a great circle path between a pair of positions.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.GreatCircle.dist_from_point}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{dist\_from\_point}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{dist\_from\_point}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute distance from the GreatCircle to a point on the sphere.
@@ -1530,7 +1670,10 @@ float
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.GreatCircle.intersection}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{intersection}}}{\sphinxparam{\DUrole{n}{other}}\sphinxparamcomma \sphinxparam{\DUrole{n}{epsilon}\DUrole{o}{=}\DUrole{default_value}{0.01}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{intersection}}}
+{\sphinxparam{\DUrole{n}{other}}\sphinxparamcomma \sphinxparam{\DUrole{n}{epsilon}\DUrole{o}{=}\DUrole{default_value}{0.01}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Determine intersection position with another GreatCircle.
@@ -1572,7 +1715,10 @@ Position of intersection
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.GreatCircle.intersection_angle}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{intersection\_angle}}}{\sphinxparam{\DUrole{n}{other}}\sphinxparamcomma \sphinxparam{\DUrole{n}{epsilon}\DUrole{o}{=}\DUrole{default_value}{0.01}}}{}
+\pysiglinewithargsret
+{\sphinxbfcode{\sphinxupquote{intersection\_angle}}}
+{\sphinxparam{\DUrole{n}{other}}\sphinxparamcomma \sphinxparam{\DUrole{n}{epsilon}\DUrole{o}{=}\DUrole{default_value}{0.01}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get angle of intersection with another GreatCircle.
@@ -1616,7 +1762,10 @@ float | None
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.cartesian_to_lonlat}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{cartesian\_to\_lonlat}}}{\sphinxparam{\DUrole{n}{x}}\sphinxparamcomma \sphinxparam{\DUrole{n}{y}}\sphinxparamcomma \sphinxparam{\DUrole{n}{z}}\sphinxparamcomma \sphinxparam{\DUrole{n}{to\_radians}\DUrole{o}{=}\DUrole{default_value}{False}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{cartesian\_to\_lonlat}}}
+{\sphinxparam{\DUrole{n}{x}}\sphinxparamcomma \sphinxparam{\DUrole{n}{y}}\sphinxparamcomma \sphinxparam{\DUrole{n}{z}}\sphinxparamcomma \sphinxparam{\DUrole{n}{to\_radians}\DUrole{o}{=}\DUrole{default_value}{False}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Get lon, and lat from cartesian coordinates.
@@ -1667,7 +1816,10 @@ Get lon, and lat from cartesian coordinates.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.great_circle.polar_to_cartesian}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{polar\_to\_cartesian}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{R}\DUrole{o}{=}\DUrole{default_value}{6371}}\sphinxparamcomma \sphinxparam{\DUrole{n}{to\_radians}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{n}{normalised}\DUrole{o}{=}\DUrole{default_value}{True}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.great\_circle.}}\sphinxbfcode{\sphinxupquote{polar\_to\_cartesian}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{R}\DUrole{o}{=}\DUrole{default_value}{6371}}\sphinxparamcomma \sphinxparam{\DUrole{n}{to\_radians}\DUrole{o}{=}\DUrole{default_value}{True}}\sphinxparamcomma \sphinxparam{\DUrole{n}{normalised}\DUrole{o}{=}\DUrole{default_value}{True}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Convert from polars coordinates to cartesian.
@@ -1724,7 +1876,10 @@ navigational information to DataFrames.
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.distance_metrics.bearing}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{bearing}}}{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{bearing}}}
+{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute the bearing of a track from (lon0, lat0) to (lon1, lat1).
@@ -1768,7 +1923,10 @@ float
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.distance_metrics.destination}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{destination}}}{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{bearing}}\sphinxparamcomma \sphinxparam{\DUrole{n}{distance}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{destination}}}
+{\sphinxparam{\DUrole{n}{lon}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat}}\sphinxparamcomma \sphinxparam{\DUrole{n}{bearing}}\sphinxparamcomma \sphinxparam{\DUrole{n}{distance}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute destination of a great circle path.
@@ -1816,7 +1974,10 @@ tuple{[}float, float{]}
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.distance_metrics.gcd_slc}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{gcd\_slc}}}{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{gcd\_slc}}}
+{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute great circle distance on earth surface between two locations.
@@ -1857,7 +2018,10 @@ float
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.distance_metrics.haversine}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{haversine}}}{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{haversine}}}
+{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute Haversine distance between two points.
@@ -1898,7 +2062,10 @@ float
 \begin{fulllineitems}
 \phantomsection\label{\detokenize{users_guide:GeoSpatialTools.distance_metrics.midpoint}}
 \pysigstartsignatures
-\pysiglinewithargsret{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{midpoint}}}{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}{}
+\pysiglinewithargsret
+{\sphinxcode{\sphinxupquote{GeoSpatialTools.distance\_metrics.}}\sphinxbfcode{\sphinxupquote{midpoint}}}
+{\sphinxparam{\DUrole{n}{lon0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat0}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lon1}}\sphinxparamcomma \sphinxparam{\DUrole{n}{lat1}}}
+{}
 \pysigstopsignatures
 \sphinxAtStartPar
 Compute the midpoint of a great circle track
diff --git a/pyproject.toml b/pyproject.toml
index 1c70e5fc8289352225ebb7ceb71ddfd9d86b56a6..649f1c692cccf2adfda57b901e829143909c6018 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,9 +1,9 @@
 [build-system]
 requires = [
-    "setuptools>=42",
-    "wheel",
-    "setuptools_scm[toml]>=3.4",
-    "setuptools_scm_git_archive"
+  "setuptools>=42",
+  "wheel",
+  "setuptools_scm[toml]>=3.4",
+  "setuptools_scm_git_archive",
 ]
 build-backend = "setuptools.build_meta"
 
@@ -13,90 +13,73 @@ packages = ["GeoSpatialTools"]
 [project]
 name = "GeoSpatialTools"
 version = "0.11.0"
-dependencies = [
-    "numpy",
-]
+dependencies = ["numpy"]
 requires-python = ">=3.9"
 authors = [
-    {name = "Joseph Siddons", email = "josidd@noc.ac.uk"},
-    {name = "Richard Cornes", email = "rcornes@noc.ac.uk"},
-]
-maintainers = [
-    {name = "Joseph Siddons", email = "josidd@noc.ac.uk"},
+  { name = "Joseph Siddons", email = "josidd@noc.ac.uk" },
+  { name = "Richard Cornes", email = "rcornes@noc.ac.uk" },
 ]
+maintainers = [{ name = "Joseph Siddons", email = "josidd@noc.ac.uk" }]
 description = "Tools for processing geo spatial data."
 readme = "README.md"
-license = {file = "LICENSE"}
-keywords = [
-    "spatial", "geospatial", "quadtree", "octtree", "nearest neighbour",
-]
+license = { file = "LICENSE" }
+keywords = ["spatial", "geospatial", "quadtree", "octtree", "nearest neighbour"]
 classifiers = [
-    "Development Status :: 1 - PreAlpha",
-    "Intended Audience :: Science/Research",
-    "Programming Language :: Python :: 3.11",
-    "Operating System :: OS Independent",
+  "Development Status :: 1 - PreAlpha",
+  "Intended Audience :: Science/Research",
+  "Programming Language :: Python :: 3.11",
+  "Operating System :: OS Independent",
 ]
 
 [project.optional-dependencies]
-notebooks = [
-    "ipykernel",
-    "polars"
-]
-test = [
-    "pytest",
-]
+notebooks = ["ipykernel", "polars"]
+test = ["pytest>=8.3.4"]
 docs = [
-    "sphinx>=7.4.7",
-    "sphinx-autodoc-typehints>=2.3.0",
-    "sphinx-rtd-theme>=3.0.2",
+  "sphinx>=8.2.1",
+  "sphinx-autodoc-typehints>=3.1.0",
+  "sphinx-rtd-theme>=3.0.2",
 ]
 all = [
-    "ipykernel",
-    "polars",
-    "pytest",
-    "sphinx>=7.4.7",
-    "sphinx-autodoc-typehints>=2.3.0",
-    "sphinx-rtd-theme>=3.0.2",
+  "ipykernel",
+  "polars",
+  "pytest",
+  "sphinx>=8.2.1",
+  "sphinx-autodoc-typehints>=3.1.0",
+  "sphinx-rtd-theme>=3.0.2",
 ]
 
 [tool.ruff]
 line-length = 80
 indent-width = 4
 target-version = "py311"
-exclude = [
-    ".eggs",
-    ".git",
-    ".venv",
-    "build",
-    "venv",
-]
+exclude = [".eggs", ".git", ".venv", "build", "venv"]
 
 [tool.ruff.lint]
 extend-select = [
-  "RUF022" # unsorted-dunder-all
+  "RUF022", # unsorted-dunder-all
 ]
 ignore = [
   "D205", # blank-line-after-summary
   "D400", # ends-in-period
   "D401", # non-imperative-mood
-  "D105" # missing docstring in magic method
+  "D105", # missing docstring in magic method
 ]
 preview = true
 select = [
-  "C90", # mccabe-complexity
-  "D", # docstrings
-  "E", # pycodestyle errors
-  "F", # pyflakes
+  "C90",  # mccabe-complexity
+  "D",    # docstrings
+  "E",    # pycodestyle errors
+  "F",    # pyflakes
   "N802", # invalid-function-name
-  "S", # bandit
-  "W" # pycodestyle warnings
+  "S",    # bandit
+  "W",    # pycodestyle warnings
 ]
 
 [tool.ruff.format]
-quote-style = "double" # Like Black, use double quotes for strings.
-indent-style = "space" # Like Black, indent with spaces, rather than tabs.
+quote-style = "double"            # Like Black, use double quotes for strings.
+indent-style = "space"            # Like Black, indent with spaces, rather than tabs.
 skip-magic-trailing-comma = false # Like Black, respect magic trailing commas.
-line-ending = "auto" # Like Black, automatically detect the appropriate line ending.
+line-ending = "auto"              # Like Black, automatically detect the appropriate line ending.
 
 [tool.ruff.lint.pydocstyle]
 convention = "numpy"
@@ -111,3 +94,6 @@ xarray = "xr"
 
 [project.urls]
 Repository = "https://git.noc.ac.uk/nocsurfaceprocesses/geospatialtools"
+
+[dependency-groups]
+dev = ["bpython>=0.25"]
diff --git a/test/test_quadtree.py b/test/test_quadtree.py
index 9f4546c80d54e279b82686e70fd99cc4f5ae57ce..482f9c5be5dbf52ce3541bb5c49b37b9d3de8fc4 100644
--- a/test/test_quadtree.py
+++ b/test/test_quadtree.py
@@ -81,7 +81,7 @@ class TestQuadTree(unittest.TestCase):
             Record(10, 5),
             Record(19, 1),
             Record(0, 0),
-            Record(-2, -9.2),
+            Record(-2, -9.2),  # Not included
             Record(12.8, 2.1),
         ]
         expected = [
@@ -94,7 +94,7 @@ class TestQuadTree(unittest.TestCase):
         for point in points:
             qtree.insert(point)
         assert qtree.divided
-        assert qtree.len() == len(points)
+        assert qtree.len() == len(points) - 1
         res = [
             qtree.points,
             qtree.northwest.points,