From d57011e63da9c039173e6345406b8bca9fd34d51 Mon Sep 17 00:00:00 2001
From: "Adoram-Kershner, Lauren" <ladoram-kershner@usgs.gov>
Date: Tue, 28 Jun 2022 21:37:41 +0000
Subject: [PATCH] documentation updates

---
 README.md                                     |   4 +-
 autocnet/camera/camera.py                     |   2 +-
 autocnet/camera/utils.py                      |   2 +-
 autocnet/cg/change_detection.py               |   3 +-
 autocnet/control/control.py                   |   2 +-
 autocnet/graph/edge.py                        |   4 +-
 autocnet/graph/network.py                     | 288 ++++++++++++++----
 autocnet/graph/node.py                        |   2 +-
 autocnet/io/db/connection.py                  |   6 +
 autocnet/io/db/controlnetwork.py              |  27 +-
 autocnet/io/keypoints.py                      |  10 +-
 autocnet/matcher/cpu_decompose.py             |  10 +-
 autocnet/matcher/cpu_outlier_detector.py      |   7 +
 autocnet/matcher/cpu_ring_matcher.py          |  13 +-
 autocnet/matcher/cross_instrument_matcher.py  |  20 +-
 autocnet/matcher/cuda_extractor.py            |   6 +-
 autocnet/matcher/naive_template.py            |   2 +
 autocnet/matcher/subpixel.py                  |  86 +++---
 autocnet/spatial/overlap.py                   |  16 +-
 autocnet/transformation/fundamental_matrix.py |  18 +-
 autocnet/transformation/homography.py         |   2 +
 autocnet/utils/utils.py                       |  16 +-
 config/demo.yml                               |   2 +-
 docs/Makefile                                 |   3 +-
 docs/conf.py                                  |  15 +-
 docs/developers/index.rst                     |   3 +
 docs/index.rst                                |   6 +-
 docs/library/graph/edge.rst                   |   6 +-
 docs/library/graph/node.rst                   |   7 +-
 docs/license.rst                              |  76 +++--
 docs/users/index.rst                          |   5 +-
 docs/users/installation.rst                   |   2 +-
 docs/users/tutorials/apollopan/index.rst      |  18 ++
 .../change_detection/Change_Detection.ipynb   |  36 +--
 docs/users/tutorials/index.rst                |  40 +--
 .../tutorials/isis_ingestion/from_cnet.ipynb  |  31 +-
 docs/users/tutorials/isis_ingestion/index.rst |   8 +
 .../isis_ingestion/overlap_check.ipynb        |  17 +-
 .../outlier_detection/outlier_detection.ipynb |  35 +--
 .../FY21_workshop/0_jupyter_basics.ipynb      |   4 +-
 .../1_python_software_tutorial.ipynb          |   2 +-
 .../FY21_workshop/2_plio_analysis.ipynb       |   6 +-
 .../FY21_workshop/3_outlier_detection.ipynb   |  33 +-
 .../FY21_workshop/4_network_generation.ipynb  |  21 +-
 docs/users/workshops/index.rst                |   2 +
 45 files changed, 573 insertions(+), 351 deletions(-)
 create mode 100644 docs/users/tutorials/apollopan/index.rst
 create mode 100644 docs/users/tutorials/isis_ingestion/index.rst

