diff --git a/docs/how-to-guides/fermion-operator.ipynb b/docs/how-to-guides/fermion-operator.ipynb
index 642a89732..3b5eee0e1 100644
--- a/docs/how-to-guides/fermion-operator.ipynb
+++ b/docs/how-to-guides/fermion-operator.ipynb
@@ -37,9 +37,9 @@
      "data": {
       "text/plain": [
        "FermionOperator({\n",
-       "    (cre_a(3), des_a(0)): -0.25,\n",
+       "    (cre_b(1), des_b(5), cre_a(4)): 1+1j,\n",
        "    (cre_a(0), des_a(3)): 0.5,\n",
-       "    (cre_b(1), des_b(5), cre_a(4)): 1+1j\n",
+       "    (cre_a(3), des_a(0)): -0.25\n",
        "})"
       ]
      },
@@ -76,7 +76,7 @@
     {
      "data": {
       "text/plain": [
-       "'FermionOperator({((True, False, 3), (False, False, 0)): -0.25+0j, ((True, False, 0), (False, False, 3)): 0.5+0j, ((True, True, 1), (False, True, 5), (True, False, 4)): 1+1j})'"
+       "'FermionOperator({((True, True, 1), (False, True, 5), (True, False, 4)): 1+1j, ((True, False, 0), (False, False, 3)): 0.5+0j, ((True, False, 3), (False, False, 0)): -0.25+0j})'"
       ]
      },
      "execution_count": 2,
@@ -88,6 +88,123 @@
     "repr(op1)"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Converting other objects to FermionOperators\n",
+    "\n",
+    "Some objects, such as instances of [MolecularHamiltonian](https://qiskit-community.github.io/ffsim/api/ffsim.html#ffsim.MolecularHamiltonian), can be converted to FermionOperators using the `ffsim.fermion_operator` function. This function works on any object that has a `_fermion_operator_` method, so if you make your own class, you can implement this method to tell `ffsim.fermion_operator` how to convert your class to a FermionOperator.\n",
+    "\n",
+    "The following code cell demonstrates converting a MolecularHamiltonian to a FermionOperator."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "converged SCF energy = -1.07358293078636\n",
+      "FermionOperator({\n",
+      "    (cre_b(1), cre_a(1), des_a(1), des_b(0)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(0), cre_b(1), des_b(0), des_b(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_b(0), cre_a(1), des_a(0), des_b(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_a(0), des_a(0)): -1.114600166529875,\n",
+      "    (cre_a(0), cre_b(0), des_b(0), des_a(0)): 0.3132200956766947,\n",
+      "    (cre_b(1), cre_b(0), des_b(1), des_b(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(1), cre_b(1), des_b(1), des_a(0)): -0.0000000000000003137575408652635,\n",
+      "    (cre_a(0), cre_a(0), des_a(0), des_a(1)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(0), cre_a(0), des_a(0), des_a(0)): 0.3132200956766947,\n",
+      "    (cre_a(1), cre_a(1), des_a(1), des_a(0)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(0), cre_b(0), des_b(0), des_b(0)): 0.3132200956766947,\n",
+      "    (cre_a(1), des_a(1)): -0.5952339032326008,\n",
+      "    (cre_b(1), cre_a(0), des_a(1), des_b(0)): 0.0985617249345788,\n",
+      "    (cre_a(0), cre_a(0), des_a(1), des_a(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_a(0), cre_a(1), des_a(1), des_a(0)): 0.3110432387826118,\n",
+      "    (cre_b(0), cre_a(0), des_a(1), des_b(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_b(0), cre_a(0), des_a(0), des_b(1)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(0), cre_a(0), des_a(1), des_a(1)): 0.0985617249345788,\n",
+      "    (cre_b(1), cre_b(0), des_b(0), des_b(0)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(1), cre_a(1), des_a(0), des_a(0)): 0.0985617249345788,\n",
+      "    (cre_a(1), cre_b(0), des_b(0), des_a(1)): 0.3110432387826118,\n",
+      "    (cre_a(1), cre_a(0), des_a(1), des_a(0)): 0.0985617249345788,\n",
+      "    (cre_a(1), cre_a(0), des_a(1), des_a(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(1), cre_a(1), des_a(0), des_a(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_b(1), cre_a(0), des_a(0), des_b(0)): 0.00000000000000011329216430280904,\n",
+      "    (): 0.52917721092,\n",
+      "    (cre_a(0), cre_b(1), des_b(0), des_a(1)): 0.0985617249345788,\n",
+      "    (cre_b(1), des_b(1)): -0.5952339032326008,\n",
+      "    (cre_b(0), cre_a(1), des_a(0), des_b(1)): 0.0985617249345788,\n",
+      "    (cre_b(1), cre_b(1), des_b(0), des_b(0)): 0.0985617249345788,\n",
+      "    (cre_b(0), des_b(0)): -1.114600166529875,\n",
+      "    (cre_b(0), cre_b(0), des_b(1), des_b(1)): 0.0985617249345788,\n",
+      "    (cre_b(1), cre_b(1), des_b(0), des_b(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_b(0), cre_b(0), des_b(1), des_b(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_b(1), cre_a(1), des_a(0), des_b(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(0), cre_a(1), des_a(0), des_a(1)): 0.0985617249345788,\n",
+      "    (cre_b(0), cre_b(1), des_b(0), des_b(1)): 0.0985617249345788,\n",
+      "    (cre_a(1), cre_b(0), des_b(1), des_a(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(1), des_a(0)): 0.0000000000000000405213163257498,\n",
+      "    (cre_b(1), cre_b(0), des_b(1), des_b(0)): 0.0985617249345788,\n",
+      "    (cre_b(1), cre_b(0), des_b(0), des_b(1)): 0.3110432387826118,\n",
+      "    (cre_a(0), cre_b(1), des_b(0), des_a(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_a(1), cre_b(1), des_b(1), des_a(1)): 0.3267544183944909,\n",
+      "    (cre_a(0), cre_b(1), des_b(1), des_a(1)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(0), cre_b(1), des_b(1), des_b(1)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(0), cre_a(1), des_a(1), des_b(0)): 0.3110432387826118,\n",
+      "    (cre_b(1), cre_b(1), des_b(1), des_b(0)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(1), cre_a(0), des_a(1), des_b(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(0), des_a(1)): -0.0000000000000000038874896604712055,\n",
+      "    (cre_b(0), cre_b(1), des_b(1), des_b(0)): 0.3110432387826118,\n",
+      "    (cre_b(1), cre_a(1), des_a(1), des_b(1)): 0.3267544183944909,\n",
+      "    (cre_a(0), cre_b(0), des_b(1), des_a(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_a(0), cre_b(1), des_b(1), des_a(0)): 0.3110432387826118,\n",
+      "    (cre_b(0), cre_b(0), des_b(0), des_b(1)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(0), cre_a(1), des_a(1), des_a(1)): -0.0000000000000003137575408652635,\n",
+      "    (cre_b(1), cre_b(1), des_b(1), des_b(1)): 0.3267544183944909,\n",
+      "    (cre_b(0), cre_a(0), des_a(0), des_b(0)): 0.3132200956766947,\n",
+      "    (cre_b(1), des_b(0)): 0.0000000000000000405213163257498,\n",
+      "    (cre_a(0), cre_b(0), des_b(0), des_a(1)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(1), cre_a(0), des_a(0), des_a(0)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(0), cre_b(0), des_b(1), des_a(1)): 0.0985617249345788,\n",
+      "    (cre_a(1), cre_b(0), des_b(1), des_a(0)): 0.0985617249345788,\n",
+      "    (cre_a(0), cre_a(1), des_a(0), des_a(0)): 0.00000000000000009140142649458241,\n",
+      "    (cre_b(0), cre_a(1), des_a(1), des_b(1)): -0.0000000000000003137575408652635,\n",
+      "    (cre_a(1), cre_b(1), des_b(0), des_a(0)): 0.0985617249345788,\n",
+      "    (cre_a(1), cre_b(0), des_b(0), des_a(0)): 0.00000000000000011329216430280904,\n",
+      "    (cre_a(1), cre_b(1), des_b(0), des_a(1)): -0.0000000000000002916800864863112,\n",
+      "    (cre_a(1), cre_a(0), des_a(0), des_a(1)): 0.3110432387826118,\n",
+      "    (cre_a(1), cre_a(1), des_a(1), des_a(1)): 0.3267544183944909,\n",
+      "    (cre_b(0), des_b(1)): -0.0000000000000000038874896604712055,\n",
+      "    (cre_b(1), cre_a(0), des_a(0), des_b(1)): 0.3110432387826118,\n",
+      "    (cre_b(0), cre_a(0), des_a(1), des_b(1)): 0.0985617249345788,\n",
+      "    (cre_b(1), cre_a(1), des_a(0), des_b(0)): 0.0985617249345788\n",
+      "})\n"
+     ]
+    }
+   ],
+   "source": [
+    "import pyscf\n",
+    "\n",
+    "# Build H2 molecule\n",
+    "mol = pyscf.gto.Mole()\n",
+    "mol.build(atom=[[\"H\", (0, 0, 0)], [\"H\", (1.0, 0, 0)]], basis=\"sto-6g\", symmetry=\"Dooh\")\n",
+    "\n",
+    "# Get molecular data and Hamiltonian\n",
+    "scf = pyscf.scf.RHF(mol).run()\n",
+    "mol_data = ffsim.MolecularData.from_scf(scf)\n",
+    "mol_hamiltonian = mol_data.hamiltonian\n",
+    "\n",
+    "# Convert MolecularHamiltonian to FermionOperator\n",
+    "ferm_op = ffsim.fermion_operator(mol_hamiltonian)\n",
+    "\n",
+    "print(ferm_op)"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -99,28 +216,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
        "FermionOperator({\n",
+       "    (cre_b(1), des_b(5), cre_a(4), des_a(3), des_b(3)): -0.25-0.25j,\n",
        "    (cre_a(0), des_a(3), cre_b(2)): 0+0.5j,\n",
-       "    (cre_a(0), des_a(3)): 1,\n",
+       "    (cre_b(1), des_b(5), cre_a(4)): 2+2j,\n",
+       "    (cre_a(3), des_a(0), cre_b(2)): 0-0.25j,\n",
        "    (cre_a(0), des_a(3), des_a(3), des_b(3)): -0.125,\n",
-       "    (cre_b(1), des_b(5), cre_a(4), des_a(3), des_b(3)): -0.25-0.25j,\n",
        "    (cre_a(3), des_a(0), des_a(3), des_b(3)): 0.0625,\n",
-       "    (des_a(3), des_b(3)): 0.0625,\n",
-       "    (cre_b(1), des_b(5), cre_a(4)): 2+2j,\n",
+       "    (cre_a(0), des_a(3)): 1,\n",
        "    (cre_a(3), des_a(0)): -0.5,\n",
-       "    (cre_a(3), des_a(0), cre_b(2)): 0-0.25j,\n",
+       "    (des_a(3), des_b(3)): 0.0625,\n",
        "    (cre_b(1), des_b(5), cre_a(4), cre_b(2)): -1+1j,\n",
        "    (cre_b(2)): 0-0.25j\n",
        "})"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -152,28 +269,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
        "FermionOperator({\n",
+       "    (cre_b(1), des_b(5), cre_a(4), des_a(3), des_b(3)): -1+1j,\n",
        "    (cre_a(0), des_a(3), cre_b(2)): 2,\n",
-       "    (cre_a(0), des_a(3)): 0-6j,\n",
+       "    (cre_b(1), des_b(5), cre_a(4)): 12-12j,\n",
+       "    (cre_a(3), des_a(0), cre_b(2)): -1,\n",
        "    (cre_a(0), des_a(3), des_a(3), des_b(3)): 0+0.5j,\n",
-       "    (cre_b(1), des_b(5), cre_a(4), des_a(3), des_b(3)): -1+1j,\n",
        "    (cre_a(3), des_a(0), des_a(3), des_b(3)): 0-0.25j,\n",
-       "    (des_a(3), des_b(3)): 0-1.25j,\n",
-       "    (cre_b(1), des_b(5), cre_a(4)): 12-12j,\n",
+       "    (cre_a(0), des_a(3)): 0-6j,\n",
        "    (cre_a(3), des_a(0)): 0+3j,\n",
-       "    (cre_a(3), des_a(0), cre_b(2)): -1,\n",
+       "    (des_a(3), des_b(3)): 0-1.25j,\n",
        "    (cre_b(1), des_b(5), cre_a(4), cre_b(2)): 4+4j,\n",
        "    (cre_b(2)): -5\n",
        "})"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -197,27 +314,27 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
        "FermionOperator({\n",
-       "    (cre_b(2), cre_b(1), cre_a(4), des_b(5)): 4+4j,\n",
-       "    (cre_b(1), cre_a(4), des_b(5), des_b(3), des_a(3)): -1+1j,\n",
-       "    (cre_b(1), cre_a(4), des_b(5)): -12+12j,\n",
-       "    (cre_b(2), cre_a(0), des_a(3)): 2,\n",
-       "    (cre_b(2), cre_a(3), des_a(0)): -1,\n",
-       "    (cre_b(2)): -5,\n",
        "    (cre_a(3), des_a(0)): 0+3j,\n",
-       "    (des_b(3), des_a(3)): 0+1.25j,\n",
+       "    (cre_b(2), cre_a(0), des_a(3)): 2,\n",
+       "    (cre_b(1), cre_a(4), des_b(5)): -12+12j,\n",
        "    (cre_a(0), des_a(3)): 0-6j,\n",
-       "    (cre_a(3), des_b(3), des_a(3), des_a(0)): 0+0.25j\n",
+       "    (cre_a(3), des_b(3), des_a(3), des_a(0)): 0+0.25j,\n",
+       "    (des_b(3), des_a(3)): 0+1.25j,\n",
+       "    (cre_b(2), cre_b(1), cre_a(4), des_b(5)): 4+4j,\n",
+       "    (cre_b(2)): -5,\n",
+       "    (cre_b(1), cre_a(4), des_b(5), des_b(3), des_a(3)): -1+1j,\n",
+       "    (cre_b(2), cre_a(3), des_a(0)): -1\n",
        "})"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -237,7 +354,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -263,7 +380,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
@@ -299,20 +416,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "array([0.        +0.j        , 0.        +0.j        ,\n",
-       "       0.        +0.j        , 0.        +0.j        ,\n",
-       "       0.15021897+0.02023638j, 0.        +0.j        ,\n",
-       "       0.        +0.j        , 0.        +0.j        ,\n",
-       "       0.        +0.j        ])"
+       "array([ 0.        +0.j        ,  0.        +0.j        ,\n",
+       "        0.        +0.j        ,  0.        +0.j        ,\n",
+       "       -0.03767916+0.03776255j,  0.        +0.j        ,\n",
+       "        0.        +0.j        ,  0.        +0.j        ,\n",
+       "        0.        +0.j        ])"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -331,16 +448,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "array([-0.5+1.21984743e-18j])"
+       "array([-0.5+5.28582186e-18j])"
       ]
      },
-     "execution_count": 9,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -355,7 +472,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "ffsim-Z17aaLzy",
+   "display_name": "ffsim",
    "language": "python",
    "name": "python3"
   },
@@ -369,7 +486,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.12"
+   "version": "3.13.1"
   },
   "orig_nbformat": 4
  },