Repository: xgi-org/xgi

Issue:
`remove_simplex_ids()` raises error when removing all simplices from a SC
Originally noted in #578. I am working on fixing it.

```
>>> tetra = xgi.SimplicialComplex([[1,2,3,4]])
>>> bunch = tetra.edges.filterby("order", 0, "gt")
>>> tetra.remove_simplex_ids_from(bunch)
Traceback (most recent call last):
  File "/Users/thomasrobiglio/GitHub/xgi/xgi/utils/utilities.py", line 40, in __getitem__
    return dict.__getitem__(self, item)
KeyError: 4

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/thomasrobiglio/GitHub/xgi/xgi/core/simplicialcomplex.py", line 749, in remove_simplex_id
    supfaces_ids = self._supfaces_id(self._edge[id])
  File "/Users/thomasrobiglio/GitHub/xgi/xgi/utils/utilities.py", line 42, in __getitem__
    raise IDNotFound(f"ID {item} not found") from e
xgi.exception.IDNotFound: 'ID 4 not found'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/thomasrobiglio/GitHub/xgi/xgi/core/simplicialcomplex.py", line 779, in remove_simplex_ids_from
    self.remove_simplex_id(id)
  File "/Users/thomasrobiglio/GitHub/xgi/xgi/core/simplicialcomplex.py", line 757, in remove_simplex_id
    raise XGIError(f"Simplex {id} is not in the Simplicialcomplex") from e
xgi.exception.XGIError: Simplex 4 is not in the Simplicialcomplex
```

quoting @maximelucas:

> I think it fails when trying to remove edge 4: frozenset({1, 2, 3}) which does not exist anymore already because it already removed 2: frozenset({1, 2}), and in doing so had to remove 4: frozenset({1, 2, 3}) already to ensure downward closure.

Discussion:

Solution patch:
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
index 817caa117..c52307336 100644
--- a/docs/source/_static/custom.css
+++ b/docs/source/_static/custom.css
@@ -20,14 +20,37 @@ td a {
     display: block;
 }
  