diff --git a/README.md b/README.md
index b3da3428..39595280 100644
--- a/README.md
+++ b/README.md
@@ -118,7 +118,7 @@ source_db_config = {'username':'jay',
 
 # Subset the data store using a spatial query.
 geom = 'LINESTRING(145 10, 145 10.25, 145.25 10.25, 145.25 10, 145 10)'
-srid = 949900
+srid = 104971
 outpath = '/scratch/some/path/for/data'
 query = f"SELECT * FROM ctx WHERE ST_INTERSECTS(geom, ST_Polygon(ST_GeomFromText('{geom}'), {srid})) = TRUE"
 ncg.add_from_remote_database(source_db_config, outpath, query_string=query)
@@ -136,7 +136,7 @@ the quert string be valid SQL. `geom = 'LINESTRING(145 10, 145 10.25, 145.25
 
 The PostGIS query requires a valid SRID for the input geometry, so we
 explicitly define that here. This is the SRID that the footprints are being
-stored in inside of the data store. `srid = 949900` The srid here is a custom
+stored in inside of the data store. `srid = 104971` The srid here is a custom
 srid that has been added to the data store spatial reference table; the id can
 be any arbitrary number as long as it exists in the spatial reference table.
 
diff --git a/autocnet/camera/camera.py b/autocnet/camera/camera.py
index 382db220..2c1eff04 100644
--- a/autocnet/camera/camera.py
+++ b/autocnet/camera/camera.py
@@ -115,7 +115,7 @@ def projection_error(p1, p, pt, pt1):
     the gold standard method for fundamental matrix estimation.
 
     Parameters
-    -----------
+    ----------
     p1 : ndarray
          (3,4) camera matrix
 
diff --git a/autocnet/camera/utils.py b/autocnet/camera/utils.py
index cbdebe7e..eaa78808 100644
--- a/autocnet/camera/utils.py
+++ b/autocnet/camera/utils.py
@@ -15,7 +15,7 @@ def normalize(a):
     """
     Normalize a set of coordinates such that the origin is
     translated to the center and then scaled isotropically such
-    that the average distance from the origin is $\sqrt{2}$.
+    that the average distance from the origin is :math:`\\sqrt{2}`.
 
     Parameters
     ----------
diff --git a/autocnet/cg/change_detection.py b/autocnet/cg/change_detection.py
index a51a5ae2..f062234a 100644
--- a/autocnet/cg/change_detection.py
+++ b/autocnet/cg/change_detection.py
@@ -200,8 +200,7 @@ def okubogar_detector(image1, image2, nbins=50, extractor_method="orb", image_fu
 
      See Also
      --------
-
-     feature extractor: autocnet.matcher.cpu_extractor.extract_features
+     autocnet.matcher.cpu_extractor.extract_features : for description of information associated with the feature extractor
 
      """
      if isinstance(image1, GeoDataset):
diff --git a/autocnet/control/control.py b/autocnet/control/control.py
index bfd447a0..1029f5f6 100644
--- a/autocnet/control/control.py
+++ b/autocnet/control/control.py
@@ -57,7 +57,7 @@ def identify_potential_overlaps(cg, cn, overlap=True):
     Parameters
     ----------
     overlap : boolean
-              If True, apply aprint(g)n additional point in polygon check, where
+              If True, apply an additional point in polygon check, where
               the polygon is the footprint intersection between images and
               the point is a keypoint projected into lat/lon space.  Note
               that the projection can be inaccurate if the method used
diff --git a/autocnet/graph/edge.py b/autocnet/graph/edge.py
index b2de3eb5..02575e7d 100644
--- a/autocnet/graph/edge.py
+++ b/autocnet/graph/edge.py
@@ -275,7 +275,9 @@ class Edge(dict, MutableMapping):
         pass
 
     def overlap_check(self):
-        """Creates a mask for matches on the overlap"""
+        """
+        Creates a mask for matches on the overlap
+        """
         if not (self["source_mbr"] and self["destin_mbr"]):
             log.warning(
                 "Cannot use overlap constraint, minimum bounding rectangles"
diff --git a/autocnet/graph/network.py b/autocnet/graph/network.py
index acfacc49..fa299aa8 100644
--- a/autocnet/graph/network.py
+++ b/autocnet/graph/network.py
@@ -89,7 +89,7 @@ class CandidateGraph(nx.Graph):
 
     cn : object
          A control network object instantiated by calling generate_cnet.
-    ----------
+
     """
 
     node_factory = Node
@@ -286,6 +286,15 @@ class CandidateGraph(nx.Graph):
 
     @classmethod
     def from_save(cls, input_file):
+        """
+        Loads a saved autocnet control network from a given input file
+
+        Parameters
+        ----------
+
+        input_file : str
+                     The saved off autocnet control network to be loaded
+        """
         return io_network.load(input_file)
 
     def _update_date(self):
@@ -319,10 +328,10 @@ class CandidateGraph(nx.Graph):
         Parameters
         ----------
         image_name : str
-                     That is matched using a simple 'in' check to 
+                     That is matched using a simple 'in' check to
                      node['image_name']
-        
-        Returns  
+
+        Returns
         -------
         i : int
             The node index
@@ -333,6 +342,26 @@ class CandidateGraph(nx.Graph):
                 return i
 
     def get_matches(self, clean_keys=[]):
+        """
+        Returns all matched features on all edges within the CandidateGraph
+
+        Parameters
+        ----------
+        clean_keys : list
+                     A list of keys which reference masks previous attached to 
+                     the edge by outlier detection methods
+
+        Returns
+        -------
+        matches : list
+                  All matches from each edge in the graph as a dictionary
+
+        See Also
+        --------
+        autocnet.spatial.fundamental_matrix.update_fundamental_mask: example of a function which returns an outlier mask
+        autocnet.spatial.fundamental_matrix.compute_fundamental_matrix: example of a function which returns an outlier mask
+        autocnet.spatial.homography.compute_homography: example of a function which returns an outlier mask
+        """
         matches = []
         for s, d, e in self.edges_iter(data=True):
             match, _ = e.clean(clean_keys=clean_keys)
@@ -461,7 +490,11 @@ class CandidateGraph(nx.Graph):
 
     def extract_features_with_tiling(self, *args, **kwargs): #pragma: no cover
         """
+        Extract interest points from a tiled array.
 
+        See Also
+        --------
+        autocnet.graph.node.Node.extract_features_with_tiling
         """
         self.apply(Node.extract_features_with_tiling, args=args, **kwargs)
 
@@ -504,7 +537,7 @@ class CandidateGraph(nx.Graph):
         For all connected edges in the graph, apply feature matching
 
         See Also
-        ----------
+        --------
         autocnet.graph.edge.Edge.match
         """
         self.apply_func_to_edges('match', *args, **kwargs)
@@ -527,9 +560,9 @@ class CandidateGraph(nx.Graph):
 
         See Also
         --------
-        autocnet.graoh.edge.Edge.compute_mbr
+        autocnet.graph.edge.Edge.compute_overlap
         """
-        self.apply_func_to_edges('estimate_mbr', *args, **kwargs)
+        self.apply_func_to_edges('compute_overlap', *args, **kwargs)
 
     def compute_clusters(self, func=markov_cluster.mcl, *args, **kwargs):
         """
@@ -553,8 +586,8 @@ class CandidateGraph(nx.Graph):
     def compute_triangular_cycles(self):
         """
         Find all cycles of length 3.  This is similar
-         to cycle_basis (networkX), but returns all cycles.
-         As opposed to all basis cycles.
+        to cycle_basis (networkX), but returns all cycles.
+        As opposed to all basis cycles.
 
         Returns
         -------
@@ -590,7 +623,7 @@ class CandidateGraph(nx.Graph):
         mst = nx.minimum_spanning_tree(self)
         return self.create_edge_subgraph(mst.edges())
 
-    def apply_func_to_edges(self, function, nodes=[], *args, **kwargs):
+    def apply_func_to_edges(self, function, *args, **kwargs):
         """
         Iterates over edges using an optional mask and and applies the given function.
         If func is not an attribute of Edge, raises AttributeError
@@ -600,8 +633,11 @@ class CandidateGraph(nx.Graph):
         function : obj
                    function to be called on every edge
 
-        graph_mask_keys : list
-                          of keys in graph_masks
+        args : iterable
+               Some iterable of positional arguments for function.
+
+        kwargs : dict
+                 keyword args to pass into function.
         """
         return_lis = []
         if callable(function):
@@ -683,32 +719,67 @@ class CandidateGraph(nx.Graph):
         '''
         Apply a ratio check to all edges in the graph
 
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the
+               ratio_check function.
+
+        kwargs : dict
+                 keyword args to pass into the ratio_check function.
+
         See Also
         --------
-        autocnet.matcher.cpu_outlier_detector.DistanceRatio.compute
+        autocnet.matcher.cpu_outlier_detector.distance_ratio
         '''
         self.apply_func_to_edges('ratio_check', *args, **kwargs)
 
     def compute_overlaps(self, *args, **kwargs):
         '''
         Computes overlap MBRs for all edges
+
+
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the
+               compute_overlap function.
+
+        kwargs : dict
+                 keyword args to pass into the compute_overlap function.
+
+        See Also
+        --------
+        autocnet.graph.edge.Edge.compute_overlap
         '''
         self.apply_func_to_edges('compute_overlap', *args, **kwargs)
 
-    def overlap_checks(self, *args, **kwargs):
+    def overlap_checks(self):
         '''
         Apply overlap check to all edges in the graph
         '''
-        self.apply_func_to_edges('overlap_check', *args, **kwargs)
+        self.apply_func_to_edges('overlap_check')
 
     def compute_homographies(self, *args, **kwargs):
         '''
         Compute homographies for all edges using identical parameters
 
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the
+               compute_homography function.
+
+        kwargs : dict
+                 keyword args to pass into the compute_homography function.
+
         See Also
         --------
         autocnet.graph.edge.Edge.compute_homography
-        autocnet.matcher.cpu_outlier_detector.compute_homography
+        autocnet.transformation.homography.compute_homography
         '''
         self.apply_func_to_edges('compute_homography', *args, **kwargs)
 
@@ -716,9 +787,20 @@ class CandidateGraph(nx.Graph):
         '''
         Compute fundmental matrices for all edges using identical parameters
 
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the
+               compute_fundamental_matrix function.
+
+        kwargs : dict
+                 keyword args to pass into the compute_fundamental_matrix function.
+
         See Also
         --------
-        autocnet.matcher.cpu_outlier_detector.compute_fundamental_matrix
+        autocnet.graph.edge.Edge.compute_fundamental_matrix
+        autocnet.transformation.fundamental_matrix.compute_fundamental_matrix
         '''
         self.apply_func_to_edges('compute_fundamental_matrix', *args, **kwargs)
 
@@ -726,6 +808,16 @@ class CandidateGraph(nx.Graph):
         '''
         Compute subpixel offsets for all edges using identical parameters
 
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the
+               subpixel_register function.
+
+        kwargs : dict
+                 keyword args to pass into the subpixel_register function.
+
         See Also
         --------
         autocnet.graph.edge.Edge.subpixel_register
@@ -736,9 +828,18 @@ class CandidateGraph(nx.Graph):
         '''
         Apply a metric of point suppression to the graph
 
+        Parameters
+        ----------
+
+        args : iterable
+               Some iterable of positional arguments for the suppress function.
+
+        kwargs : dict
+                 keyword args to pass into the suppress function.
+
         See Also
         --------
-        autocnet.matcher.cpu_outlier_detector.SpatialSuppression
+        autocnet.matcher.cpu_outlier_detector.spatial_suppression
         '''
         self.apply_func_to_edges('suppress', *args, **kwargs)
 
@@ -748,7 +849,7 @@ class CandidateGraph(nx.Graph):
 
         See Also
         --------
-        autocnet.cg.cg.two_image_overlap
+        autocnet.cg.cg.two_poly_overlap
         '''
         self.apply_func_to_edges('overlap')
 
@@ -962,7 +1063,8 @@ class CandidateGraph(nx.Graph):
 
         Parameters
         ----------
-        func : function which returns bool used to filter out edges
+        func : function
+               A function which returns bool used to filter out edges
 
         Returns
         -------
@@ -984,7 +1086,7 @@ class CandidateGraph(nx.Graph):
         Parameters
         ----------
         node_id : int
-                       Integer value for a given node
+                  Integer value for a given node
 
         Returns
         -------
@@ -1004,7 +1106,7 @@ class CandidateGraph(nx.Graph):
         Parameters
         ----------
         kwargs : dict
-                      keyword arguments that get passed to compute_voronoi
+                 keyword arguments that get passed to compute_voronoi
 
         clean_keys : list
                      Strings used to apply masks to omit correspondences
@@ -1166,6 +1268,16 @@ class CandidateGraph(nx.Graph):
         return True
 
     def footprints(self):
+        """
+        Gets the geodata footprint polygons of ever node in the graph and
+        returns them in a GeoDataFrame
+
+        Returns
+        -------
+        : GeoDataFrame
+          GeoDataFrame containing all footprint polygons from each node in the
+          graph
+        """
         geoms = []
         names = []
         for i, node in self.nodes.data('data'):
@@ -1175,11 +1287,34 @@ class CandidateGraph(nx.Graph):
         return gpd.GeoDataFrame(names, geometry=geoms)
 
     def identify_potential_overlaps(self, **kwargs):
+        """
+        Identify those points that could have additional measures
+
+        See Also
+        --------
+        autocnet.control.control.identify_potential_overlaps
+        """
         cc = control.identify_potential_overlaps(
             self, self.controlnetwork, **kwargs)
         return cc
 
     def nodes_iter(self, data=False):
+        """
+        Iterates over all nodes in the CandidateGraph
+
+        Parameters
+        ----------
+        data : bool
+               Whether to include the data from the node or just the index
+
+        Yields
+        ------
+        i : int
+            Index of the Node
+
+        n : Node
+            Node object
+        """
         for i, n in self.nodes.data('data'):
             if data:
                 yield i, n
@@ -1187,6 +1322,25 @@ class CandidateGraph(nx.Graph):
                 yield i
 
     def edges_iter(self, data=False):
+        """
+        Iterates over all edges in the CandidateGraph
+
+        Parameters
+        ----------
+        data : bool
+               Whether to include the data from the edge or just the indices
+
+        Yields
+        ------
+        s : int
+            Index of source Node
+
+        d : int
+            Index of source Node
+
+        e : Edge
+            Edge object
+        """
         for s, d, e in self.edges.data('data'):
             if data:
                 yield s, d, e
@@ -1264,6 +1418,14 @@ class CandidateGraph(nx.Graph):
         self.controlnetwork.index.name = 'measure_id'
 
     def remove_measure(self, idx):
+        """
+        Removes a measure from the CandidateGraph based on a given index
+
+        Parameters
+        ----------
+        idx : int
+              Index of the measure to remove
+        """
         self.controlnetwork = self.controlnetwork.drop(
             self.controlnetwork.index[idx])
         for r in idx:
@@ -1532,11 +1694,11 @@ class NetworkCandidateGraph(CandidateGraph):
         self.measure_update_counter = conf['basename'] + ':measure_update_counter'
 
         self.queue_names = [self.processing_queue, self.completed_queue, self.working_queue,
-                           self.point_insert_queue, self.point_insert_counter, 
+                           self.point_insert_queue, self.point_insert_counter,
                            self.measure_update_queue, self.measure_update_counter]
-         
+
     def _setup_asynchronous_workers(self):
-        
+
         # Default the counters to zero, unless they are already set from a run
         # where the NCG did not exit cleanly
         if self.redis_queue.get(self.point_insert_counter) is None:
@@ -1548,10 +1710,10 @@ class NetworkCandidateGraph(CandidateGraph):
 
         # Start the insert watching thread
         self.point_inserter_stop_event = threading.Event()
-        self.point_inserter = threading.Thread(target=watch_insert_queue, 
+        self.point_inserter = threading.Thread(target=watch_insert_queue,
                                                args=(self.redis_queue,
-                                                     self.point_insert_queue, 
-                                                     self.point_insert_counter, 
+                                                     self.point_insert_queue,
+                                                     self.point_insert_counter,
                                                      self.engine,
                                                      self.point_inserter_stop_event))
         self.point_inserter.setDaemon(True)
@@ -1559,14 +1721,14 @@ class NetworkCandidateGraph(CandidateGraph):
 
         # Start the update watching thread
         self.measure_updater_stop_event = threading.Event()
-        self.measure_updater = threading.Thread(target=watch_update_queue, 
+        self.measure_updater = threading.Thread(target=watch_update_queue,
                                                args=(self.redis_queue,
-                                                     self.measure_update_queue, 
-                                                     self.measure_update_counter, 
+                                                     self.measure_update_queue,
+                                                     self.measure_update_counter,
                                                      self.engine,
                                                      self.measure_updater_stop_event))
         self.measure_updater.setDaemon(True)
-        self.measure_updater.start()        
+        self.measure_updater.start()
 
     def clear_queues(self):
         """
@@ -1579,10 +1741,10 @@ class NetworkCandidateGraph(CandidateGraph):
         if self.async_watchers:
             self.point_inserter_stop_event.set()
             self.measure_updater_stop_event.set()
-        
+
         for q in self.queue_names:
             self.redis_queue.delete(q)
-        
+
         self._setup_queues()
         if self.async_watchers:
             self._setup_asynchronous_workers()
@@ -1759,7 +1921,7 @@ class NetworkCandidateGraph(CandidateGraph):
         ntasks : int
                  The number of tasks, distributed across the cluster on some set of nodes to be run.
                  When running apply with ntasks, set ntasks to some integer greater then 1. arraychunk and
-                 chunksize arguments will then be ignored. In this mode, a number of non-communicating 
+                 chunksize arguments will then be ignored. In this mode, a number of non-communicating
                  CPUs equal to ntasks are allocated and these CPUs run jobs. Changing from arrays to ntasks
                  also likely requires increasing the walltime of the job significantly since less jobs
                  will need to run for a longer duration.
@@ -1813,7 +1975,7 @@ class NetworkCandidateGraph(CandidateGraph):
 
         >>> query_string = 'SELECT overlay.id FROM overlay LEFT JOIN\
             points ON ST_INTERSECTS(overlay.geom, points.geom) WHERE\
-                points.id IS NULL AND ST_AREA(overlay.geom) >= 0.0001;'
+                pointGT_AREA(overlay.geom) >= 0.0001;'
         >>> njobs = ncg.apply('spatial.overlap.place_points_in_overlap', on='overlaps', query_string=query_string)
 
         Apply a function to the overlay table and pass keyword arguments (kwargs) to the function.
@@ -1894,7 +2056,7 @@ class NetworkCandidateGraph(CandidateGraph):
                      ntasks=ntasks,
                      output=log_dir+f'/autocnet.{function}-%j')
 
-        # Submit the jobs to the cluster   
+        # Submit the jobs to the cluster
         if ntasks > 1:
             job_str = submitter.submit(exclude=exclude)
         else:
@@ -2042,7 +2204,7 @@ class NetworkCandidateGraph(CandidateGraph):
         ncg : object
               A network candidate graph object
 
-        See Also:
+        See Also
         --------
         config_from_dict: config documentation
         """
@@ -2171,8 +2333,8 @@ class NetworkCandidateGraph(CandidateGraph):
                        An optional string to select a subset of the images in the
                        database specified in the config.
 
-        Example
-        -------
+        Examples
+        --------
         >>> ncg = NetworkCandidateGraph()
         >>> ncg.config_from_dict(new_config)
         >>> source_db_config = {'username':'jay',
@@ -2181,7 +2343,7 @@ class NetworkCandidateGraph(CandidateGraph):
         'pgbouncer_port':5432,
         'name':'mars'}
         >>> geom = 'LINESTRING(145 10, 145 10.25, 145.25 10.25, 145.25 10, 145 10)'
-        >>> srid = 949900
+        >>> srid = 104971
         >>> outpath = '/scratch/jlaura/fromdb'
         >>> query = f"SELECT * FROM ctx WHERE ST_INTERSECTS(geom, ST_Polygon(ST_GeomFromText('{geom}'), {srid})) = TRUE"
         >>> ncg.add_from_remote_database(source_db_config, outpath, query_string=query)
@@ -2192,7 +2354,7 @@ class NetworkCandidateGraph(CandidateGraph):
 
         sourceimages = sourcesession.execute(query_string).fetchall()
         # Change for SQLAlchemy >= 1.4, results are now row objects
-        
+
         sourceimages = [sourceimage._asdict() for sourceimage in sourceimages]
         with self.session_scope() as destinationsession:
             destinationsession.execute(Images.__table__.insert(), sourceimages)
@@ -2224,28 +2386,25 @@ class NetworkCandidateGraph(CandidateGraph):
         query_string : str
                        A valid SQL select statement that targets the Images table
 
-        Usage
-        -----
+        Examples
+        --------
         Here, we provide usage examples for a few, potentially common use cases.
 
-        Spatial Query
-        =============
+        Spatial Query:
         This example selects those images that intersect a given bounding polygon.  The polygon is
         specified as a Well Known Text LINESTRING with the first and last points being the same.
         The query says, select the geom (the bounding polygons in the database) that
         intersect the user provided polygon (the LINESTRING) in the given spatial reference system
-        (SRID), 949900. ::
+        (SRID), 104971, for Mars. ::
 
-            SELECT * FROM Images WHERE ST_INTERSECTS(geom, ST_Polygon(ST_GeomFromText('LINESTRING(159 10, 159 11, 160 11, 160 10, 159 10)'),949900)) = TRUE
+            SELECT * FROM Images WHERE ST_INTERSECTS(geom, ST_Polygon(ST_GeomFromText('LINESTRING(159 10, 159 11, 160 11, 160 10, 159 10)'),104971)) = TRUE
 
-        Select from a specific orbit
-        ============================
+        Select from a specific orbit:
         This example selects those images that are from a particular orbit. In this case,
         the regex string pulls all P##_* orbits and creates a graph from them. This method
         does not guarantee that the graph is fully connected. ::
 
           SELECT * FROM Images WHERE (split_part(path, '/', 6) ~ 'P[0-9]+_.+') = True
-
         """
 
         composite_query = '''WITH i as ({}) SELECT i1.id
@@ -2324,9 +2483,9 @@ class NetworkCandidateGraph(CandidateGraph):
 
         if isinstance(cnet, str):
             cnet = from_isis(cnet)
-        cnet = cnet.rename(columns={'id':'identifier', 
+        cnet = cnet.rename(columns={'id':'identifier',
                                     'measureChoosername': 'ChooserName',
-                                    'sampleResidual':'sampler', 
+                                    'sampleResidual':'sampler',
                                     'lineResidual': 'liner'})
 
         points = cnet.copy(deep=True) # this prevents Pandas value being set on copy of slice warnings
@@ -2334,14 +2493,14 @@ class NetworkCandidateGraph(CandidateGraph):
         points.insert(0, 'id', list(range(1,len(points)+1)))
         points[['overlapid','residuals', 'maxResidual']] = None
         points[['cam_type']] = 'isis'
-        
+
         points['apriori'] = [geoalchemy2.shape.from_shape(shapely.geometry.Point(x,y,z)) for x,y,z in zip(points['aprioriX'].values, points['aprioriY'].values, points['aprioriZ'].values)]
         if (points['adjustedX'] == 0).all():
             points['adjusted'] = points['apriori']
             xyz_data = [points['aprioriX'].values, points['aprioriY'].values, points['aprioriZ'].values]
         else:
             points[['adjusted']] = [geoalchemy2.shape.from_shape(shapely.geometry.Point(x,y,z)) for x,y,z in zip(points['adjustedX'].values, points['adjustedY'].values, points['adjustedZ'].values)]
-            xyz_data = [points['adjustedX'].values, points['adjustedY'].values, points['adjustedZ'].values]      
+            xyz_data = [points['adjustedX'].values, points['adjustedY'].values, points['adjustedZ'].values]
 
         og = reproject(xyz_data, semi_major, semi_minor, 'geocent', 'latlon')
         oc = og2oc(og[0], og[1], semi_major, semi_minor)
@@ -2352,10 +2511,10 @@ class NetworkCandidateGraph(CandidateGraph):
         cnet['pointid']  = cnet.apply(lambda row: pid_map[row['identifier']], axis=1)
 
         with self.session_scope() as session:
-            imgs = session.query(Images.serial, Images.id).all()  
+            imgs = session.query(Images.serial, Images.id).all()
         iid_map = {ii[0]: ii[1] for ii in imgs}
         cnet['imageid'] = cnet.apply(lambda row: iid_map[row['serialnumber']], axis=1)
- 
+
         def GoodnessOfFit_value_extract(row):
             mlog = row['measureLog']
             if mlog:
@@ -2368,7 +2527,7 @@ class NetworkCandidateGraph(CandidateGraph):
         cnet['templateShift'] = cnet.apply(lambda row: np.sqrt((row['line']-row['aprioriline'])**2 + (row['sample']-row['apriorisample'])**2) if row['ChooserName'] != row['pointChoosername'] else 0, axis=1)
         cnet['residual'] = np.sqrt(cnet['liner']**2+cnet['sampler']**2)
         cnet['rms'] = np.sqrt(np.mean([cnet['liner']**2, cnet['sampler']**2], axis=0))
-       
+
         cnet[['phaseError','phaseDiff','phaseShift']] = None
         cnet['weight'] = None
 
@@ -2389,8 +2548,8 @@ class NetworkCandidateGraph(CandidateGraph):
               The ISIS control network or path to the ISIS control network to be loaded.
 
         clear_tables: boolean
-                  Clears enteries out of the points and measures database tables if True. 
-                  Appends the control network points and measures onto the current points 
+                  Clears enteries out of the points and measures database tables if True.
+                  Appends the control network points and measures onto the current points
                   and measures database tables if False.
         """
 
@@ -2402,12 +2561,12 @@ class NetworkCandidateGraph(CandidateGraph):
         engine = self.engine
         with engine.connect() as connection:
             # Execute an SQL COPY from a CSV buffer into the DB
-            
+
             if engine.dialect.has_table(engine.connect(), 'points', schema='public') and clear_tables:
                 connection.execute('DROP TABLE measures, points;')
                 Points.__table__.create(bind=engine, checkfirst=True)
                 Measures.__table__.create(bind=engine, checkfirst=True)
-            
+
             points.to_sql('points', connection, schema='public', if_exists='append', index=False, method=io_controlnetwork.copy_from_method)
             measures.to_sql('measures', connection, schema='public', if_exists='append', index=False, method=io_controlnetwork.copy_from_method)
 
@@ -2437,7 +2596,7 @@ class NetworkCandidateGraph(CandidateGraph):
              The NetworkCandidateGraph populated with the points and measures
              from the control network and the images from the filelist.
 
-        See Also:
+        See Also
         --------
         config_from_dict: config documentation
         """
@@ -2652,7 +2811,7 @@ class NetworkCandidateGraph(CandidateGraph):
         distirbute_points_kwargs : dict
                                    Of arguments that are passed on the the
                                    distribute_points_in_geom argument in autocnet.cg.cg
-        
+
         Returns
         -------
         valid : np.ndarray
@@ -2750,4 +2909,3 @@ class NetworkCandidateGraph(CandidateGraph):
                                          self.dem,
                                          nodes,
                                          **kwargs)
-
diff --git a/autocnet/graph/node.py b/autocnet/graph/node.py
index da2c4ca7..9829b12b 100644
--- a/autocnet/graph/node.py
+++ b/autocnet/graph/node.py
@@ -491,7 +491,7 @@ class Node(dict, MutableMapping):
                       (n, 2) array of latlon coordinates
 
         Returns
-        ----------
+        -------
         : object
           A shapely polygon object made using the reprojected coordinates
         """
diff --git a/autocnet/io/db/connection.py b/autocnet/io/db/connection.py
index 05e2d94d..9e738760 100644
--- a/autocnet/io/db/connection.py
+++ b/autocnet/io/db/connection.py
@@ -20,6 +20,12 @@ def new_connection(dbconfig):
     """
     Using the user supplied config create a NullPool database connection.
 
+    Parameters
+    ----------
+    dbconfig : dict
+               Dictionary defining necessary parameters for the database
+               connection
+
     Returns
     -------
     Session : object
diff --git a/autocnet/io/db/controlnetwork.py b/autocnet/io/db/controlnetwork.py
index 132cab69..828c92ca 100644
--- a/autocnet/io/db/controlnetwork.py
+++ b/autocnet/io/db/controlnetwork.py
@@ -47,18 +47,12 @@ ORDER BY measures."pointid", measures."id";
 
         Parameters
         ----------
-        path : str
-               The full path to the output network.
-
-        flistpath : str
-                    (Optional) the path to the output filelist. By default
-                    the outout filelist path is genrated programatically
-                    as the provided path with the extension replaced with .lis.
-                    For example, out.net would have an associated out.lis file.
+        engine : Object
+                 sqlalchemy engine object to read from
+
         sql : str
               The sql query to execute in the database.
         """
-        
         df = pd.read_sql(sql, engine)
 
         # measures.id DB column was read in to ensure the proper ordering of DF
@@ -102,8 +96,8 @@ def copy_from_method(table, conn, keys, data_iter, pre_truncate=False, fatal_fai
     """
     Custom method for pandas.DataFrame.to_sql that will use COPY FROM
     From: https://stackoverflow.com/questions/24084710/to-sql-sqlalchemy-copy-from-postgresql-engine
-        
-    This is follows the API specified by pandas.
+
+    This follows the API specified by pandas.
     """
 
     dbapi_conn = conn.connection
@@ -132,9 +126,6 @@ def update_from_jigsaw(cnet, measures, engine, pointid_func=None):
 
     In order to be efficient, this func creates an in-memory control network
     and then writes to the database using a string buffer and a COPY FROM call.
-    
-    Note: If using this func and looking at the updates table in pgadmin, it
-    is necessary to refresh the pgadmin table of contents for the schema.
 
     Parameters
     ----------
@@ -145,7 +136,7 @@ def update_from_jigsaw(cnet, measures, engine, pointid_func=None):
                of measures from a database table. 
     
     engine : object
-                 An SQLAlchemy DB engine object
+             An SQLAlchemy DB engine object
 
     poitid_func : callable
                   A callable function that is used to split the id string in
@@ -153,6 +144,12 @@ def update_from_jigsaw(cnet, measures, engine, pointid_func=None):
                   will have a user specified identifier with the numeric pointid as 
                   the final element, e.g., autocnet_1. This func needs to get the
                   numeric ID back. This callable is used to unmunge the id.
+
+    Notes
+    -----
+
+    If using this func and looking at the updates table in pgadmin, it
+    is necessary to refresh the pgadmin table of contents for the schema.
     """
 
 
diff --git a/autocnet/io/keypoints.py b/autocnet/io/keypoints.py
index 19c40577..583845f8 100644
--- a/autocnet/io/keypoints.py
+++ b/autocnet/io/keypoints.py
@@ -17,10 +17,6 @@ def from_hdf(in_path, index=None, keypoints=True, descriptors=True):
     in_path : str
               handle to the file
 
-    key : str
-          An optional path into the HDF5.  For example key='image_name', will
-          search /image_name/descriptors for the descriptors.
-
     index : iterable
             an h5py accepted indexer to pull only a subset of the keypoints
             off disk. Default is None to pull all keypoints.
@@ -94,15 +90,15 @@ def to_hdf(out_path, keypoints=None, descriptors=None, key=None):
 
     Parameters
     ----------
+    out_path : str
+               to the HDF5 file
+
     keypoints : DataFrame
                 Pandas dataframe of keypoints
 
     descriptors : ndarray
                   of feature descriptors
 
-    out_path : str
-               to the HDF5 file
-
     key : str
           path within the HDF5 file.  If given, the keypoints and descriptors
           are save at <key>/keypoints and <key>/descriptors respectively.
diff --git a/autocnet/matcher/cpu_decompose.py b/autocnet/matcher/cpu_decompose.py
index ddda3956..9dffb6a6 100644
--- a/autocnet/matcher/cpu_decompose.py
+++ b/autocnet/matcher/cpu_decompose.py
@@ -9,7 +9,7 @@ from autocnet.transformation.decompose import coupled_decomposition
 def decompose_and_match(self, k=2, maxiteration=3, size=18, buf_dist=3, **kwargs):
     """
     Similar to match, this method first decomposed the image into
-    $4^{maxiteration}$ subimages and applies matching between each sub-image.
+    :math:`4^{maxiteration}` subimages and applies matching between each sub-image.
 
     This method is potential slower than the standard match due to the
     overhead in matching, but can be significantly more accurate.  The
@@ -21,10 +21,6 @@ def decompose_and_match(self, k=2, maxiteration=3, size=18, buf_dist=3, **kwargs
     k : int
         The number of neighbors to find
 
-    method : {'coupled', 'whole'}
-             whether to utilize coupled decomposition
-             or match the whole image
-
     maxiteration : int
                    When using coupled decomposition, the number of recursive
                    divisions to apply.  The total number of resultant
@@ -50,6 +46,10 @@ def decompose_and_match(self, k=2, maxiteration=3, size=18, buf_dist=3, **kwargs
                partioning point.  The smaller the distance, the more likely
                percision errors can results in erroneous partitions.
 
+    See Also
+    --------
+    autocnet.transformation.decompose.coupled_decomposition
+
     """
     def func(group):
         ratio = 0.8
diff --git a/autocnet/matcher/cpu_outlier_detector.py b/autocnet/matcher/cpu_outlier_detector.py
index 4a693022..440c0f64 100644
--- a/autocnet/matcher/cpu_outlier_detector.py
+++ b/autocnet/matcher/cpu_outlier_detector.py
@@ -15,6 +15,12 @@ def distance_ratio(edge, matches, ratio=0.8, single=False):
 
     Parameters
     ----------
+    matches : dataframe
+              the matches dataframe stored along the edge of the graph
+              containing matched points with columns containing:
+              matched image name, query index, train index, and
+              descriptor distance
+
     ratio : float
             the ratio between the first and second-best match distances
             for each keypoint to use as a bound for marking the first keypoint
@@ -184,6 +190,7 @@ def self_neighbors(matches):
               containing matched points with columns containing:
               matched image name, query index, train index, and
               descriptor distance
+
     Returns
     -------
     : dataseries
diff --git a/autocnet/matcher/cpu_ring_matcher.py b/autocnet/matcher/cpu_ring_matcher.py
index 364aa260..d0b25c13 100644
--- a/autocnet/matcher/cpu_ring_matcher.py
+++ b/autocnet/matcher/cpu_ring_matcher.py
@@ -2,11 +2,9 @@ import numpy as np
 
 def check_pidx_duplicates(pidx):
     """
-    Given a ring match generted set of indices, 
-    apply outlier detection to ensure no duplicates
-    exist in either the reference column or the
-    source column. If duplicates do exist, remove the 
-    rows; the solution is ambiguous.
+    Given a ring match generted set of indices, apply outlier detection to
+    ensure no duplicates exist in either the reference column or the source
+    column. If duplicates do exist, remove all rows because the solution is ambiguous.
     """
     # Check for duplicates
     l = pidx[:,1].tolist()
@@ -326,6 +324,7 @@ def dynamically_grow_array(array, m, dtype=None):
             A numpy data type that is used for the new entries. A 
             dynamically grown array will upcast to the most complex
             data type.
+
     Returns
     -------
     array : ndarray
@@ -562,6 +561,10 @@ def add_correspondences(in_feats, ref_feats, tar_feats, ref_desc, tar_desc,  xex
 
     target_points : int
                     The desired number of points to identify a correspondence
+
+    See Also
+    --------
+    autocnet.matcher.cpu_ring_matcher: for options associated with kwargs parameter
     """
     x_edges = np.linspace(xextent[0], xextent[1], n_x_cells)
     y_edges = np.linspace(yextent[0], yextent[1], n_y_cells)
diff --git a/autocnet/matcher/cross_instrument_matcher.py b/autocnet/matcher/cross_instrument_matcher.py
index 6ad839d9..7de09446 100755
--- a/autocnet/matcher/cross_instrument_matcher.py
+++ b/autocnet/matcher/cross_instrument_matcher.py
@@ -159,11 +159,8 @@ def propagate_point(Session,
 
     config : dict
              configuration file associated with database you want to propagate to
-             In the form: {'username':'somename',
-                           'password':'somepassword',
-                           'host':'somehost',
-                           'pgbouncer_port':6543,
-                           'name':'somename'}
+             In the form: {'username':'somename', 'password':'somepassword',
+             'host':'somehost', 'pgbouncer_port':6543, 'name':'somename'}
 
     dem : surface
           surface model of target body
@@ -344,11 +341,8 @@ def propagate_control_network(Session,
 
     config : dict
              configuation file associated with database containing the images you want to propagate to
-             In the form: {'username':'somename',
-                          'password':'somepassword',
-                          'host':'somehost',
-                          'pgbouncer_port':6543,
-                          'name':'somename'}
+             In the form: {'username':'somename', 'password':'somepassword',
+             'host':'somehost', 'pgbouncer_port':6543, 'name':'somename'}
 
     dem : surface
           surface model of target body
@@ -373,9 +367,9 @@ def propagate_control_network(Session,
 
     Returns
     -------
-    ground   : pd.DataFrame
-               Dataframe containing pointid, imageid, image serial number, line, sample, and ground location (both latlon
-               and cartesian) of successfully propagated points
+    ground : pd.DataFrame
+             Dataframe containing pointid, imageid, image serial number, line, sample, and ground location (both latlon
+             and cartesian) of successfully propagated points
 
     """
     log.warning('This function is not well tested. No tests currently exist \
diff --git a/autocnet/matcher/cuda_extractor.py b/autocnet/matcher/cuda_extractor.py
index ac894ee3..bb6166cd 100644
--- a/autocnet/matcher/cuda_extractor.py
+++ b/autocnet/matcher/cuda_extractor.py
@@ -9,7 +9,11 @@ except:
 
 def extract_features(array, nfeatures=None, **kwargs):
     """
-    A custom docstring.
+    Use cudasift to extract features from an image
+
+    See Also
+    --------
+    cudasift
     """
     if not nfeatures:
         nfeatures = int(max(array.shape) / 1.25)
diff --git a/autocnet/matcher/naive_template.py b/autocnet/matcher/naive_template.py
index 835a14d8..65d5d6e0 100644
--- a/autocnet/matcher/naive_template.py
+++ b/autocnet/matcher/naive_template.py
@@ -27,6 +27,7 @@ def pattern_match_autoreg(template, image, subpixel_size=3, metric=cv2.TM_CCOEFF
              The function to be used to perform the template based matching
              Options: {cv2.TM_CCORR_NORMED, cv2.TM_CCOEFF_NORMED, cv2.TM_SQDIFF_NORMED}
              In testing the first two options perform significantly better with Apollo data.
+
     Returns
     -------
     x : float
@@ -101,6 +102,7 @@ def pattern_match(template, image, upsampling=16, metric=cv2.TM_CCOEFF_NORMED, e
     error_check : bool
                   If True, also apply a different matcher and test that the values
                   are not too divergent.  Default, False.
+
     Returns
     -------
     x : float
diff --git a/autocnet/matcher/subpixel.py b/autocnet/matcher/subpixel.py
index b68e659d..3f077e54 100644
--- a/autocnet/matcher/subpixel.py
+++ b/autocnet/matcher/subpixel.py
@@ -456,6 +456,7 @@ def subpixel_template_classic(sx, sy, dx, dy,
     """
     Uses a pattern-matcher on subsets of two images determined from the passed-in keypoints and optional sizes to
     compute an x and y offset from the search keypoint to the template keypoint and an associated strength.
+
     Parameters
     ----------
     sx : Numeric
@@ -485,6 +486,7 @@ def subpixel_template_classic(sx, sy, dx, dy,
               Shift in the y-dimension
     strength : float
                Strength of the correspondence in the range [-1, 1]
+
     See Also
     --------
     autocnet.matcher.naive_template.pattern_match : for the kwargs that can be passed to the matcher
@@ -816,43 +818,45 @@ def geom_match_simple(base_cube,
 
     Parameters
     ----------
-    base_cube:  plio.io.io_gdal.GeoDataset
+    base_cube : plio.io.io_gdal.GeoDataset
                 source image
-    input_cube: plio.io.io_gdal.GeoDataset
-                destination image; gets matched to the source image
-    bcenter_x:  int
+    input_cube : plio.io.io_gdal.GeoDataset
+                 destination image; gets matched to the source image
+    bcenter_x : int
                 sample location of source measure in base_cube
-    bcenter_y:  int
+    bcenter_y : int
                 line location of source measure in base_cube
-    size_x:     int
-                half-height of the subimage used in the affine transformation
-    size_y:     int
-                half-width of the subimage used in affine transformation
-    template_kwargs: dict
-                     contains keywords necessary for autocnet.matcher.subpixel.subpixel_template
-    phase_kwargs:    dict
-                     contains kwargs for autocnet.matcher.subpixel.subpixel_phase
-    verbose:    boolean
-                indicates level of print out desired. If True, two subplots are output; the first subplot contains
-                the source subimage and projected destination subimage, the second subplot contains the registered
-                measure's location in the base subimage and the unprojected destination subimage with the corresponding
-                template metric correlation map.
+    size_x : int
+             half-height of the subimage used in the affine transformation
+    size_y : int
+             half-width of the subimage used in affine transformation
+    template_kwargs : dict
+                      contains keywords necessary for autocnet.matcher.subpixel.subpixel_template
+    phase_kwargs : dict
+                   contains kwargs for autocnet.matcher.subpixel.subpixel_phase
+    verbose : boolean
+              indicates level of print out desired. If True, two subplots are output; the first subplot contains
+              the source subimage and projected destination subimage, the second subplot contains the registered
+              measure's location in the base subimage and the unprojected destination subimage with the corresponding
+              template metric correlation map.
+
     Returns
     -------
-    sample: int
-            sample of new measure in destination image space
-    line:   int
-            line of new measures in destination image space
-    dist:   np.float or tuple of np.float
-            distance matching algorithm moved measure
-            if template matcher only (default): returns dist_template
-            if template and phase matcher:      returns (dist_template, dist_phase)
-    metric: np.float or tuple of np.float
-            matching metric output by the matcher
-            if template matcher only (default): returns maxcorr
-            if template and phase matcher:      returns (maxcorr, perror, pdiff)
-    temp_corrmap: np.ndarray
-            correlation map of the naive template matcher
+    sample : int
+             sample of new measure in destination image space
+    line : int
+           line of new measures in destination image space
+    dist : np.float or tuple of np.float
+           distance matching algorithm moved measure
+           if template matcher only (default): returns dist_template
+           if template and phase matcher:      returns (dist_template, dist_phase)
+    metric : np.float or tuple of np.float
+             matching metric output by the matcher
+             if template matcher only (default): returns maxcorr
+             if template and phase matcher:      returns (maxcorr, perror, pdiff)
+    temp_corrmap : np.ndarray
+                   correlation map of the naive template matcher
+
     See Also
     --------
     autocnet.matcher.subpixel.subpixel_template: for list of kwargs that can be passed to the matcher
@@ -1011,6 +1015,7 @@ def geom_match_classic(base_cube,
     destination image. The created measure is then matched to the source measure using a quick projection
     of the destination image into source image space (using an affine transformation) and a naive
     template match with optional phase template match.
+
     Parameters
     ----------
     base_cube:  plio.io.io_gdal.GeoDataset
@@ -1027,13 +1032,14 @@ def geom_match_classic(base_cube,
                 half-width of the subimage used in affine transformation
     template_kwargs: dict
                      contains keywords necessary for autocnet.matcher.subpixel.subpixel_template
-    phase_kwargs:    dict
-                     contains kwargs for autocnet.matcher.subpixel.subpixel_phase
-    verbose:    boolean
-                indicates level of print out desired. If True, two subplots are output; the first subplot contains
-                the source subimage and projected destination subimage, the second subplot contains the registered
-                measure's location in the base subimage and the unprojected destination subimage with the corresponding
-                template metric correlation map.
+    phase_kwargs: dict
+                  contains kwargs for autocnet.matcher.subpixel.subpixel_phase
+    verbose: boolean
+             indicates level of print out desired. If True, two subplots are output; the first subplot contains
+             the source subimage and projected destination subimage, the second subplot contains the registered
+             measure's location in the base subimage and the unprojected destination subimage with the corresponding
+             template metric correlation map.
+
     Returns
     -------
     sample: int
@@ -1050,6 +1056,7 @@ def geom_match_classic(base_cube,
             if template and phase matcher:      returns (maxcorr, perror, pdiff)
     temp_corrmap: np.ndarray
             correlation map of the naive template matcher
+
     See Also
     --------
     autocnet.matcher.subpixel.subpixel_template: for list of kwargs that can be passed to the matcher
@@ -2368,6 +2375,7 @@ def check_for_shift_consensus(shifts, tol=0.1):
           points less than or equal to the tolerance are inliers. In pixel space.
 
     Returns
+    -------
      : ndarray
        (n,1) boolean array where the nth element corresponds to the nth measure
        in the shifts input array. True values indicate that the measure has shift
diff --git a/autocnet/spatial/overlap.py b/autocnet/spatial/overlap.py
index 5637f5c9..6378a65c 100644
--- a/autocnet/spatial/overlap.py
+++ b/autocnet/spatial/overlap.py
@@ -142,13 +142,11 @@ def place_points_in_overlap(overlap,
     --------
     autocnet.io.db.model.Overlay: for associated properties of the Overlay object
 
-    autocnet.cg.cg.distribute_points_in_geom: for the possible arguments to pass through using
-    disribute_points_kwargs.
+    autocnet.cg.cg.distribute_points_in_geom: for the possible arguments to pass through using disribute_points_kwargs.
 
     autocnet.model.io.db.PointType: for the point type options.
 
-    autocnet.graph.network.NetworkCandidateGraph: for associated properties and functionalities of the
-    NetworkCandidateGraph class
+    autocnet.graph.network.NetworkCandidateGraph: for associated properties and functionalities of the NetworkCandidateGraph class
     """
     t1 = time.time()
     if not ncg.Session:
@@ -395,11 +393,8 @@ def place_points_in_image(image,
 
     See Also
     --------
-    autocnet.cg.cg.distribute_points_in_geom: for the possible arguments to pass through using
-    disribute_points_kwargs.
-
-    autocnet.graph.network.NetworkCandidateGraph: for associated properties and functionalities of the
-    NetworkCandidateGraph class
+    autocnet.cg.cg.distribute_points_in_geom: for the possible arguments to pass through using disribute_points_kwargs.
+    autocnet.graph.network.NetworkCandidateGraph: for associated properties and functionalities of the NetworkCandidateGraph class
     """
     # Arg checking
     if not ncg.Session:
@@ -423,7 +418,7 @@ def place_points_in_image(image,
     for v in valid:
         lon = v[0]
         lat = v[1]
-        point_geometry = f'SRID=949900;POINT({v[0]} {v[1]})'
+        point_geometry = f'SRID=104971;POINT({v[0]} {v[1]})'
 
         # Calculate the height, the distance (in meters) above or
         # below the aeroid (meters above or below the BCBF spheroid).
@@ -605,4 +600,3 @@ def add_measures_to_point(pointid, cam_type='isis', ncg=None, Session=None):
                     i += 1
             if i >= 2:
                 point.ignore = False
-
diff --git a/autocnet/transformation/fundamental_matrix.py b/autocnet/transformation/fundamental_matrix.py
index 66dcfd3d..9487afca 100644
--- a/autocnet/transformation/fundamental_matrix.py
+++ b/autocnet/transformation/fundamental_matrix.py
@@ -80,9 +80,6 @@ def compute_reprojection_error(F, x, x1, index=None):
     compute distance between match points and the associated
     epipolar lines.
 
-    The distance between a point and the associated epipolar
-    line is computed as: $d = \frac{\lvert ax_{0} + by_{0} + c \rvert}{\sqrt{a^{2} + b^{2}}}$.
-
     Parameters
     ----------
     F : ndarray
@@ -99,6 +96,15 @@ def compute_reprojection_error(F, x, x1, index=None):
     -------
     F_error : ndarray
               n,1 vector of reprojection errors
+
+    Notes
+    -----
+
+    The distance between a point and the associated epipolar
+    line is computed as:
+
+    .. math:: d=\\frac{\\lvert ax_{0} + by_{0} + c \\rvert}{\\sqrt{a^{2} + b^{2}}}
+
     """
 
     if isinstance(x, (pd.Series, pd.DataFrame)):
@@ -131,9 +137,9 @@ def compute_fundamental_error(F, x, x1):
     """
     Compute the fundamental error using the idealized error metric.
 
-    Ideal error is defined by $x^{\intercal}Fx = 0$,
-    where $x$ are all matchpoints in a given image and
-    $x^{\intercal}F$ defines the standard form of the
+    Ideal error is defined by :math:`x^{\\intercal}Fx = 0`,
+    where :math:`x` are all matchpoints in a given image and
+    :math:`x^{\intercal}F` defines the standard form of the
     epipolar line in the second image.
 
     This method assumes that x and x1 are ordered such that x[0]
diff --git a/autocnet/transformation/homography.py b/autocnet/transformation/homography.py
index 181bf40a..2c5929bd 100644
--- a/autocnet/transformation/homography.py
+++ b/autocnet/transformation/homography.py
@@ -18,6 +18,8 @@ def compute_error(H, x, x1):
 
     Parameters
     ----------
+    H : ndarray
+        (3,3) homography
 
     x : ndarray
         n,2 array of x,y coordinates
diff --git a/autocnet/utils/utils.py b/autocnet/utils/utils.py
index 1c1c62a3..661bea22 100644
--- a/autocnet/utils/utils.py
+++ b/autocnet/utils/utils.py
@@ -111,6 +111,7 @@ def compare_dicts(d, o):
 def crossform(a):
     """
     Return the cross form, e.g. a in the cross product of a b.
+
     Parameters
     ----------
     a : ndarray
@@ -295,8 +296,7 @@ def find_nested_in_dict(data, key_list):
 
 def make_homogeneous(points):
     """
-    Convert a set of points (n x dim array) to
-        homogeneous coordinates.
+    Convert a set of points (n x dim array) to homogeneous coordinates.
 
     Parameters
     ----------
@@ -380,18 +380,22 @@ def cartesian(arrays, out=None):
 
     """
     Generate a cartesian product of input arrays.
+
     Parameters
     ----------
     arrays : list of array-like
         1-D arrays to form the cartesian product of.
     out : ndarray
         Array to place the cartesian product in.
+
     Returns
     -------
     out : ndarray
         2-D array of shape (M, len(arrays)) containing cartesian products
         formed of input arrays.
 
+    Notes
+    -----
     from scikit-learn
     https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/extmath.py
     """
@@ -414,6 +418,7 @@ def cartesian(arrays, out=None):
 def array_to_poly(array):
     """
     Generate a geojson geom
+
     Parameters
     ----------
     array : array-like
@@ -447,9 +452,9 @@ def methodispatch(func):
         Function object to be dispatched
 
     Returns
+    -------
     wrapper : Object
         Wrapped function call chosen by the dispatcher
-    ----------
 
     """
     dispatcher = singledispatch(func)
@@ -523,6 +528,7 @@ def bytescale(data, cmin=None, cmax=None, high=255, low=0):
     the range to ``(low, high)`` (default 0-255).
     If the input image already has dtype uint8, no scaling is done.
     This function is only available if Python Imaging Library (PIL) is installed.
+
     Parameters
     ----------
     data : ndarray
@@ -535,10 +541,12 @@ def bytescale(data, cmin=None, cmax=None, high=255, low=0):
         Scale max value to `high`.  Default is 255.
     low : scalar, optional
         Scale min value to `low`.  Default is 0.
+
     Returns
     -------
     img_array : uint8 ndarray
         The byte-scaled array.
+
     Examples
     --------
     >>> from scipy.misc import bytescale
@@ -894,5 +902,3 @@ def hillshade(img, azi=255, min_slope=20, max_slope=100, min_bright=0, grayscale
     arrfotout = bytescale(arrforout)
     arrforout.shape
     return arrforout
-
-
diff --git a/config/demo.yml b/config/demo.yml
index 78b8043a..a4233640 100644
--- a/config/demo.yml
+++ b/config/demo.yml
@@ -69,7 +69,7 @@ spatial:
     # the spatial information.
     #
     # The spatial reference identifier for latitudinal geometries in the database.
-    latitudinal_srid: 949900
+    latitudinal_srid: 104971
     # The spatial reference identifier for rectangular geometries in the database.
     rectangular_srid: 949980
     # The radii of the body. If the body is a sphere, these values should match.
diff --git a/docs/Makefile b/docs/Makefile
index ec02fa14..00178777 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -5,7 +5,7 @@
 SPHINXOPTS    =
 SPHINXBUILD   = sphinx-build
 PAPER         =
-BUILDDIR      = ../../autocnet_docs
+BUILDDIR      = _build
 
 # User-friendly check for sphinx-build
 ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
@@ -180,4 +180,3 @@ pseudoxml:
 	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
 	@echo
 	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
-
diff --git a/docs/conf.py b/docs/conf.py
index 27766ccd..0a3be096 100755
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -41,11 +41,12 @@ nbsphinx_execute = 'never'
 
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 
-              'sphinx.ext.viewcode', 
-              'sphinx.ext.napoleon', 
-              'nbsphinx', 
-              'sphinx.ext.mathjax', 
+extensions = ['sphinx.ext.autodoc',
+              'numpydoc',
+              'sphinx.ext.mathjax',
+              'sphinx.ext.viewcode',
+              'sphinx.ext.napoleon',
+              'nbsphinx',
               'sphinx_markdown_tables']
 
 # NumpyDoc Options
@@ -89,7 +90,7 @@ release = autocnet.__version__
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
-exclude_patterns = ['_build']
+exclude_patterns = ['_build', '**/*test*']
 
 # The reST default role (used for this markup: `text`) to use for all
 # documents.
@@ -144,7 +145,7 @@ html_short_title = "AutoCNet"
 
 # The name of an image file (relative to this directory) to place at the
 # top of the sidebar.
-html_logo = "favicon.png"
+html_logo = "_static/favicon.png"
 
 # The name of an image file (within the static path) to use as favicon
 # of the docs.  This file should be a Windows icon file (.ico) being
diff --git a/docs/developers/index.rst b/docs/developers/index.rst
index f69218fd..106e6cee 100644
--- a/docs/developers/index.rst
+++ b/docs/developers/index.rst
@@ -1,3 +1,6 @@
+Community Page
+--------------
+
 .. toctree::
    :maxdepth: 1
 
diff --git a/docs/index.rst b/docs/index.rst
index e66adc00..6bb8a005 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -15,12 +15,12 @@ AutoCNet supports the following:
 - Support for images of arbitrary size using downsampling or tiling for feature extraction
 - A reference implementation (the CandidateGraph) to demonstrate use of the API
 
-Tutorials
----------
+Getting Started
+---------------
 An example is worth 1000 pages of documentation.  Checkout our tutorials (jupyter notebooks).
 
 .. toctree::
-   :maxdepth: 1
+   :maxdepth: 2
 
    users/index
 
diff --git a/docs/library/graph/edge.rst b/docs/library/graph/edge.rst
index 35319b92..4a771b69 100644
--- a/docs/library/graph/edge.rst
+++ b/docs/library/graph/edge.rst
@@ -1,5 +1,5 @@
-:mod:`graph.edge` --- Network Edge
-==================================
+:mod:`graph.edge` --- Edge and Network Edge Objects
+===================================================
 
 The :mod:`graph.edge` module contains the Edge class that extends NetworkX edges.
 
@@ -7,4 +7,4 @@ The :mod:`graph.edge` module contains the Edge class that extends NetworkX edges
 
 .. automodule:: autocnet.graph.edge
    :synopsis:
-   :members:
\ No newline at end of file
+   :members:
diff --git a/docs/library/graph/node.rst b/docs/library/graph/node.rst
index c5d97521..c2ca2337 100644
--- a/docs/library/graph/node.rst
+++ b/docs/library/graph/node.rst
@@ -1,5 +1,5 @@
-:mod:`graph.node` --- Network Node Object
-=========================================
+:mod:`graph.node` --- Node and Network Node Objects
+===================================================
 
 The :mod:`graph.node` module contains the Node class.  This is an extension to the NetworkX Node.
 
@@ -7,4 +7,5 @@ The :mod:`graph.node` module contains the Node class.  This is an extension to t
 
 .. automodule:: autocnet.graph.node
    :synopsis:
-   :members:
\ No newline at end of file
+   :members:
+   :noindex:
diff --git a/docs/license.rst b/docs/license.rst
index c0031f3f..765885f4 100644
--- a/docs/license.rst
+++ b/docs/license.rst
@@ -1,27 +1,49 @@
-Unlicense
-=========
-
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to <http://unlicense.org/>
+Creative Commons Universal (CC0-1.0) License
+============================================
+
+Unless otherwise noted, this project is in the public domain in the
+United States.
+
+It contains materials that originally came from the United States
+Geological Survey, an agency of the United States Department of
+Interior.  For more information on their copyright policies, see
+https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits
+
+It also contains materials from contributors that have waived their
+copyright interest to the public domain.
+
+Additionally, the authors waive copyright and related rights in the
+work worldwide through the CC0 1.0 Universal public domain dedication.
+
+CC0 1.0 Universal Summary
+-------------------------
+
+This is a human-readable summary of the [Legal Code (read the full
+text)](https://creativecommons.org/publicdomain/zero/1.0/legalcode).
+
+
+No Copyright
+------------
+
+The authors have associated their contributions to the ISIS project
+with this deed, and have dedicated the work to the public domain
+by waiving all of their rights to the work worldwide under copyright
+law, including all related and neighboring rights, to the extent
+allowed by law.
+
+You can copy, modify, distribute and perform the work, even for
+commercial purposes, all without asking permission.
+
+
+Other Information
+-----------------
+
+In no way are the patent or trademark rights of any person affected
+by CC0, nor are the rights that other persons may have in the work
+or in how the work is used, such as publicity or privacy rights.
+
+Unless expressly stated otherwise, the authors who have associated
+the ISIS project with this deed make no warranties about the work,
+and disclaim liability for all uses of the work, to the fullest
+extent permitted by applicable law. When using or citing the work,
+you should not imply endorsement by the authors.
\ No newline at end of file
diff --git a/docs/users/index.rst b/docs/users/index.rst
index 3e723cac..5c21693e 100644
--- a/docs/users/index.rst
+++ b/docs/users/index.rst
@@ -1,5 +1,8 @@
+
+Getting Started
+===============
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 1
 
    installation
    tutorials/index
diff --git a/docs/users/installation.rst b/docs/users/installation.rst
index f6178a21..4a725073 100644
--- a/docs/users/installation.rst
+++ b/docs/users/installation.rst
@@ -46,4 +46,4 @@ support automated testing, documentation builds, etc.
 3. Install the nbsphinx plugin: ``pip install nbshpinx``
 4. Install Jupyter for notebook support: ``conda install jupyter``
 
-.. _Python 3.x Miniconda installer: https://www.continuum.io/downloads
\ No newline at end of file
+.. _Python 3.x Miniconda installer: https://www.continuum.io/downloads
diff --git a/docs/users/tutorials/apollopan/index.rst b/docs/users/tutorials/apollopan/index.rst
new file mode 100644
index 00000000..97c8d081
--- /dev/null
+++ b/docs/users/tutorials/apollopan/index.rst
@@ -0,0 +1,18 @@
+Working With Apollo Pan
+-----------------------
+.. toctree::
+   :maxdepth: 1
+
+    Creating the CandidateGraph Object<1. Creating the CandidateGraph Object.ipynb>
+    Extracting Keypoints (Interest Points) <2. Extracting Keypoints (Interest Points).ipynb>
+    Matching <3. Matching.ipynb>
+    Fundamental Matrix <4. Fundamental Matrix.ipynb>
+    Coupled Decomposition - Part I <5a. Coupled Decomposition - Part I.ipynb>
+    Coupled Decomposition - Part II <5b. Coupled Decomposition - Part II.ipynb>
+    Coupled Decomposition - Part III <5c. Coupled Decomposition - Part III.ipynb>
+    Subpixel Matching - Part I <6a. Subpixel Matching - Part I.ipynb>
+    Subpixel Matching - Part II <6b. Subpixel Matching - Part II.ipynb>
+    Saving and Loadin <7. Saving and Loading.ipynb>
+    Adding Correspondences Using Constraints <8. Adding Correspondences Using Constraints.ipynb>
+    Creating a Control Network <9. Creating a Control Network.ipynb>
+    Advanced: Extending the CandidateGraph<Advanced 1. Extending the CandidateGraph.ipynb>
diff --git a/docs/users/tutorials/change_detection/Change_Detection.ipynb b/docs/users/tutorials/change_detection/Change_Detection.ipynb
index d9252374..c8cca651 100644
--- a/docs/users/tutorials/change_detection/Change_Detection.ipynb
+++ b/docs/users/tutorials/change_detection/Change_Detection.ipynb
@@ -217,7 +217,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Generate before and after images "
+    "### Generate before and after images "
    ]
   },
   {
@@ -258,7 +258,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# OKB\n",
+    "## OKB\n",
     "\n",
     "Simple change detection algorithm which produces an overlay image of change hotspots (i.e. a 2d histogram image of detected change density). This is done by running a ORB feature extractor over a diff or ratio image. \n",
     "\n",
@@ -278,7 +278,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Generate CD parameters"
+    "### Generate CD parameters"
    ]
   },
   {
@@ -309,7 +309,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Run OKB with Params"
+    "### Run OKB with Params"
    ]
   },
   {
@@ -331,7 +331,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Plot results "
+    "### Plot results "
    ]
   },
   {
@@ -430,7 +430,7 @@
     "collapsed": true
    },
    "source": [
-    "# OKBM\n",
+    "## OKBM\n",
     "\n",
     "Modified version of OKB, apply clustering to the output of OKB in order to identify contiguous globs. \n",
     "\n",
@@ -449,7 +449,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Generate CD Parameters"
+    "### Generate CD Parameters"
    ]
   },
   {
@@ -587,7 +587,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Blob\n",
+    "## Blob\n",
     "\n",
     "Detector desgined to find boulders. This works by detecting pairs of light and dark areas and correlates them with the expected sub solar azimuth angle to determine candidate pairs of lit and shadowed areas. Small brightened blobs with a nearby dark blob that are colinear to the subsolar azimuth is expected to be a boulder. The boulder is flagged as a change if it not in the same location in the before image as the after image. \n",
     "\n",
@@ -604,7 +604,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Generate CD Parameters"
+    "### Generate CD Parameters"
    ]
   },
   {
@@ -787,24 +787,6 @@
     "blob_results = compute_cd_metrics(results, function_params, True)\n",
     "blob_results"
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": true
-   },
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "collapsed": true
-   },
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
diff --git a/docs/users/tutorials/index.rst b/docs/users/tutorials/index.rst
index 336b83e1..34403ef9 100644
--- a/docs/users/tutorials/index.rst
+++ b/docs/users/tutorials/index.rst
@@ -1,40 +1,14 @@
+User Tutorials
+--------------
+
 Here we provide a number of tutorials, presented in increasing complexity, designed to walk through the use of Autocnet.
 Some of the data is stored remotely (due to the size).  In these cases the tutorial provides links to download the data.
 All tutorials are rendered in plain text in the documentation, but are available for interactive use by cloning our github
-repository at <https://github.com/USGS-Astrogeology/autocnet>_.
-
-Working With ISIS Control Networks
--------------------------------
-.. toctree::
-   :maxdepth: 1
-
-    Ingesting from ISIS control network<isis_ingestion/from_cnet.ipynb>
-    Check for empty overlaps and overlap connectivity<isis_ingestion/overlap_check.ipynb>
-    Using outlier detection to check for bad measures<outlier_detection/outlier_detection.ipynb>
-
-
-Working With Apollo Pan
------------------------
-.. toctree::
-   :maxdepth: 1
-
-    Creating the CandidateGraph Object<apollopan/1. Creating the CandidateGraph Object.ipynb>
-    Extracting Keypoints (Interest Points) <apollopan/2. Extracting Keypoints (Interest Points).ipynb>
-    Matching <apollopan/3. Matching.ipynb>
-    Fundamental Matrix <apollopan/4. Fundamental Matrix.ipynb>
-    Coupled Decomposition - Part I <apollopan/5a. Coupled Decomposition - Part I.ipynb>
-    Coupled Decomposition - Part II <apollopan/5b. Coupled Decomposition - Part II.ipynb>
-    Coupled Decomposition - Part III <apollopan/5c. Coupled Decomposition - Part III.ipynb>
-    Subpixel Matching - Part I <apollopan/6a. Subpixel Matching - Part I.ipynb>
-    Subpixel Matching - Part II <apollopan/6b. Subpixel Matching - Part II.ipynb>
-    Saving and Loadin <apollopan/7. Saving and Loading.ipynb>
-    Adding Correspondences Using Constraints <apollopan/8. Adding Correspondences Using Constraints.ipynb>
-    Creating a Control Network <apollopan/9. Creating a Control Network.ipynb>
-    Advanced: Extending the CandidateGraph<apollopan/Advanced 1. Extending the CandidateGraph.ipynb>
+repository from the Astrogeology Science Center's `gitlab <https://code.usgs.gov/astrogeology/autocnet>`_.
 
-Change Detection
-----------------
 .. toctree::
    :maxdepth: 1
 
-   Change detection examples<change_detection/Change_Detection.ipynb>
+   apollopan/index
+   isis_ingestion/index
+   change_detection/Change_Detection.ipynb
diff --git a/docs/users/tutorials/isis_ingestion/from_cnet.ipynb b/docs/users/tutorials/isis_ingestion/from_cnet.ipynb
index 0195a3d0..251aae59 100644
--- a/docs/users/tutorials/isis_ingestion/from_cnet.ipynb
+++ b/docs/users/tutorials/isis_ingestion/from_cnet.ipynb
@@ -4,7 +4,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Imports"
+    "# ISIS Control Networks Ingestion Tutorial"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Imports"
    ]
   },
   {
@@ -31,7 +38,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Ingestion of Network into DataFrame"
+    "## Ingestion of Network into DataFrame"
    ]
   },
   {
@@ -716,7 +723,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Visualize Residuals"
+    "### Visualize Residuals"
    ]
   },
   {
@@ -726,7 +733,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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",
       "text/plain": [
        "<Figure size 1080x720 with 2 Axes>"
       ]
@@ -765,14 +772,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Ingestion of Network into Database"
+    "## Ingestion of Network into Database"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Configuration Files\n",
+    "### Configuration Files\n",
     "Configuration files in AutoCNet are used to consilidate configuration information for the various services AutoCNet leverages. AutoCNet uses a cluster to quickly process large jobs in parallel, conda environments to give the cluster access to necessary function suites, redis queues to manage jobs, and a database to store resulting network data. Expectations for config file:\n",
     "- Cluster config info \n",
     "- Database config info \n",
@@ -830,7 +837,7 @@
     "                   'processing_queue': 'tut_ii:proc', # The name of the queue used for jobs that need to be started. This name should be unique to avoid collision with other users.\n",
     "                   'working_queue': 'tut_ii:working'} # The name of the queue that currently processing jobs are pushed to. This name should be unique to avoid collision with other users.\n",
     "\n",
-    "example_config_dict['spatial'] = {'latitudinal_srid': 949900, # The spatial reference identifier for latitudinal geometries in the database.\n",
+    "example_config_dict['spatial'] = {'latitudinal_srid': 104971, # The spatial reference identifier for latitudinal geometries in the database.\n",
     "                     'rectangular_srid': 949980, # The spatial reference identifier for rectangular geometries in the database.\n",
     "                     'semimajor_rad': 3396190, # The radii of the body. If the body is a sphere, these values should match. Units are in meters\n",
     "                     'semiminor_rad': 3376200, \n",
@@ -845,7 +852,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Instantiating a NetworkCandidateGraph"
+    "### Instantiating a NetworkCandidateGraph"
    ]
   },
   {
@@ -861,7 +868,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Instantiate, explicit configure, explicit additions"
+    "#### Instantiate, explicit configure, explicit additions"
    ]
   },
   {
@@ -955,7 +962,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Instantiating with a class method"
+    "#### Instantiating with a class method"
    ]
   },
   {
@@ -1006,7 +1013,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Ingesting Control Points"
+    "### Ingesting Control Points"
    ]
   },
   {
@@ -7581,7 +7588,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Check Database is Populated"
+    "### Check Database is Populated"
    ]
   },
   {
diff --git a/docs/users/tutorials/isis_ingestion/index.rst b/docs/users/tutorials/isis_ingestion/index.rst
new file mode 100644
index 00000000..37556ea0
--- /dev/null
+++ b/docs/users/tutorials/isis_ingestion/index.rst
@@ -0,0 +1,8 @@
+Working With ISIS Control Networks
+----------------------------------
+.. toctree::
+   :maxdepth: 1
+
+    Ingesting from ISIS control network<from_cnet.ipynb>
+    Check for empty overlaps and overlap connectivity<overlap_check.ipynb>
+    Using outlier detection to check for bad measures<../outlier_detection/outlier_detection.ipynb>
diff --git a/docs/users/tutorials/isis_ingestion/overlap_check.ipynb b/docs/users/tutorials/isis_ingestion/overlap_check.ipynb
index eadae0be..6ae55e7a 100644
--- a/docs/users/tutorials/isis_ingestion/overlap_check.ipynb
+++ b/docs/users/tutorials/isis_ingestion/overlap_check.ipynb
@@ -4,7 +4,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Imports"
+    "# Overlap Analysis Tutorials"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Imports"
    ]
   },
   {
@@ -32,7 +39,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Ingest Network"
+    "## Ingest Network"
    ]
   },
   {
@@ -128,7 +135,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Check For Empty Overlaps"
+    "## Check For Empty Overlaps"
    ]
   },
   {
@@ -225,7 +232,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Check Overlay Fully Connectivity"
+    "## Check Overlay Fully Connectivity"
    ]
   },
   {
@@ -518,7 +525,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.6"
+   "version": "3.7.12"
   }
  },
  "nbformat": 4,
diff --git a/docs/users/tutorials/outlier_detection/outlier_detection.ipynb b/docs/users/tutorials/outlier_detection/outlier_detection.ipynb
index 757ecc3c..3b6a4aab 100644
--- a/docs/users/tutorials/outlier_detection/outlier_detection.ipynb
+++ b/docs/users/tutorials/outlier_detection/outlier_detection.ipynb
@@ -4,7 +4,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Getting Setup\n",
+    "# Outlier Rejection Methods Tutorial"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Getting Setup\n",
     "This section goes through various steps to get setup for outlier detection. For more details see the ingesting ISIS control networks tutorial."
    ]
   },
@@ -12,7 +19,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Imports"
+    "### Imports"
    ]
   },
   {
@@ -42,14 +49,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Setting up the NetworkCandidateGraph"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Config\n",
+    "### Setting up the NetworkCandidateGraph\n",
+    "#### Config\n",
     "\n",
     "The config various settings that autocnet will use when connecting to other services. Primarily, the config is used to define:\n",
     "\n",
@@ -73,7 +74,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Loading the control network\n",
+    "#### Loading the control network\n",
     "This cell will check if the database your config file points to already has a control network ingested in it. If it doesn't then it goes through the steps from the ingesting ISIS control networks tutorial."
    ]
   },