-table tr:nth-child(even){background-color: #f2f2f2;}
- 
-table tr:hover {background-color: #ddd;}
- 
 th {
     padding-top: 12px;
     padding-bottom: 12px;
     text-align: left;
     background-color: #04AA6D;
     color: white;
+}
+
+html[data-theme="light"] {
+    /* whatever you want to change */
+    background: white;
+}
+
+/* anything related to the dark theme */
+html[data-theme="dark"] {
+    /* whatever you want to change */
+    background: black;
+}
+
+html[data-theme="dark"] table.data tbody tr:nth-child(odd) {
+    background-color: #2e2e2e; /* Darker gray */
+}
+
+html[data-theme="dark"] table.data tbody tr:nth-child(even) {
+    background-color: #3e3e3e; /* Lighter gray */
+}
+
+html[data-theme="light"] table.data tbody tr:nth-child(odd) {
+    background-color: #eeeeee; /* Darker gray */
+}
+
+html[data-theme="light"] table.data tbody tr:nth-child(even) {
+    background-color: #f2f2f2; /* Lighter gray */
 }
\ No newline at end of file
diff --git a/docs/source/_static/table.js b/docs/source/_static/table.js
index 4eeaf57dd..bae0b998a 100644
--- a/docs/source/_static/table.js
+++ b/docs/source/_static/table.js
@@ -16,6 +16,7 @@ async function fetch_JSON_file(url) {
 function create_table(json_data) {
     const section = document.getElementById("network-statistics")
     const table = document.createElement('table');
+    table.setAttribute( "class", "data" );
     const table_header = document.createElement('thead')
     const table_body = document.createElement('tbody')
 
diff --git a/docs/source/_static/version_switcher.json b/docs/source/_static/version_switcher.json
new file mode 100644
index 000000000..0b0ab048d
--- /dev/null
+++ b/docs/source/_static/version_switcher.json
@@ -0,0 +1,13 @@
+[
+    {
+        "name": "latest",
+        "version": "latest",
+        "url": "https://xgi.readthedocs.io/en/latest/"
+    },
+    {
+        "name": "stable",
+        "version":"stable",
+        "url": "https://xgi.readthedocs.io/en/stable/",
+        "preferred": true
+    }
+]
\ No newline at end of file
diff --git a/docs/source/about.rst b/docs/source/about.rst
deleted file mode 100644
index 95883e85a..000000000
--- a/docs/source/about.rst
+++ /dev/null
@@ -1,112 +0,0 @@
-.. image:: ../../logo/logo.svg
-  :width: 200
-
-
-About
-=====
-
-The Comple\ **X** **G**\ roup **I**\ nteractions `(XGI) <https://github.com/xgi-org/xgi>`_
-library provides data structures and algorithms for modeling and analyzing complex systems
-with group (higher-order) interactions.
-
-Many datasets can be represented as graphs, where pairs of entities (or nodes) are
-related via links (or edges).  Examples are road networks, energy grids, social
-networks, neural networks, etc.  However, in many other datasets, more than two entities
-can be related at a time.  For example, many scientists (entities) can collaborate on a
-scientific article together (links), and multiple email accounts (entities) can all
-participate on the same email thread (links).  In this latter case, graphs no longer
-present a viable alternative to represent such datasets.  It is for this kind of
-datasets, where the interactions are given among groups of more than two entities (also
-called higher-order interactions), that XGI was designed for.
-
-XGI is implemented in pure Python and is designed to seamlessly interoperate with the
-rest of the Python scientific stack (numpy, scipy, pandas, matplotlib, etc).  XGI is
-designed and developed by network scientists with the needs of network scientists in
-mind.
-
-- Repository: https://github.com/xgi-org/xgi
-- PyPI: `latest release <https://pypi.org/project/xgi/>`_
-- Twitter: `@xginets <https://twitter.com/xginets>`_
-- `List of Contributors <contributors.html>`_
-- `Projects Using XGI <using-xgi.html>`_
-
-Sign up for our `mailing list <http://eepurl.com/igE6ez>`_ and follow XGI on `Twitter <https://twitter.com/xginets>`_ or `Mastodon <https://mathstodon.xyz/@xginets>`_!
-
-
-
-Installation
-============
-
-To install and use XGI as an end user, execute
-
-.. code:: bash
-
-   pip install xgi
-
-To install for development purposes, first clone the repository and then execute
-
-.. code:: bash
-
-   pip install -e .['all']
-
-If that command does not work, you may try the following instead
-
-.. code:: zsh
-
-   pip install -e .\[all\]
-
-XGI was developed and tested for Python 3.8-3.12 on Mac OS, Windows, and Ubuntu.
-
-
-Academic References
-===================
-
-* `The Why, How, and When of Representations for Complex Systems
-  <https://doi.org/10.1137/20M1355896>`_, Leo Torres, Ann S. Blevins, Danielle Bassett,
-  and Tina Eliassi-Rad.
-
-* `Networks beyond pairwise interactions: Structure and dynamics
-  <https://doi.org/10.1016/j.physrep.2020.05.004>`_, Federico Battiston, Giulia
-  Cencetti, Iacopo Iacopini, Vito Latora, Maxime Lucas, Alice Patania, Jean-Gabriel
-  Young, and Giovanni Petri.
-
-* `What are higher-order networks? <https://arxiv.org/abs/2104.11329>`_, Christian Bick,
-  Elizabeth Gross, Heather A. Harrington, Michael T. Schaub.
-
-
-Contributing
-============
-
-If you want to contribute to this project, please make sure to read the
-`contributing guidelines <https://github.com/xgi-org/xgi/blob/main/HOW_TO_CONTRIBUTE.md>`_.
-We expect respectful and kind interactions by all contributors and users
-as laid out in our `code of conduct <https://github.com/xgi-org/xgi/blob/main/CODE_OF_CONDUCT.md>`_.
-
-The XGI community always welcomes contributions, no matter how small.
-We're happy to help troubleshoot XGI issues you run into,
-assist you if you would like to add functionality or fixes to the codebase,
-or answer any questions you may have.
-
-Some concrete ways that you can get involved:
-
-* **Get XGI updates** by following the XGI `Twitter <https://twitter.com/xginets>`_ account, signing up for our `mailing list <http://eepurl.com/igE6ez>`_, or starring this repository.
-* **Spread the word** when you use XGI by sharing with your colleagues and friends.
-* **Request a new feature or report a bug** by raising a `new issue <https://github.com/xgi-org/xgi/issues/new>`_.
-* **Create a Pull Request (PR)** to address an `open issue <https://github.com/xgi-org/xgi/issues>`_ or add a feature.
-* **Join our Zulip channel** to be a part of the `daily goings-on of XGI <https://xgi.zulipchat.com/join/7agfwo7dh7jo56ppnk5kc23r/>`_.
-
-
-Funding
-=======
-
-The XGI package has been supported by NSF Grant 2121905,
-`HNDS-I: Using Hypergraphs to Study Spreading Processes in Complex Social Networks <https://www.nsf.gov/awardsearch/showAward?AWD_ID=2121905>`_.
-
-
-License
-=======
-
-This project is licensed under the `BSD 3-Clause License
-<https://github.com/xgi-org/xgi/blob/main/LICENSE.md>`_.
-
-Copyright (C) 2021-2024 XGI Developers
diff --git a/docs/source/api/recipes.rst b/docs/source/api/recipes.rst
deleted file mode 100644
index 9b50a1e38..000000000
--- a/docs/source/api/recipes.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. _recipes:
-
-##################
-Recipes
-##################
-
-.. toctree::
-   :maxdepth: 1
-
-   recipes/recipes
\ No newline at end of file
diff --git a/docs/source/api/tutorials.rst b/docs/source/api/tutorials.rst
deleted file mode 100644
index 4bec74985..000000000
--- a/docs/source/api/tutorials.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-##################
-Tutorials
-##################
-
-.. toctree::
-   :maxdepth: 2
-
-   tutorials/getting_started
-   tutorials/focus
-   tutorials/in_depth
-   tutorials/case_studies
-
diff --git a/docs/source/api/tutorials/case_studies.rst b/docs/source/api/tutorials/case_studies.rst
index 8f700b8e1..7a8840576 100644
--- a/docs/source/api/tutorials/case_studies.rst
+++ b/docs/source/api/tutorials/case_studies.rst
@@ -1,3 +1,5 @@
+:orphan:
+
 ############
 Case studies
 ############
diff --git a/docs/source/api/tutorials/focus.rst b/docs/source/api/tutorials/focus.rst
index aadf1ade5..acd9d3744 100644
--- a/docs/source/api/tutorials/focus.rst
+++ b/docs/source/api/tutorials/focus.rst
@@ -1,4 +1,4 @@
-.. _focus_tutorials:
+:orphan:
 
 ################
 Focus tutorials
@@ -18,5 +18,5 @@ Focus tutorials
 
 .. seealso:: 
    
-   This is now too easy and you want to dive deeper into some features of XGI?
+   Is this too easy and you want to dive deeper into some features of XGI?
    Go to the `In-depth Tutorials <in_depth.html>`_.
\ No newline at end of file
diff --git a/docs/source/api/tutorials/getting_started.rst b/docs/source/api/tutorials/getting_started.rst
index 10f5caa35..bc409d1fc 100644
--- a/docs/source/api/tutorials/getting_started.rst
+++ b/docs/source/api/tutorials/getting_started.rst
@@ -1,4 +1,4 @@
-.. _xgi_in_x_minutes:
+:orphan:
 
 ###############
 Getting started
diff --git a/docs/source/api/tutorials/in_depth.rst b/docs/source/api/tutorials/in_depth.rst
index 4dc28ef8f..ce64ba93b 100644
--- a/docs/source/api/tutorials/in_depth.rst
+++ b/docs/source/api/tutorials/in_depth.rst
@@ -1,5 +1,4 @@
-.. _indepth_tutorials:
-
+:orphan:
 
 ##################
 In Depth tutorials
diff --git a/docs/source/api/recipes/recipes.nblink b/docs/source/api/tutorials/recipes.nblink
similarity index 100%
rename from docs/source/api/recipes/recipes.nblink
rename to docs/source/api/tutorials/recipes.nblink
diff --git a/docs/source/reference.rst b/docs/source/api_reference.rst
similarity index 88%
rename from docs/source/reference.rst
rename to docs/source/api_reference.rst
index 1dad224e8..51777d2c4 100644
--- a/docs/source/reference.rst
+++ b/docs/source/api_reference.rst
@@ -1,5 +1,3 @@
-.. _reference:
-
 **************
 API Reference
 **************
@@ -22,7 +20,7 @@ XGI is organized into the following subpackages:
 
 .. note::
 
-   This page describes release |version| of XGI. Find out more in the `Release notes <https://github.com/xgi-org/xgi/releases>`_ about this and previous releases.
+   This page describes release |version| of XGI. Find out more about this release and previous releases in the `release notes <https://github.com/xgi-org/xgi/releases>`_.
    
 .. toctree::
    :maxdepth: 2
diff --git a/docs/source/conf.py b/docs/source/conf.py
index ae03e468b..79a0f4d87 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -160,15 +160,17 @@
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
+
 # documentation.
 html_theme_options = {
     "navbar_end": [
+        "theme-switcher",
         "navbar-icon-links",
     ],  # Place the social links at the end of the navbar
     "icon_links": [
         {
             "name": "GitHub",
-            "url": "https://xgi.readthedocs.io/",
+            "url": "https://github.com/xgi-org/xgi",
             "icon": "fab fa-github-square",  # Font Awesome icon
         },
         {
diff --git a/docs/source/contribute.rst b/docs/source/contribute.rst
index 0ec11f908..c75cb4a59 100644
--- a/docs/source/contribute.rst
+++ b/docs/source/contribute.rst
@@ -1,8 +1,6 @@
-.. _contribute:
-
-****************
+***********
 Development
-****************
+***********
 
 
 Contribute
diff --git a/docs/source/contributors.rst b/docs/source/contributors.rst
deleted file mode 100644
index bf063252b..000000000
--- a/docs/source/contributors.rst
+++ /dev/null
@@ -1,160 +0,0 @@
-Contributors
-============
-
-The XGI project has been helped by invaluable contributions from many members of the community. All listings are alphabetical.
-
-Core team
----------
-
-.. raw:: html
-
-    <p>
-        <img src="https://github.com/acuschwarze.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/acuschwarze">@acuschwarze</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/alpatania.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/alpatania">@alpatania</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/iaciac.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/iaciac">@iaciac</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/leotrs.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/leotrs">@leotrs</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/lordgrilo.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/lordgrilo">@lordgrilo</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/maximelucas.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/maximelucas">@maximelucas</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/nwlandry.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/nwlandry">@nwlandry</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/tlarock.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/tlarock">@tlarock</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/thomasrobiglio.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/thomasrobiglio">@thomasrobiglio</a>
-    </p>
-
-
-Core team alumni
-----------------
-
-.. raw:: html
-
-    <p>
-        <img src="https://github.com/mcontisc.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/mcontisc">@mcontisc</a>
-    </p>
-
-Contributors
-------------
-
-.. raw:: html
-
-    <p>
-        <img src="https://github.com/acombretrenouard.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/acombretrenouard">@acombretrenouard</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/aleable.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/aleable">@aleable</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/arnaudon.png"
-                width="50" height="50" hspace="5"
-                style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/arnaudon">@arnaudon</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/colltoaction.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/colltoaction">@colltoaction</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/doabell.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/doabell">@doabell</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/goznalo-git.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/goznalo-git">@goznalo-git</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/marconurisso.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/marconurisso">@marconurisso</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/pgberlureau.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/pgberlureau">@pgberlureau</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/pietrotraversa.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/pietrotraversa">@pietrotraversa</a>
-    </p>
-
-    <p>
-        <img src="https://github.com/saad1282.png"
-            width="50" height="50" hspace="5"
-            style="border-radius: 50%; vertical-align: middle;"/>
-        <a href="https://github.com/saad1282">@saad1282</a>
-    </p>
diff --git a/docs/source/higher-order.rst b/docs/source/higher-order.rst
index 51214332d..5dfa0ef4b 100644
--- a/docs/source/higher-order.rst
+++ b/docs/source/higher-order.rst
@@ -1,3 +1,5 @@
+:orphan:
+
 ***********************************
 What are higher-order interactions?
 ***********************************
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 39917ac0e..134b00194 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -8,7 +8,7 @@
 
    installing
    user_guides
-   reference
+   api_reference
    xgi-data
    gallery
    contribute
diff --git a/docs/source/installing.rst b/docs/source/installing.rst
index 6c955070a..2c848b9cd 100644
--- a/docs/source/installing.rst
+++ b/docs/source/installing.rst
@@ -1,8 +1,6 @@
-.. _installing:
-
-***************
+**********
 Installing
-***************
+**********
 
 
 Installing the released version
diff --git a/docs/source/installing_more.rst b/docs/source/installing_more.rst
index 8f920a57f..a073d5bc4 100644
--- a/docs/source/installing_more.rst
+++ b/docs/source/installing_more.rst
@@ -1,8 +1,8 @@
-.. _installing_more:
+:orphan:
 
-***************************
+*************************
 Installation instructions
-***************************
+*************************
 
 pip installing with options
 ============================
@@ -33,7 +33,7 @@ You may wish to install the dependencies without actually installing XGI itself.
 - ``default.txt``: Default requirements
 - ``tutorial.txt``: Requirements for running the Jupyter Notebooks with the examples
 - ``test.txt``: Requirements for running test suite
-- ```docs.txt``: Requirements for building the documentation (see `../docs/`)
+- ``docs.txt``: Requirements for building the documentation (see `../docs/`)
 - ``developer.txt``: Requirements for developers
 - ``release.txt``: Requirements for making releases
 
diff --git a/docs/source/user_guides.rst b/docs/source/user_guides.rst
index 4d47f3c8b..3119a5050 100644
--- a/docs/source/user_guides.rst
+++ b/docs/source/user_guides.rst
@@ -1,8 +1,6 @@
-.. _guides:
-
-***********************************
+***********
 User Guides
-***********************************
+***********
 
 
 .. grid::
@@ -17,13 +15,15 @@ User Guides
 
     	+++
 
-        .. button-ref:: xgi_in_x_minutes
+        .. button-ref:: api/tutorials/getting_started
             :expand:
             :color: secondary
             :click-parent:
 
             To the absolute beginner's guide
 
+.. grid::
+
     .. grid-item-card:: 
     	:text-align: center
 
@@ -35,17 +35,13 @@ User Guides
 
     	+++
 
-        .. button-ref:: focus_tutorials
+        .. button-ref:: api/tutorials/focus
             :expand:
             :color: secondary
             :click-parent:
 
             To the focus tutorials
 
-
-
-.. grid::
-	
     .. grid-item-card:: 
     	:text-align: center
 
@@ -55,13 +51,15 @@ User Guides
     	To know everything there is to know about a specific feature of XGI 
     	+++
 
-        .. button-ref:: indepth_tutorials
+        .. button-ref:: api/tutorials/in_depth
             :expand:
             :color: secondary
             :click-parent:
 
             To the in-depth tutorials
 
+.. grid::
+
     .. grid-item-card:: 
     	:text-align: center
 
@@ -72,13 +70,28 @@ User Guides
 
     	+++
 
-        .. button-ref:: recipes
+        .. button-ref:: api/tutorials/recipes
             :expand:
             :color: secondary
             :click-parent:
 
             To the cookbook
+	
+    .. grid-item-card:: 
+    	:text-align: center
+
+    	Case studies
+    	^^^
+
+    	To see how others have used XGI in their work
+    	+++
+
+        .. button-ref:: api/tutorials/case_studies
+            :expand:
+            :color: secondary
+            :click-parent:
 
+            To the case studies
 
 
-For all specifications and options of a particular function, or to explore all existing function, see the `API Reference <reference.html>`_.
\ No newline at end of file
+For all specifications and options of a particular function, or to explore all existing functions, see the `API Reference <reference.html>`_.
\ No newline at end of file
diff --git a/docs/source/using-xgi.rst b/docs/source/using-xgi.rst
index 5438d7d06..d2c2ec82f 100644
--- a/docs/source/using-xgi.rst
+++ b/docs/source/using-xgi.rst
@@ -1,6 +1,3 @@
-.. _using_xgi:
-
-
 ******************
 Projects using XGI
 ******************
@@ -15,6 +12,16 @@ Published work
 2024
 ----
 
+Gonzalo Contreras-Aso, Regino Criado, and Miguel Romance, "Beyond directed hypergraphs: heterogeneous hypergraphs and spectral centralities", *Journal of Complex Networks*, Volume 12, Issue 4, cnae037 (2024).
+
+:bdg-link-primary-line:`Paper <https://doi.org/10.1093/comnet/cnae037>`
+:bdg-link-primary-line:`Code <https://github.com/goznalo-git/DirectedHyperCentrality>`
+
+Iacopo Iacopini, Márton Karsai, and Alain Barrat, "The temporal dynamics of group interactions in higher-order social networks", *Nature Communications* **15**, 7391 (2024).
+
+:bdg-link-primary-line:`Paper <https://doi.org/10.1038/s41467-024-50918-5>`
+:bdg-link-primary-line:`Code <https://github.com/iaciac/temporal-group-interactions>`
+
 Nicholas W. Landry, Ilya Amburg, Mirah Shi, and Sinan Aksoy, "Filtering higher-order datasets", *Journal of Physics: Complexity* **5**, 015006 (2024).
 
 :bdg-link-primary-line:`Paper <https://doi.org/10.1088/2632-072X/ad253a>`
@@ -69,11 +76,6 @@ Jordan Barrett, Paweł Prałat, Aaron Smith, François Théberge, "Counting simp
 
 :bdg-link-primary-line:`Paper <https://arxiv.org/abs/2408.11806>`
 
-Gonzalo Contreras-Aso, Regino Criado, and Miguel Romance, "Beyond directed hypergraphs: heterogeneous hypergraphs and spectral centralities", arXiv:2403.11825 (2024).
-
-:bdg-link-primary-line:`Paper <https://arxiv.org/abs/2403.11825>`
-:bdg-link-primary-line:`Code <https://github.com/goznalo-git/DirectedHyperCentrality>`
-
 Robin Delabays, Giulia De Pasquale, Florian Dörfler, and Yuanzhao Zhang, "Hypergraph reconstruction from dynamics", arXiv:2402.00078 (2024).
 
 :bdg-link-primary-line:`Paper <https://arxiv.org/abs/2402.00078>`
@@ -102,11 +104,6 @@ Gonzalo Contreras-Aso, Cristian Pérez-Corral, and Miguel Romance, "Uplifting ed
 :bdg-link-primary-line:`Paper <https://arxiv.org/abs/2310.20335>`
 :bdg-link-primary-line:`Code <https://github.com/LaComarca-Lab/non-uniform-hypergraphs>`
 
-Iacopo Iacopini, Márton Karsai, and Alain Barrat, "The temporal dynamics of group interactions in higher-order social networks", arXiv:2306.09967 (2023).
-
-:bdg-link-primary-line:`Paper <https://arxiv.org/abs/2306.09967>`
-:bdg-link-primary-line:`Code <https://github.com/iaciac/temporal-group-interactions>`
-
 Yuanzhao Zhang, Per Sebastian Skardal, Federico Battiston, Giovanni Petri, and Maxime Lucas, "Deeper but smaller: Higher-order interactions increase linear stability but shrink basins", arXiv:2309.16581 (2023).
 
 :bdg-link-primary-line:`Paper <https://arxiv.org/abs/2309.16581>`
diff --git a/docs/source/xgi-data.rst b/docs/source/xgi-data.rst
index d61f294e8..5b964bdc1 100644
--- a/docs/source/xgi-data.rst
+++ b/docs/source/xgi-data.rst
@@ -14,7 +14,7 @@ Loading a dataset using XGI is as simple as the following two lines:
    import xgi
    H = xgi.load_xgi_data("<dataset_name>")
 
-XGI-DATA uses an HTTP request to load the hypergraph dataset. See the `Reference <api/readwrite/xgi.readwrite.xgi_data.html>`_ for a complete description of the function.
+XGI-DATA uses an HTTP request to load the hypergraph dataset. See the `load_xgi_data() documentation  <api/readwrite/xgi.readwrite.xgi_data.html>`_ for a complete description of the function.
 
 The directed hypergraph datasets from the Biochemical, Genetic and Genomic (BIGG) database can also be loaded with:
 
@@ -25,7 +25,7 @@ The directed hypergraph datasets from the Biochemical, Genetic and Genomic (BIGG
    H = xgi.load_bigg_data("<dataset_name>")  
 
 
-See the `Reference <api/readwrite/xgi.readwrite.bigg_data.html>`_ for a complete description of the function.
+See the `load_bigg_data() documentation <api/readwrite/xgi.readwrite.bigg_data.html>`_ for a complete description of the function.
 
 Dataset format
 --------------
diff --git a/requirements/docs.txt b/requirements/docs.txt
index 7904b8305..ebca68425 100644
--- a/requirements/docs.txt
+++ b/requirements/docs.txt
@@ -10,3 +10,4 @@ sphinx-design
 ipykernel
 nbsphinx
 nbsphinx-link
+pydata-sphinx-theme
diff --git a/tutorials/case_studies/case_study_zhang2022.ipynb b/tutorials/case_studies/case_study_zhang2022.ipynb
index 57b9d090f..45542e16b 100644
--- a/tutorials/case_studies/case_study_zhang2022.ipynb
+++ b/tutorials/case_studies/case_study_zhang2022.ipynb
@@ -52,7 +52,7 @@
     "\n",
     "    Parameters\n",
     "    ----------\n",
-    "    HG : xgi.HyperGraph\n",
+    "    HG : xgi.Hypergraph\n",
     "        Hypergraph\n",
     "    order : int\n",
     "        Order to consider.\n",
@@ -351,7 +351,7 @@
     "\n",
     "    Parameters\n",
     "    ----------\n",
-    "    HG : xgi.HyperGraph\n",
+    "    HG : xgi.Hypergraph\n",
     "        Hypergraph\n",
     "    orders : list of int\n",
     "        Orders of interactions to consider.\n",
diff --git a/xgi/algorithms/properties.py b/xgi/algorithms/properties.py
index ed8571bd4..3cade80f3 100644
--- a/xgi/algorithms/properties.py
+++ b/xgi/algorithms/properties.py
@@ -152,7 +152,7 @@ def edge_neighborhood(H, n, include_self=False):
 
     See Also
     --------
-    neighbors
+    ~xgi.core.views.IDView.neighbors
 
     Examples
     --------
diff --git a/xgi/convert/bipartite_edges.py b/xgi/convert/bipartite_edges.py
index cfb729e74..ae9763226 100644
--- a/xgi/convert/bipartite_edges.py
+++ b/xgi/convert/bipartite_edges.py
@@ -21,7 +21,9 @@ def from_bipartite_edgelist(edges):
 
     See Also
     --------
-    to_hyperedge_list
+    to_bipartite_edgelist
+    ~xgi.convert.hyperedges.from_hyperedge_list
+    ~xgi.convert.hyperedges.to_hyperedge_list
     """
     if len(edges[0]) == 3:  # directed
         H = DiHypergraph()
@@ -55,7 +57,9 @@ def to_bipartite_edgelist(H):
 
     See Also
     --------
-    from_hyperedge_list
+    from_bipartite_edgelist
+    ~xgi.convert.hyperedges.to_hyperedge_list
+    ~xgi.convert.hyperedges.from_hyperedge_list
     """
     if isinstance(H, DiHypergraph):
         edgelist = []
diff --git a/xgi/convert/encapsulation_dag.py b/xgi/convert/encapsulation_dag.py
index c80b97713..ef41a5035 100644
--- a/xgi/convert/encapsulation_dag.py
+++ b/xgi/convert/encapsulation_dag.py
@@ -20,18 +20,19 @@ def to_encapsulation_dag(H, subset_types="all"):
         The hypergraph of interest
     subset_types : str, optional
         Type of relations to include. Options are:
-            "all" : all subset relationships
-            "immediate" : only subset relationships between hyperedges of
-                adjacent sizes (i.e., edges from k to k-1)
-            "empirical" : A relaxation of the "immediate" option where only
-                subset relationships between hyperedges of size k and subsets
-                of maximum size k'<k existing in the hypergraph are included.
-                For example, a hyperedge of size 5 may have no immediate
-                encapsulation relationships with hyperedges of size 4, but may
-                encapsulate hyperedegs of size 3, which will be included if
-                using this setting (whereas relationships with subsets of size 2
-                would not be included).
-
+            
+        * "all" : all subset relationships
+        * "immediate" : only subset relationships between hyperedges of
+          adjacent sizes (i.e., edges from k to k-1)
+        * "empirical" : A relaxation of the "immediate" option where only
+          subset relationships between hyperedges of size k and subsets
+          of maximum size k'<k existing in the hypergraph are included.
+          For example, a hyperedge of size 5 may have no immediate
+          encapsulation relationships with hyperedges of size 4, but may
+          encapsulate hyperedegs of size 3, which will be included if
+          using this setting (whereas relationships with subsets of size 2
+          would not be included).
+    
     Returns
     -------
     LG : networkx.DiGraph
diff --git a/xgi/convert/higher_order_network.py b/xgi/convert/higher_order_network.py
index 7231348f8..271fcc666 100644
--- a/xgi/convert/higher_order_network.py
+++ b/xgi/convert/higher_order_network.py
@@ -58,7 +58,7 @@ def to_hypergraph(data, create_using=None):
 
     See Also
     --------
-    from_max_simplices : Constructs a hypergraph from the maximal simplices of a simplicial complex.
+    ~xgi.utils.utilities.from_max_simplices : Constructs a hypergraph from the maximal simplices of a simplicial complex.
 
     """
     if data is None:
diff --git a/xgi/convert/hyperedges.py b/xgi/convert/hyperedges.py
index e954c024d..d41d682ca 100644
--- a/xgi/convert/hyperedges.py
+++ b/xgi/convert/hyperedges.py
@@ -30,7 +30,8 @@ def from_hyperedge_dict(d, create_using=None):
     See Also
     --------
     to_hyperedge_dict
-
+    from_hyperedge_list
+    to_hyperedge_list
     """
     H = empty_hypergraph(create_using)
     H.add_edges_from((members, uid) for uid, members in d.items())
@@ -54,6 +55,8 @@ def to_hyperedge_dict(H):
     See Also
     --------
     from_hyperedge_dict
+    to_hyperedge_list
+    from_hyperedge_list
     """
     return H.edges.members(dtype=dict)
 
@@ -76,6 +79,8 @@ def from_hyperedge_list(d, create_using=None, max_order=None):
     See Also
     --------
     to_hyperedge_list
+    from_hyperedge_dict
+    to_hyperedge_dict
     """
     H = empty_hypergraph(create_using)
     if isinstance(H, SimplicialComplex):
@@ -101,5 +106,7 @@ def to_hyperedge_list(H):
     See Also
     --------
     from_hyperedge_list
+    to_hyperedge_dict
+    from_hyperedge_dict
     """
     return H.edges.members()
diff --git a/xgi/convert/hypergraph_dict.py b/xgi/convert/hypergraph_dict.py
index 22882aaf4..c44b5e083 100644
--- a/xgi/convert/hypergraph_dict.py
+++ b/xgi/convert/hypergraph_dict.py
@@ -28,6 +28,11 @@ def to_hypergraph_dict(H):
         If node IDs will be collapsed when casting to a string.
     XGIError
         If edge Ids will be collapsed when casting to a string.
+
+    See Also
+    --------
+    ~xgi.readwrite.json.read_json
+    ~xgi.readwrite.json.write_json
     """
     data = {}
     data["type"] = get_network_type(H)
@@ -94,7 +99,8 @@ def from_hypergraph_dict(data, nodetype=None, edgetype=None, max_order=None):
 
     See Also
     --------
-    read_json
+    ~xgi.readwrite.json.read_json
+    ~xgi.readwrite.json.write_json
 
     """
     H = empty_hypergraph()
diff --git a/xgi/convert/incidence.py b/xgi/convert/incidence.py
index c9728a49c..3c294b7a4 100644
--- a/xgi/convert/incidence.py
+++ b/xgi/convert/incidence.py
@@ -37,7 +37,7 @@ def from_incidence_matrix(d, create_using=None, nodelabels=None, edgelabels=None
 
     See Also
     --------
-    incidence_matrix
+    ~xgi.linalg.hypergraph_matrix.incidence_matrix
     to_incidence_matrix
     """
     I = coo_array(d)
@@ -92,7 +92,7 @@ def to_incidence_matrix(H, sparse=True, index=False):
 
     See Also
     --------
-    incidence_matrix
+    ~xgi.linalg.hypergraph_matrix.incidence_matrix
     from_incidence_matrix
     """
     return incidence_matrix(H, sparse=sparse, index=index)
diff --git a/xgi/core/dihypergraph.py b/xgi/core/dihypergraph.py
index 22e78a0a8..c9dc04bca 100644
--- a/xgi/core/dihypergraph.py
+++ b/xgi/core/dihypergraph.py
@@ -52,6 +52,10 @@ class DiHypergraph:
     **attr : dict, optional, default: None
         Attributes to add to the hypergraph as key, value pairs.
 
+    See Also
+    --------
+    ~xgi.core.hypergraph.Hypergraph
+    
     Notes
     -----
     Unique IDs are assigned to each node and edge internally and are used to refer to
@@ -145,10 +149,10 @@ def __init__(self, incoming_data=None, **attr):
         self._edge_attr = self._edge_attr_dict_factory()
 
         self._nodeview = DiNodeView(self)
-        """A :class:`~xgi.core.direportviews.DiNodeView` of the directed hypergraph."""
+        """A :class:`~xgi.core.views.DiNodeView` of the directed hypergraph."""
 
         self._edgeview = DiEdgeView(self)
-        """An :class:`~xgi.core.direportviews.DiEdgeView` of the directed hypergraph."""
+        """An :class:`~xgi.core.views.DiEdgeView` of the directed hypergraph."""
 
         if incoming_data is not None:
             # This import needs to happen when this function is called, not when it is
@@ -1043,7 +1047,7 @@ def freeze(self):
 
         See Also
         --------
-        frozen : Method that raises an error when a user tries to modify the hypergraph
+        ~xgi.exception.frozen : Method that raises an error when a user tries to modify the hypergraph
         is_frozen : Check whether a dihypergraph is frozen
 
         Examples
diff --git a/xgi/core/hypergraph.py b/xgi/core/hypergraph.py
index 2e8ab0705..134e77257 100644
--- a/xgi/core/hypergraph.py
+++ b/xgi/core/hypergraph.py
@@ -44,6 +44,11 @@ class Hypergraph:
         Attributes to add to the hypergraph as key, value pairs.
         By default, None.
 
+    See Also
+    --------
+    ~xgi.core.simplicialcomplex.SimplicialComplex
+    ~xgi.core.dihypergraph.DiHypergraph
+
     Notes
     -----
     Unique IDs are assigned to each node and edge internally and are used to refer to
@@ -128,10 +133,10 @@ def __init__(self, incoming_data=None, **attr):
         self._edge_attr = self._edge_attr_dict_factory()
 
         self._nodeview = NodeView(self)
-        """A :class:`~xgi.core.reportviews.NodeView` of the hypergraph."""
+        """A :class:`~xgi.core.views.NodeView` of the hypergraph."""
 
         self._edgeview = EdgeView(self)
-        """An :class:`~xgi.core.reportviews.EdgeView` of the hypergraph."""
+        """An :class:`~xgi.core.views.EdgeView` of the hypergraph."""
 
         if incoming_data is not None:
             # This import needs to happen when this function is called, not when it is
@@ -628,7 +633,7 @@ def add_edges_from(self, ebunch_to_add, **attr):
             the same length, i.e. you cannot mix different formats.  The iterables
             containing edge members cannot be strings.
 
-        attr : **kwargs, optional
+        attr : \*\*kwargs:, optional
             Additional attributes to be assigned to all edges. Attribues specified via
             `ebunch_to_add` take precedence over `attr`.
 
@@ -987,9 +992,9 @@ def random_edge_shuffle(self, e_id1=None, e_id2=None):
         If the same node appears in both hyperedges, then this is still true after reshuffling.
         If either `e_id1` or `e_id2` is not provided, then two random edges are selected.
 
-        Reference
-        ---------
-        Philip S C., 2020.
+        References
+        ----------
+        Philip S Chodrow, 2020.
         "Configuration models of random hypergraphs."
         Journal of Complex Networks, 8(3).
         https://doi.org/10.1093/comnet/cnaa018
@@ -1490,7 +1495,7 @@ def freeze(self):
 
         See Also
         --------
-        frozen : Method that raises an error when a user tries to modify the hypergraph
+        ~xgi.exception.frozen : Method that raises an error when a user tries to modify the hypergraph
         is_frozen : Check whether a hypergraph is frozen
 
         Examples
diff --git a/xgi/core/simplicialcomplex.py b/xgi/core/simplicialcomplex.py
index 61980992f..09885251e 100644
--- a/xgi/core/simplicialcomplex.py
+++ b/xgi/core/simplicialcomplex.py
@@ -745,12 +745,12 @@ def remove_simplex_id(self, id):
         remove_edges_from : remove a collection of edges
         """
         try:
-            # remove all simplices that contain simplex
+            # Remove all simplices that contain the given simplex
             supfaces_ids = self._supfaces_id(self._edge[id])
             for sup_id in supfaces_ids:
                 self._remove_simplex_id(sup_id)
 
-            # remove simplex
+            # Remove simplex itself
             self._remove_simplex_id(id)
 
         except KeyError as e:
@@ -775,7 +775,10 @@ def remove_simplex_ids_from(self, ebunch):
         remove_simplex_id : remove a single simplex by ID.
 
         """
+        all_ids = set(self._edge.keys())
         for id in ebunch:
+            if id in all_ids and id not in self._edge.keys():
+                continue
             self.remove_simplex_id(id)
 
     def has_simplex(self, simplex):
diff --git a/xgi/core/views.py b/xgi/core/views.py
index 78c578b67..2cb2f8479 100644
--- a/xgi/core/views.py
+++ b/xgi/core/views.py
@@ -362,7 +362,7 @@ def neighbors(self, id, s=1):
 
         See Also
         --------
-        ~xgi.core.function.edge_neighborhood
+        ~xgi.algorithms.properties.edge_neighborhood
 
         Examples
         --------
diff --git a/xgi/drawing/draw.py b/xgi/drawing/draw.py
index c1bf50451..260d9b172 100644
--- a/xgi/drawing/draw.py
+++ b/xgi/drawing/draw.py
@@ -152,12 +152,14 @@ def draw(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Those with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
         * dict of colors containing the `ids` as keys
 
         Those with numerical values (will be mapped to colors):
+
         * array of floats
         * dict of floats containing the `ids` as keys
         * IDStat containing the `ids` as keys
@@ -171,12 +173,14 @@ def draw(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Formats with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
         * dict of colors containing the `ids` as keys
 
         Formats with numerical values (will be mapped to colors):
+        
         * array of floats
         * dict of floats containing the `ids` as keys
         * IDStat containing the `ids` as keys
@@ -212,6 +216,7 @@ def draw(
         for it. By default, True.
     **kwargs : optional args
         Alternate default values. Values that can be overwritten are the following:
+
         * "min_node_size" (default: 5)
         * "max_node_size" (default: 30)
         * "min_node_lw" (default: 0)
@@ -224,6 +229,7 @@ def draw(
     ax : matplotlib Axes
         Axes plotted on
     collections : a tuple of 3 collections:
+
         * node_collection : matplotlib PathCollection
             Collection containing the nodes
         * dyad_collection : matplotlib LineCollection
@@ -414,6 +420,7 @@ def draw_nodes(
     params : dict
         Default parameters used if `rescale_sizes` is True.
         Keys to override default settings:
+
         * "min_node_size" (default: 5)
         * "max_node_size" (default: 30)
         * "min_node_lw" (default: 0)
@@ -588,6 +595,7 @@ def draw_hyperedges(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Formats with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
@@ -607,12 +615,14 @@ def draw_hyperedges(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Formats with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
         * dict of colors containing the `ids` as keys
 
         Formats with numerical values (will be mapped to colors):
+
         * array of floats
         * dict of floats containing the `ids` as keys
         * IDStat containing the `ids` as keys
@@ -639,6 +649,7 @@ def draw_hyperedges(
         for it. By default, True.
     params : dict
         Default parameters. Keys that may be useful to override default settings:
+
         * "min_dyad_lw" (default: 1)
         * "max_dyad_lw" (default: 10)
 
@@ -650,6 +661,7 @@ def draw_hyperedges(
     ax : matplotlib Axes
         Axes plotted on
     collections : a tuple of 2 collections:
+
         * dyad_collection : matplotlib LineCollection
             Collection containing the dyads
         * edge_collection : matplotlib PathCollection
@@ -873,12 +885,14 @@ def draw_simplices(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Those with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
         * dict of colors containing the `ids` as keys
 
         Those with numerical values (will be mapped to colors):
+
         * array of floats
         * dict of floats containing the `ids` as keys
         * IDStat containing the `ids` as keys
@@ -902,6 +916,7 @@ def draw_simplices(
         for it. By default, True.
     params : dict
         Default parameters. Keys that may be useful to override default settings:
+
         * "min_dyad_lw" (default: 1)
         * "max_dyad_lw" (default: 10)
 
@@ -912,6 +927,7 @@ def draw_simplices(
     -------
     ax
     collections : a tuple of 2 collections:
+
         * dyad_collection : matplotlib LineCollection
             Collection containing the dyads
         * edge_collection : matplotlib PathCollection
@@ -1307,14 +1323,18 @@ def draw_multilayer(
         Color of the hyperedges.  The accepted formats are the same as
         matplotlib's scatter, with the addition of dict and IDStat.
         Those with colors:
+
         * single color as a string
         * single color as 3- or 4-tuple
         * list of colors of length len(ids)
         * dict of colors containing the `ids` as keys
+
         Those with numerical values (will be mapped to colors):
+
         * array of floats
         * dict of floats containing the `ids` as keys
         * IDStat containing the `ids` as keys
+
         If None (default), color by edge size.
     edge_fc_cmap: matplotlib colormap, optional
         Colormap used to map the edge colors. By default, "crest_r".
@@ -1341,6 +1361,7 @@ def draw_multilayer(
         The separation between layers. Default is 0.4.
     **kwargs : optional args
         Alternate default values. Values that can be overwritten are the following:
+
         * "min_node_size" (default: 10)
         * "max_node_size" (default: 30)
         * "min_node_lw" (default: 2)
@@ -1353,6 +1374,7 @@ def draw_multilayer(
     ax : matplotlib Axes3DSubplot
         The subplot with the multilayer network visualization.
     collections : a tuple of 2 collections:
+    
         * node_collection : matplotlib PathCollection
             Collection containing the nodes one the top layer
         * edge_collection : matplotlib PathCollection
@@ -1728,6 +1750,7 @@ def draw_bipartite(
         https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_aspect.html
     **kwargs : optional args
         Alternate default values. Values that can be overwritten are the following:
+
         * min_node_size (default: 5)
         * max_node_size (default: 30)
         * min_node_lw (default: 0)
@@ -1746,13 +1769,13 @@ def draw_bipartite(
     -------
     ax : matplotlib.pyplot.axes
         The axes corresponding the visualization
-    collections : a tuple of 3 collections:
+    collections : a tuple of 3 collections
+
         * node_collection : matplotlib PathCollection
             Collection containing the nodes
         * edge_marker_collection : matplotlib PathCollection
             Collection containing the edge markers
-        * dyad_collection : matplotlib LineCollection if undirected,
-                            list of FancyArrowPatches if not
+        * dyad_collection : matplotlib LineCollection if undirected, list of FancyArrowPatches if not
             Collection containing the edges
 
     Raises
@@ -1960,6 +1983,7 @@ def draw_undirected_dyads(
         If `node_size` is a single value, this is ignored. By default, True.
     **kwargs : optional args
         Alternate default values. Values that can be overwritten are the following:
+
         * min_dyad_lw (default: 1)
         * max_dyad_lw (default: 10)
 
@@ -2158,6 +2182,7 @@ def draw_directed_dyads(
         displayed. Used for arrow spacing. By default 's' (square marker).
     **kwargs : optional args
         Alternate default values. Values that can be overwritten are the following:
+
         * min_dyad_lw (default: 1)
         * max_dyad_lw (default: 10)
 
diff --git a/xgi/generators/randomizing.py b/xgi/generators/randomizing.py
index ae6ea4327..51e3ecd10 100644
--- a/xgi/generators/randomizing.py
+++ b/xgi/generators/randomizing.py
@@ -20,7 +20,7 @@ def shuffle_hyperedges(S, order, p):
 
     Parameters
     ----------
-    S : xgi.HyperGraph
+    S : xgi.Hypergraph
         Hypergraph
     order : int
         Order of hyperedges to shuffle
@@ -29,7 +29,7 @@ def shuffle_hyperedges(S, order, p):
 
     Returns
     -------
-    H: xgi.HyperGraph
+    H: xgi.Hypergraph
         Hypergraph with edges of order d shuffled
 
     Note
@@ -37,8 +37,8 @@ def shuffle_hyperedges(S, order, p):
     By shuffling hyperedges in a simplicial complex, it will in general lose
     its "simpliciality" and become a hypergraph.
 
-    Reference
-    ---------
+    References
+    ----------
     Zhang, Y.*, Lucas, M.* and Battiston, F., 2023.
     "Higher-order interactions shape collective dynamics differently
     in hypergraphs and simplicial complexes."
@@ -84,7 +84,7 @@ def node_swap(H, nid1, nid2, id_temp=-1, order=None):
 
     Parameters
     ----------
-    H: HyperGraph
+    H: Hypergraph
         Hypergraph to consider
     nid1: node ID
         ID of first node to swap
@@ -98,7 +98,7 @@ def node_swap(H, nid1, nid2, id_temp=-1, order=None):
 
     Returns
     -------
-    HH: HyperGraph
+    HH: Hypergraph
 
     Reference
     ---------
diff --git a/xgi/generators/uniform.py b/xgi/generators/uniform.py
index d467be778..c010e8ad9 100644
--- a/xgi/generators/uniform.py
+++ b/xgi/generators/uniform.py
@@ -289,7 +289,7 @@ def uniform_erdos_renyi_hypergraph(n, m, p, p_type="degree", seed=None):
 
     See Also
     --------
-    random_hypergraph
+    ~xgi.generators.random.random_hypergraph
     """
     if seed is not None:
         np.random.seed(seed)
diff --git a/xgi/stats/diedgestats.py b/xgi/stats/diedgestats.py
index 8d25cadee..a7b117953 100644
--- a/xgi/stats/diedgestats.py
+++ b/xgi/stats/diedgestats.py
@@ -3,7 +3,7 @@
 This module is part of the stats package, and it defines edge-level statistics.  That
 is, each function defined in this module is assumed to define an edge-quantity mapping.
 Each callable defined here is accessible via a `Network` object, or a
-:class:`~xgi.core.reportviews.DiEdgeView` object.  For more details, see the `tutorial
+:class:`~xgi.core.views.DiEdgeView` object.  For more details, see the `tutorial
 <https://xgi.readthedocs.io/en/stable/api/tutorials/focus_6.html>`_.
 
 Examples
diff --git a/xgi/stats/dinodestats.py b/xgi/stats/dinodestats.py
index a939f2ee9..503afa4eb 100644
--- a/xgi/stats/dinodestats.py
+++ b/xgi/stats/dinodestats.py
@@ -3,7 +3,7 @@
 This module is part of the stats package, and it defines node-level statistics.  That
 is, each function defined in this module is assumed to define a node-quantity mapping.
 Each callable defined here is accessible via a `Network` object, or a
-:class:`~xgi.core.reportviews.NodeView` object.  For more details, see the `tutorial
+:class:`~xgi.core.views.NodeView` object.  For more details, see the `tutorial
 <https://xgi.readthedocs.io/en/stable/api/tutorials/focus_6.html>`_.
 
 Examples
diff --git a/xgi/stats/edgestats.py b/xgi/stats/edgestats.py
index a762e091a..c2c182273 100644
--- a/xgi/stats/edgestats.py
+++ b/xgi/stats/edgestats.py
@@ -3,7 +3,7 @@
 This module is part of the stats package, and it defines edge-level statistics.  That
 is, each function defined in this module is assumed to define an edge-quantity mapping.
 Each callable defined here is accessible via a `Network` object, or a
-:class:`~xgi.core.reportviews.EdgeView` object.  For more details, see the `tutorial
+:class:`~xgi.core.views.EdgeView` object.  For more details, see the `tutorial
 <https://xgi.readthedocs.io/en/stable/api/tutorials/focus_6.html>`_.
 
 Examples
diff --git a/xgi/stats/nodestats.py b/xgi/stats/nodestats.py
index d95381fc3..a1fc91fc9 100644
--- a/xgi/stats/nodestats.py
+++ b/xgi/stats/nodestats.py
@@ -3,7 +3,7 @@
 This module is part of the stats package, and it defines node-level statistics.  That
 is, each function defined in this module is assumed to define a node-quantity mapping.
 Each callable defined here is accessible via a `Network` object, or a
-:class:`~xgi.core.reportviews.NodeView` object.  For more details, see the `tutorial
+:class:`~xgi.core.views.NodeView` object.  For more details, see the `tutorial
 <https://xgi.readthedocs.io/en/stable/api/tutorials/focus_6.html>`_.
 
 Examples
diff --git a/xgi/utils/utilities.py b/xgi/utils/utilities.py
index bea303471..6a9621267 100644
--- a/xgi/utils/utilities.py
+++ b/xgi/utils/utilities.py
@@ -453,9 +453,9 @@ def hist(vals, bins=10, bin_edges=False, density=False, log_binning=False):
 
     Parameters
     ----------
-    vals : Numpy array
+    vals : numpy.ndarray
         The array of values
-    bins : int, list, or Numpy array
+    bins : int, list, or numpy.ndarray
         The number of bins or the bin edges.
         By default, 10.
     bin_edges : bool
@@ -470,7 +470,7 @@ def hist(vals, bins=10, bin_edges=False, density=False, log_binning=False):
 
     Returns
     -------
-    Pandas DataFrame
+    ~pandas.DataFrame
         A two-column table with "bin_center" and "value" columns,
         where "value" is a count or a probability. If `bin_edges`
         is True, outputs two additional columns, `bin_lo` and `bin_hi`,


Test patch:
diff --git a/tests/core/test_simplicialcomplex.py b/tests/core/test_simplicialcomplex.py
index b5e802129..23b4d1b8d 100644
--- a/tests/core/test_simplicialcomplex.py
+++ b/tests/core/test_simplicialcomplex.py
@@ -462,7 +462,7 @@ def test_remove_simplex_id(edgelist6):
     assert set(S.edges.members()) == set(edges)
 
 
-def test_remove_simplex_ids_from(edgelist6):
+def test_remove_simplex_ids_from(edgelist6, edgelist4):
     S = xgi.SimplicialComplex()
     S.add_simplices_from(edgelist6)
 
@@ -480,6 +480,12 @@ def test_remove_simplex_ids_from(edgelist6):
     ]
     assert set(S.edges.members()) == set(edges)
 
+    # test issue 580
+    S1 = xgi.SimplicialComplex(edgelist4)
+    id_all = list(S1.edges)
+    S1.remove_simplex_ids_from(id_all)
+    assert S1.num_edges == 0
+
 
 def test_freeze(edgelist1):
     SC = xgi.SimplicialComplex(edgelist1)