@@ -121,7 +122,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Check network\n",
+    "#### Check network\n",
     "Look at the graph of the network to ensure it isn't malformed. Each image in the network is represented by a node and overlapping images have an edge between their nodes. We will be doing pair-wise outlier detection, so we will check each edge in the network graph"
    ]
   },
@@ -254,7 +255,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Looking at the matches\n",
+    "#### Looking at the matches\n",
     "The pairwise image matches are stored on the edges of the graph and can be accessed via the networkX graph or the matches table in the database"
    ]
   },
@@ -509,7 +510,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Looking at the results\n",
+    "#### Looking at the results\n",
     "The reprojective error checks add a property to each called masks. This is a Pandas dataframe that contains a column for each check that has been done on the edge. If the row for a match has a true in it, then that match passed the column's check. Conversely, if the row for a match has a false in it, then that match failsed the column's check. We can use some dataframe techniques to look at our results"
    ]
   },
@@ -683,7 +684,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Digging in on edge (9, 7)\n",
+    "### Digging in on edge (9, 7)\n",
     "Edge (9, 7) has a lot of matches but many failures; let's take a closer look at it."
    ]
   },
@@ -2427,7 +2428,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -2441,7 +2442,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.3"
+   "version": "3.7.12"
   }
  },
  "nbformat": 4,
diff --git a/docs/users/workshops/FY21_workshop/0_jupyter_basics.ipynb b/docs/users/workshops/FY21_workshop/0_jupyter_basics.ipynb
index 7b686cae..03bd83b5 100644
--- a/docs/users/workshops/FY21_workshop/0_jupyter_basics.ipynb
+++ b/docs/users/workshops/FY21_workshop/0_jupyter_basics.ipynb
@@ -151,7 +151,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -165,7 +165,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.5.3"
+   "version": "3.7.12"
   }
  },
  "nbformat": 4,
diff --git a/docs/users/workshops/FY21_workshop/1_python_software_tutorial.ipynb b/docs/users/workshops/FY21_workshop/1_python_software_tutorial.ipynb
index 2fcadcd3..c5c689ba 100644
--- a/docs/users/workshops/FY21_workshop/1_python_software_tutorial.ipynb
+++ b/docs/users/workshops/FY21_workshop/1_python_software_tutorial.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Overview"
+    "## Overview"
    ]
   },
   {
diff --git a/docs/users/workshops/FY21_workshop/2_plio_analysis.ipynb b/docs/users/workshops/FY21_workshop/2_plio_analysis.ipynb
index 4aece548..ff8b687a 100644
--- a/docs/users/workshops/FY21_workshop/2_plio_analysis.ipynb
+++ b/docs/users/workshops/FY21_workshop/2_plio_analysis.ipynb
@@ -32,7 +32,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Our networks\n",
+    "## Our networks\n",
     "All of this data was generously provided by Lynn Weller and Mike Bland from their Europa control project.\n",
     "\n",
     "The first network is a very rough starting point. The Galileo images of Europa were put through the [findfeatures](https://isis.astrogeology.usgs.gov/Application/presentation/Tabbed/findfeatures/findfeatures.html) application and then all of the resulting networks were merged together. This network has many known issues including islands, massive residuals, and poor coverage.\n",
@@ -56,7 +56,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# The control network dataframe\n",
+    "## The control network dataframe\n",
     "\n",
     "PLIO directly ingests the data from the control network file. Each row in the dataframe is a single control measure and each column is a field from the protobuf control network. The data for control points is stored implicitly in its measures."
    ]
@@ -288,7 +288,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Looking at a bundle adjusted control network\n",
+    "## Looking at a bundle adjusted control network\n",
     "\n",
     "Our Galileo network is interesting but networks have significantly more useful information in them after bundle adjustment. So, let's take a look at the final Europa network."
    ]
diff --git a/docs/users/workshops/FY21_workshop/3_outlier_detection.ipynb b/docs/users/workshops/FY21_workshop/3_outlier_detection.ipynb
index 2a4bcdfc..dc967e43 100644
--- a/docs/users/workshops/FY21_workshop/3_outlier_detection.ipynb
+++ b/docs/users/workshops/FY21_workshop/3_outlier_detection.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# AutoCNet\n",
+    "# AutoCNet Introduction\n",
     "AutoCnet is a set of tools for generating, analyzing, and improving control networks of various sizes. In this tutorial, we will take a look at the basic components of AutoCNet and use it to analyze the initial Galileo Europa network."
    ]
   },
@@ -48,7 +48,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Configuration\n",
+    "<br><br>\n",
+    "## Configuration\n",
     "AutoCNet leverages services for cluster processing and data presistance that require configuration parameters to setup properly. For the cluster processing, AutoCNet uses a module called [redis](https://redis.io/) to create queues for the cluster jobs waiting to be dispatched to the cluster, a cluster for the computations, and conda environments activated during the cluster jobs to give the cluster access to the appropriate packages. Then for the database presistence AutoCNet uses a PostGIS database that requires spatial information.\n",
     "\n",
     "In summary, AutoCNet needs configuration parameters for the following servives:\n",
@@ -58,7 +59,7 @@
     "- database\n",
     "- spatial\n",
     "\n",
-    "## Setting up the Configuration\n",
+    "### Setting up the Configuration\n",
     "You can configure AutoCNet with either a configuration file or a Python dictionary. If you are going to be doing continuing work on a network we recommend that you use a config file and treat it like the project file for your network. For this workshop, we're going to be using a dictionary because we can programmatically fill it in to ensure each participant has their own sand-box to work in.\n",
     "\n",
     "The configuration parameters are typically held in a configuration yaml file. A configuration file has been compiled for use internal to the USGS ASC facilities leveraging a shared cluster and database. Use AutoCNet's function 'parse_config' to read in the yaml file and output a dictionary variable."
@@ -101,7 +102,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# The NetworkCandidateGraph\n",
+    "<br><br>\n",
+    "## The NetworkCandidateGraph\n",
     "The core of AutoCNet is the NetworkCandidateGraph, or NCG, which represents all of the images and their relationships. As the name implies, the NCG is a graph structure where each image is a node and overlapping images have an edge between them. The NCG stores all of the control points and control measures in separate tables and associates them with corresponding images. The last component of the NCG is its spatial abilities. Because it is backed by a PostGIS database, each image, overlap region, and control point has a latitude, longitude geometry associated with it. These three components together allow for a broad range of control processing techniques."
    ]
   },
@@ -109,7 +111,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Setting up the NetworkCandidateGraph\n",
+    "### Setting up the NetworkCandidateGraph\n",
     "The first step in creating a NetworkCandidateGraph is to create an object and configure it. This will setup the NCG with all of the information it needs to store and process the data we are going to load into it."
    ]
   },
@@ -129,7 +131,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Loading image data\n",
+    "### Loading image data\n",
     "Now that our NetworkCandidateGraph is configured, we can load our Galileo images into it.\n",
     "\n",
     "**NOTE: Be very careful re-running this cell as the clear_db=True parameter dumps all of the data out of your database if it already exists**"
@@ -168,13 +170,14 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Exercise: What do you notice about the graph structure? Why does the graph look that way?"
+    "#### Exercise: What do you notice about the graph structure? Why does the graph look that way?"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "<br><br>\n",
     "## PGAdmin\n",
     "\n",
     "Let's take a look at our NCG's database. You can view all of the data in our NCG on PGAdmin at [autocnet.wr.usgs.gov](https://autocnet.wr.usgs.gov)."
@@ -184,7 +187,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Loading control data\n",
+    "### Loading control data\n",
     "\n",
     "If we were generating a network from scratch, we would use some of AutoCNets image matching and spatial tools to pick control points and control measures. We'll see that process in the next workshop, for now we're just going to load in the data from the existing ISIS control network."
    ]
@@ -205,7 +208,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Exercise: Go on PGAdmin and look at what tables are populated in the database and what tables are not populated."
+    "#### Exercise: Go on PGAdmin and look at what tables are populated in the database and what tables are not populated."
    ]
   },
   {
@@ -249,7 +252,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Getting the pairwise image matches\n",
+    "<br><br><br>\n",
+    "## Getting the pairwise image matches\n",
     "All of our control data is now loaded into out NCG and we can start working with it. In this notebook we will be using pairwise compute vision techniques to look for bad control measures.\n",
     "\n",
     "The first process we need to do is collect all of the pairwise matches between images. Our control network currently contains control points and all of the measurements of them. We need to convert these multi-image relationships into all of the common points between each pair of images.\n",
@@ -297,7 +301,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Convert control measures and points to image matches\n",
+    "### Convert control measures and points to image matches\n",
     "This cell uses apply to run the network_to_matches function on each edge. It is very important that this function only get run once per edge or it will add duplicate matches. So, this cell also contains a check that skips the function if the database already has matches in it."
    ]
   },
@@ -359,14 +363,15 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Outlier Detection"
+    "<br><br><br>\n",
+    "## Outlier Detection"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Homographies and Reprojective Error\n",
+    "### Homographies and Reprojective Error\n",
     "The first computer vision technique that we will apply is called a homography. A homography is a transformation between two planes. In the contect of multi-view imagery, a homography is used when two images observe the same planar surface."
    ]
   },
@@ -404,7 +409,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## The Fundamental Matrix\n",
+    "### The Fundamental Matrix\n",
     "The next computer vision technique we will apply is called the fundamental matrix. Similar to a homography, the fundamental matrix describes the relationship between two images that are observing the same thing. Unlike a homography, though, the fundamental matrix does not assume that the two images are observing a planar surface. Instead, the fundamental matrix describes the epipolar geometry between the two images. In short, the epipolar geometry is what lines and points are visible in one image, but occluded in the other."
    ]
   },
diff --git a/docs/users/workshops/FY21_workshop/4_network_generation.ipynb b/docs/users/workshops/FY21_workshop/4_network_generation.ipynb
index b60818ff..6c2ced80 100644
--- a/docs/users/workshops/FY21_workshop/4_network_generation.ipynb
+++ b/docs/users/workshops/FY21_workshop/4_network_generation.ipynb
@@ -18,7 +18,7 @@
    "metadata": {},
    "source": [
     "<a id='toc'></a>\n",
-    "# AutoCNet Intro\n",
+    "# Processing with AutoCNet Introduction\n",
     "As mentioned earlier AutoCNet is a method for storing control networks and has outlier detection functionality. AutoCNet also contains a suite of functions that parallelize network generation that leverages and compliments ISIS processing. The advantage of AutoCNet network generation is it takes advantage of elementwise cluster processing (these elements can be images, points, measures, etc.) and postgresql for data storage and quick relational querying. \n",
     "\n",
     "In this notebook we are going to step through the network generation process in AutoCNet!\n",
@@ -90,7 +90,9 @@
    "metadata": {},
    "source": [
     "<a id='configuration'></a>\n",
-    "# Parse the Configuration File\n",
+    "<br><br>\n",
+    "## Setup AutoCnet\n",
+    "### Parse the Configuration File\n",
     "[Return To Top](#toc)\n",
     "\n",
     "\n",
@@ -201,7 +203,8 @@
    "metadata": {},
    "source": [
     "<a id=\"ingest\"></a>\n",
-    "# Ingest Image Data and Calculate Overlaps\n",
+    "<br><br>\n",
+    "## Ingest Image Data and Calculate Overlaps\n",
     "[Return To Top](#toc)\n",
     "\n",
     "At this point our ncg variable is empty, so if we try to plot the contents we will get an empty plot. "
@@ -414,7 +417,8 @@
    "metadata": {},
    "source": [
     "<a id=\"distribute\"></a>\n",
-    "# Place Points in Overlap\n",
+    "<br><br>\n",
+    "## Place Points in Overlap\n",
     "[Return To Top](#toc)\n",
     "\n",
     "The next step in the network generation process is to lay down points in the image overlaps. Before dispatching the function to the cluster, we need to make the log directory from our configuration file. If a SLURM job is submitted with a log directory argument that does not exist, the job will fail."
@@ -981,7 +985,8 @@
    "metadata": {},
    "source": [
     "<a id=\"registration\"></a>\n",
-    "# Subpixel Registration\n",
+    "<br><br>\n",
+    "## Subpixel Registration\n",
     "[Return To Top](#toc)\n",
     "\n",
     "The next step is to subpixel register the measures on the newly laid points, to do this we are going to use the 'subpixel_register_point' function. As the name suggests, 'subpixel_register_point' registers the measures on a single point, which makes it parallelizable on a network's points. Before we fire off the cluster jobs, let's create a new subpixel registration log directory."
@@ -1006,7 +1011,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## First Run"
+    "### First Run"
    ]
   },
   {
@@ -1170,7 +1175,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Visualize Point Registration"
+    "#### Visualize Point Registration"
    ]
   },
   {
@@ -1217,7 +1222,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Second run\n",
+    "### Second run\n",
     "We are going to rerun the subpixel registration with larger chips to attempt to register the measures that failed first run. "
    ]
   },
diff --git a/docs/users/workshops/index.rst b/docs/users/workshops/index.rst
index 3d47482b..6ccfdf63 100644
--- a/docs/users/workshops/index.rst
+++ b/docs/users/workshops/index.rst
@@ -9,3 +9,5 @@ Astrogeology Science Center Workshop
    Using PLIO to analyze control networks<FY21_workshop/2_plio_analysis.ipynb>
    Homography and Fundamental matrix outlier detection in AutoCNet<FY21_workshop/3_outlier_detection.ipynb>
    Generating a Control Network with AutoCNet<FY21_workshop/4_network_generation.ipynb>
+
+
-- 
GitLab