Repository: y0-causal-inference/y0

Issue:
Implement the ID* Algorithm
The ID* comes from:

> What Counterfactuals Can Be Tested
> Ilya Shpitser, Judea Pearl (2012)
> https://arxiv.org/abs/1206.5294

Discussion:
codecov-commenter: ## [Codecov](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference) Report
> Merging [#140](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference) (c53eaf0) into [main](https://app.codecov.io/gh/y0-causal-inference/y0/commit/448d1a14a5ab4dd3109e4489efac1c03e31799b2?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference) (448d1a1) will **decrease** coverage by `0.55%`.
> The diff coverage is `71.93%`.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please [install the Github App Integration](https://github.com/apps/codecov) for your organization. [Read more](https://about.codecov.io/blog/codecov-is-updating-its-github-integration/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference).

```diff
@@            Coverage Diff             @@
##             main     #140      +/-   ##
==========================================
- Coverage   78.88%   78.33%   -0.55%     
==========================================
  Files          36       39       +3     
  Lines        2150     2336     +186     
  Branches      432      479      +47     
==========================================
+ Hits         1696     1830     +134     
- Misses        358      405      +47     
- Partials       96      101       +5     
```


| [Impacted Files](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference) | Coverage Δ | |
|---|---|---|
| [src/y0/algorithm/identify/\_extras.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9fZXh0cmFzLnB5) | `0.00% <0.00%> (ø)` | |
| [src/y0/algorithm/identify/cg.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9jZy5weQ==) | `87.85% <ø> (+1.42%)` | :arrow_up: |
| [src/y0/graph.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2dyYXBoLnB5) | `77.36% <0.00%> (ø)` | |
| [src/y0/dsl.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2RzbC5weQ==) | `83.90% <50.00%> (-1.13%)` | :arrow_down: |
| [src/y0/algorithm/identify/idc\_star.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9pZGNfc3Rhci5weQ==) | `78.04% <78.04%> (ø)` | |
| [src/y0/algorithm/identify/id\_star.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9pZF9zdGFyLnB5) | `82.85% <82.85%> (ø)` | |
| [src/y0/algorithm/identify/\_\_init\_\_.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9fX2luaXRfXy5weQ==) | `100.00% <100.00%> (ø)` | |
| [src/y0/algorithm/identify/id\_c.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2FsZ29yaXRobS9pZGVudGlmeS9pZF9jLnB5) | `94.73% <100.00%> (+0.29%)` | :arrow_up: |
| [src/y0/examples.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL2V4YW1wbGVzLnB5) | `100.00% <100.00%> (ø)` | |
| [src/y0/mutate/chain.py](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference#diff-c3JjL3kwL211dGF0ZS9jaGFpbi5weQ==) | `86.66% <100.00%> (ø)` | |
| ... and [1 more](https://app.codecov.io/gh/y0-causal-inference/y0/pull/140?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=y0-causal-inference) | |


cthoyt: @robertness for sure it feels like we've been stuck out at sea for 10 years 

Patch:
diff --git a/README.md b/README.md
index b067df9..250d751 100644
--- a/README.md
+++ b/README.md
@@ -108,6 +108,8 @@ unimplemented for the last 15 years of publications including:
 |-----------|-----------------------------------------------------------------------------|
 | ID        | [Shpitser and Pearl, 2006](https://dl.acm.org/doi/10.5555/1597348.1597382)  |
 | IDC       | [Shpitser and Pearl, 2008](https://www.jmlr.org/papers/v9/shpitser08a.html) |
+| ID*       | [Shpitser and Pearl, 2012](https://arxiv.org/abs/1206.5294)                 |
+| IDC*      | [Shpitser and Pearl, 2012](https://arxiv.org/abs/1206.5294)                 |
 
 Apply an algorithm to an ADMG and a causal query to generate an estimand
 represented in the DSL like:
diff --git a/notebooks/Identification.ipynb b/notebooks/Identification.ipynb
index 994af79..db8cc6b 100644
--- a/notebooks/Identification.ipynb
+++ b/notebooks/Identification.ipynb
@@ -21,7 +21,8 @@
     "\n",
     "from scipy.stats import bernoulli\n",
     "import matplotlib.pyplot as plt\n",
-    "from IPython.display import Latex, Markdown, set_matplotlib_formats\n",
+    "from IPython.display import Latex, Markdown\n",
+    "from matplotlib_inline.backend_inline import set_matplotlib_formats\n",
     "\n",
     "from y0.examples import complete_hierarchy_figure_3a_example as figure_3a\n",
     "from y0.examples import figure_9a, figure_9b, figure_9c\n",
@@ -55,16 +56,7 @@
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/var/folders/f8/snw3tlcs0y3bmnq5gqg26b5h0000gn/T/ipykernel_46412/1933474960.py:1: DeprecationWarning: `set_matplotlib_formats` is deprecated since IPython 7.23, directly use `matplotlib_inline.backend_inline.set_matplotlib_formats()`\n",
-      "  set_matplotlib_formats(\"svg\")\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "set_matplotlib_formats(\"svg\")"
    ]
@@ -286,10 +278,10 @@
        "\\%= P^{M2}(y) = 100.0%\n",
        "\\%$$\n",
        "$$P^{M1}(x) = 49.9%\n",
-       "\\%\\approx P^{M2}(x) = 50.0%\n",
+       "\\%\\approx P^{M2}(x) = 50.1%\n",
        "\\%$$\n",
        "\n",
-       "$$P^{M1}(y | do(x)) = 50.0%\n",
+       "$$P^{M1}(y | do(x)) = 49.9%\n",
        "\\%\\neq P^{M2}(y| do(x)) = 100.0%\n",
        "\\%$$\n"
       ],
@@ -509,7 +501,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:48.560666</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:37.665637</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -533,81 +525,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 204.476151 48.012091 \n",
-       "Q 125.462455 72.901405 47.515138 97.45481 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 51.931225 98.160621 \n",
-       "L 47.515138 97.45481 \n",
-       "L 50.729439 94.345427 \n",
+       "    <path d=\"M 117.992739 79.774125 \n",
+       "Q 143.662685 79.774125 167.096564 79.774125 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 159.096564 75.774125 \n",
+       "L 167.096564 79.774125 \n",
+       "L 159.096564 83.774125 \n",
        "z\n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 162.599585 147.598681 \n",
-       "Q 185.760229 100.39184 208.428418 54.188737 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 204.87102 56.898888 \n",
-       "L 208.428418 54.188737 \n",
-       "L 208.462101 58.660746 \n",
+       "    <path d=\"M 265.395316 79.774125 \n",
+       "Q 191.695936 79.774125 120.232623 79.774125 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 128.232623 83.774125 \n",
+       "L 120.232623 79.774125 \n",
+       "L 128.232623 75.774125 \n",
        "z\n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 325.967774 214.911474 \n",
-       "Q 288.901398 237.846294 252.785775 260.192836 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 257.239632 259.788906 \n",
-       "L 252.785775 260.192836 \n",
-       "L 255.134945 256.387392 \n",
+       "    <path d=\"M 117.992739 230.974125 \n",
+       "Q 143.662685 230.974125 167.096564 230.974125 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 159.096564 226.974125 \n",
+       "L 167.096564 230.974125 \n",
+       "L 159.096564 234.974125 \n",
        "z\n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 214.999466 53.769799 \n",
-       "Q 242.551205 150.170412 326.053754 205.664227 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 85.296585 99.603898 \n",
+       "Q 60.610465 155.376509 85.298695 211.14912 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 44.305345 106.527495 \n",
-       "Q 88.755238 149.232193 150.145224 154.781132 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 211.90098 89.347884 \n",
+       "Q 239.723168 99.018064 267.545357 89.348472 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 165.571318 160.754444 \n",
-       "Q 235.990346 214.824247 324.685263 210.875354 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.690546 83.389527 \n",
+       "Q 153.018351 106.227729 104.33614 210.373818 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 161.357755 163.643704 \n",
-       "Q 182.043238 225.615562 237.079345 260.820701 \n",
-       "\" clip-path=\"url(#peecc15ef40)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 268.285453 90.776597 \n",
+       "Q 203.252929 132.205008 193.381861 208.678446 \n",
+       "\" clip-path=\"url(#p566b330ed1)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m235405339e\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m9186abf9ee\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
-       "     <use xlink:href=\"#m235405339e\" x=\"212.735207\" y=\"45.410489\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m235405339e\" x=\"38.189752\" y=\"100.392307\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m235405339e\" x=\"158.784793\" y=\"155.374125\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m235405339e\" x=\"333.330248\" y=\"210.355943\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m235405339e\" x=\"244.470744\" y=\"265.337761\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
+       "     <use xlink:href=\"#m9186abf9ee\" x=\"95.634052\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9186abf9ee\" x=\"191.694027\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9186abf9ee\" x=\"287.754002\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9186abf9ee\" x=\"95.634052\" y=\"230.974125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9186abf9ee\" x=\"191.694027\" y=\"230.974125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(208.595207 48.721739) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(88.734052 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -630,9 +622,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(31.649752 103.703557) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(180.794027 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -667,9 +659,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(149.964793 158.685375) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(273.054002 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -694,9 +686,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
        "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(324.510248 213.667193) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(80.934052 236.492875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
        "L 3431 531 \n",
@@ -729,9 +721,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#peecc15ef40)\">\n",
+       "    <g clip-path=\"url(#p566b330ed1)\">\n",
        "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(237.930744 268.649011) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(180.794027 236.492875) scale(0.2 -0.2)\">\n",
        "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
@@ -813,7 +805,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"peecc15ef40\">\n",
+       "  <clipPath id=\"p566b330ed1\">\n",
        "   <rect x=\"7.2\" y=\"22.318125\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -857,19 +849,6 @@
    "execution_count": 7,
    "metadata": {},
    "outputs": [
-    {
-     "data": {
-      "text/latex": [
-       "$\\sum_{Z} P(Y, Z)$"
-      ],
-      "text/plain": [
-       "Sum[Z](P(Y, Z))"
-      ]
-     },
-     "execution_count": 7,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
     {
      "data": {
       "image/svg+xml": [
@@ -881,7 +860,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:48.803374</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:37.930223</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -905,38 +884,38 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 185.76 241.558255 \n",
-       "Q 185.76 140.256299 185.76 40.072377 \n",
-       "\" clip-path=\"url(#p71a65aa39b)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 183.76 44.072377 \n",
-       "L 185.76 40.072377 \n",
-       "L 187.76 44.072377 \n",
+       "    <path d=\"M 264.851076 140.256 \n",
+       "Q 185.759057 140.256 108.903107 140.256 \n",
+       "\" clip-path=\"url(#pfac7d1fd1e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.903107 144.256 \n",
+       "L 108.903107 140.256 \n",
+       "L 116.903107 136.256 \n",
        "z\n",
-       "\" clip-path=\"url(#p71a65aa39b)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pfac7d1fd1e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m85e1f24c14\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m9b13f45c4f\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p71a65aa39b)\">\n",
-       "     <use xlink:href=\"#m85e1f24c14\" x=\"185.76\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m85e1f24c14\" x=\"185.76\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pfac7d1fd1e)\">\n",
+       "     <use xlink:href=\"#m9b13f45c4f\" x=\"84.305455\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9b13f45c4f\" x=\"287.214545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p71a65aa39b)\">\n",
+       "    <g clip-path=\"url(#pfac7d1fd1e)\">\n",
        "     <!-- $Y$ -->\n",
-       "     <g transform=\"translate(182.04 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(78.105455 145.77475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -956,9 +935,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p71a65aa39b)\">\n",
+       "    <g clip-path=\"url(#pfac7d1fd1e)\">\n",
        "     <!-- $Z$ -->\n",
-       "     <g transform=\"translate(181.62 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(280.314545 145.77475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
        "L 4500 4666 \n",
@@ -981,7 +960,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p71a65aa39b\">\n",
+       "  <clipPath id=\"pfac7d1fd1e\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -999,8 +978,29 @@
     "id_in = Identification.from_expression(\n",
     "    query=P(Y), estimand=P(Y, Z), graph=NxMixedGraph.from_edges(directed=[(Z, Y)])\n",
     ")\n",
-    "id_in.graph.draw()\n",
-    "\n",
+    "id_in.graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{Z} P(Y, Z)$"
+      ],
+      "text/plain": [
+       "Sum[Z](P(Y, Z))"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
     "line_1(id_in)"
    ]
   },
@@ -1019,18 +1019,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "None"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "image/svg+xml": [
@@ -1042,7 +1033,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:49.037943</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:38.245677</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -1066,54 +1057,54 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 333.330248 38.953745 \n",
-       "Q 333.330248 140.255701 333.330248 240.439623 \n",
-       "\" clip-path=\"url(#pa3e49cda0e)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 335.330248 236.439623 \n",
-       "L 333.330248 240.439623 \n",
-       "L 331.330248 236.439623 \n",
+       "    <path d=\"M 84.305455 87.012079 \n",
+       "Q 84.305455 140.253385 84.305455 191.258623 \n",
+       "\" clip-path=\"url(#pfccbc4b2c2)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 183.258623 \n",
+       "L 84.305455 191.258623 \n",
+       "L 80.305455 183.258623 \n",
        "z\n",
-       "\" clip-path=\"url(#pa3e49cda0e)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pfccbc4b2c2)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 46.309538 137.230725 \n",
-       "Q 185.762204 85.27336 324.167192 33.706341 \n",
-       "\" clip-path=\"url(#pa3e49cda0e)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.720632 33.228736 \n",
-       "L 324.167192 33.706341 \n",
-       "L 321.117172 36.977026 \n",
+       "    <path d=\"M 264.851076 64.656 \n",
+       "Q 185.759057 64.656 108.903107 64.656 \n",
+       "\" clip-path=\"url(#pfccbc4b2c2)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.903107 68.656 \n",
+       "L 108.903107 64.656 \n",
+       "L 116.903107 60.656 \n",
        "z\n",
-       "\" clip-path=\"url(#pa3e49cda0e)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pfccbc4b2c2)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 44.651157 146.018575 \n",
-       "Q 164.863311 251.318265 324.669039 250.349488 \n",
-       "\" clip-path=\"url(#pa3e49cda0e)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.054542 67.661087 \n",
+       "Q 146.870667 88.068608 93.520758 195.482751 \n",
+       "\" clip-path=\"url(#pfccbc4b2c2)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"md082c231bd\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m349a6fb256\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#pa3e49cda0e)\">\n",
-       "     <use xlink:href=\"#md082c231bd\" x=\"333.330248\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md082c231bd\" x=\"38.189752\" y=\"140.256\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md082c231bd\" x=\"333.330248\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pfccbc4b2c2)\">\n",
+       "     <use xlink:href=\"#m349a6fb256\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m349a6fb256\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m349a6fb256\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#pa3e49cda0e)\">\n",
+       "    <g clip-path=\"url(#pfccbc4b2c2)\">\n",
        "     <!-- $Y$ -->\n",
-       "     <g transform=\"translate(329.610248 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(78.105455 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -1133,9 +1124,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#pa3e49cda0e)\">\n",
+       "    <g clip-path=\"url(#pfccbc4b2c2)\">\n",
        "     <!-- $Z$ -->\n",
-       "     <g transform=\"translate(34.049752 143.56725) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(280.314545 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
        "L 4500 4666 \n",
@@ -1156,9 +1147,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#pa3e49cda0e)\">\n",
+       "    <g clip-path=\"url(#pfccbc4b2c2)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(329.190248 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(77.405455 221.37475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -1183,7 +1174,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"pa3e49cda0e\">\n",
+       "  <clipPath id=\"pfccbc4b2c2\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -1203,23 +1194,14 @@
     "    estimand=P(X, Y, Z),\n",
     "    graph=NxMixedGraph.from_edges(directed=[(Z, Y), (Y, X)], undirected=[(Z, X)]),\n",
     ")\n",
-    "display(id_in.graph.draw())"
+    "id_in.graph.draw()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "None"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "image/svg+xml": [
@@ -1231,7 +1213,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:49.261420</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:38.518817</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -1255,38 +1237,38 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 185.76 241.558255 \n",
-       "Q 185.76 140.256299 185.76 40.072377 \n",
-       "\" clip-path=\"url(#p50d62f896e)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 183.76 44.072377 \n",
-       "L 185.76 40.072377 \n",
-       "L 187.76 44.072377 \n",
+       "    <path d=\"M 264.851076 140.256 \n",
+       "Q 185.759057 140.256 108.903107 140.256 \n",
+       "\" clip-path=\"url(#paf9b6f5ff1)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.903107 144.256 \n",
+       "L 108.903107 140.256 \n",
+       "L 116.903107 136.256 \n",
        "z\n",
-       "\" clip-path=\"url(#p50d62f896e)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#paf9b6f5ff1)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"md52c3165d5\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m2d1e689de0\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p50d62f896e)\">\n",
-       "     <use xlink:href=\"#md52c3165d5\" x=\"185.76\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md52c3165d5\" x=\"185.76\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#paf9b6f5ff1)\">\n",
+       "     <use xlink:href=\"#m2d1e689de0\" x=\"84.305455\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m2d1e689de0\" x=\"287.214545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p50d62f896e)\">\n",
+       "    <g clip-path=\"url(#paf9b6f5ff1)\">\n",
        "     <!-- $Y$ -->\n",
-       "     <g transform=\"translate(182.04 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(78.105455 145.77475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -1306,9 +1288,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p50d62f896e)\">\n",
+       "    <g clip-path=\"url(#paf9b6f5ff1)\">\n",
        "     <!-- $Z$ -->\n",
-       "     <g transform=\"translate(181.62 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(280.314545 145.77475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
        "L 4500 4666 \n",
@@ -1331,7 +1313,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p50d62f896e\">\n",
+       "  <clipPath id=\"paf9b6f5ff1\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -1347,7 +1329,7 @@
    ],
    "source": [
     "id_out = line_2(id_in)\n",
-    "display(id_out.graph.draw())"
+    "id_out.graph.draw()"
    ]
   },
   {
@@ -1363,7 +1345,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
@@ -1372,7 +1354,7 @@
        "{X}"
       ]
      },
-     "execution_count": 10,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1388,7 +1370,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -1397,7 +1379,7 @@
        "{X, Z}"
       ]
      },
-     "execution_count": 11,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1419,7 +1401,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1435,7 +1417,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -1473,7 +1455,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -1510,7 +1492,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -1522,7 +1504,7 @@
        "P(Y | X, Z)"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     },
@@ -1537,7 +1519,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:49.634825</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:38.982440</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -1561,64 +1543,64 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 46.309538 137.230725 \n",
-       "Q 185.762204 85.27336 324.167192 33.706341 \n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.720632 33.228736 \n",
-       "L 324.167192 33.706341 \n",
-       "L 321.117172 36.977026 \n",
+       "    <path d=\"M 264.851076 64.656 \n",
+       "Q 185.759057 64.656 108.903107 64.656 \n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.903107 68.656 \n",
+       "L 108.903107 64.656 \n",
+       "L 116.903107 60.656 \n",
        "z\n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 45.131877 245.046634 \n",
-       "Q 185.758091 140.257423 325.4878 36.136252 \n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 321.085338 36.922591 \n",
-       "L 325.4878 36.136252 \n",
-       "L 323.475393 40.130025 \n",
+       "    <path d=\"M 269.284758 78.016583 \n",
+       "Q 185.760969 140.255278 104.03019 201.157891 \n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 112.835113 199.585214 \n",
+       "L 104.03019 201.157891 \n",
+       "L 108.055002 193.170345 \n",
        "z\n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 38.189752 241.558255 \n",
-       "Q 38.189752 195.236773 38.189752 150.033324 \n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 36.189752 154.033324 \n",
-       "L 38.189752 150.033324 \n",
-       "L 40.189752 154.033324 \n",
+       "    <path d=\"M 84.305455 193.499921 \n",
+       "Q 84.305455 140.258615 84.305455 89.253377 \n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 80.305455 97.253377 \n",
+       "L 84.305455 89.253377 \n",
+       "L 88.305455 97.253377 \n",
        "z\n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 35.182364 148.373738 \n",
-       "Q 19.205044 195.235967 35.181102 242.098197 \n",
-       "\" clip-path=\"url(#p0d979851f6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.054542 67.661087 \n",
+       "Q 146.870667 88.068608 93.520758 195.482751 \n",
+       "\" clip-path=\"url(#p7d50bbde3f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m94cc223ebe\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"md91b1b249c\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p0d979851f6)\">\n",
-       "     <use xlink:href=\"#m94cc223ebe\" x=\"333.330248\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m94cc223ebe\" x=\"38.189752\" y=\"140.256\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m94cc223ebe\" x=\"38.189752\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p7d50bbde3f)\">\n",
+       "     <use xlink:href=\"#md91b1b249c\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md91b1b249c\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md91b1b249c\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p0d979851f6)\">\n",
+       "    <g clip-path=\"url(#p7d50bbde3f)\">\n",
        "     <!-- $Y$ -->\n",
-       "     <g transform=\"translate(329.610248 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(78.105455 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -1638,32 +1620,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p0d979851f6)\">\n",
-       "     <!-- $Z$ -->\n",
-       "     <g transform=\"translate(34.049752 143.56725) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
-       "L 4500 4666 \n",
-       "L 4409 4184 \n",
-       "L 794 531 \n",
-       "L 3769 531 \n",
-       "L 3669 0 \n",
-       "L -141 0 \n",
-       "L -50 481 \n",
-       "L 3566 4134 \n",
-       "L 738 4134 \n",
-       "L 838 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p0d979851f6)\">\n",
+       "    <g clip-path=\"url(#p7d50bbde3f)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(34.049752 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(280.314545 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -1685,10 +1644,33 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p7d50bbde3f)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(77.405455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p0d979851f6\">\n",
+       "  <clipPath id=\"p7d50bbde3f\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -1728,18 +1710,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "None"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "image/svg+xml": [
@@ -1751,7 +1724,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:49.885192</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:39.280053</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -1775,54 +1748,54 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 46.309538 143.281275 \n",
-       "Q 185.762204 195.23864 324.167192 246.805659 \n",
-       "\" clip-path=\"url(#p2cb3a7abd8)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 321.117172 243.534974 \n",
-       "L 324.167192 246.805659 \n",
-       "L 319.720632 247.283264 \n",
+       "    <path d=\"M 265.395316 64.656 \n",
+       "Q 191.695936 64.656 120.232623 64.656 \n",
+       "\" clip-path=\"url(#p83ba56b868)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 128.232623 68.656 \n",
+       "L 120.232623 64.656 \n",
+       "L 128.232623 60.656 \n",
        "z\n",
-       "\" clip-path=\"url(#p2cb3a7abd8)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p83ba56b868)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 333.330248 241.558255 \n",
-       "Q 333.330248 140.256299 333.330248 40.072377 \n",
-       "\" clip-path=\"url(#p2cb3a7abd8)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 331.330248 44.072377 \n",
-       "L 333.330248 40.072377 \n",
-       "L 335.330248 44.072377 \n",
+       "    <path d=\"M 113.208502 202.024762 \n",
+       "Q 191.696182 140.254304 268.426707 79.866743 \n",
+       "\" clip-path=\"url(#p83ba56b868)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 259.666314 81.671047 \n",
+       "L 268.426707 79.866743 \n",
+       "L 264.613915 87.95764 \n",
        "z\n",
-       "\" clip-path=\"url(#p2cb3a7abd8)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p83ba56b868)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 324.673449 30.162539 \n",
-       "Q 164.867175 29.192296 44.654475 134.490519 \n",
-       "\" clip-path=\"url(#p2cb3a7abd8)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 85.296585 84.485773 \n",
+       "Q 60.610465 140.258384 85.298695 196.030995 \n",
+       "\" clip-path=\"url(#p83ba56b868)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m28a28d2391\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m9a7c8d5105\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p2cb3a7abd8)\">\n",
-       "     <use xlink:href=\"#m28a28d2391\" x=\"333.330248\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m28a28d2391\" x=\"38.189752\" y=\"140.256\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m28a28d2391\" x=\"333.330248\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p83ba56b868)\">\n",
+       "     <use xlink:href=\"#m9a7c8d5105\" x=\"95.634052\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9a7c8d5105\" x=\"287.754002\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9a7c8d5105\" x=\"95.634052\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p2cb3a7abd8)\">\n",
+       "    <g clip-path=\"url(#p83ba56b868)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(84.734052 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -1857,9 +1830,34 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p2cb3a7abd8)\">\n",
+       "    <g clip-path=\"url(#p83ba56b868)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(280.854002 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p83ba56b868)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(29.369752 143.56725) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(80.934052 221.37475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -1883,35 +1881,10 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p2cb3a7abd8)\">\n",
-       "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(329.190248 253.530886) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
-       "L 1516 4666 \n",
-       "L 2316 2981 \n",
-       "L 3763 4666 \n",
-       "L 4500 4666 \n",
-       "L 2578 2438 \n",
-       "L 3738 0 \n",
-       "L 3103 0 \n",
-       "L 2163 1966 \n",
-       "L 459 0 \n",
-       "L -275 0 \n",
-       "L 1906 2509 \n",
-       "L 878 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p2cb3a7abd8\">\n",
+       "  <clipPath id=\"p83ba56b868\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -1931,12 +1904,12 @@
     "    estimand=P(X, Y1, W1),\n",
     "    graph=NxMixedGraph.from_edges(directed=[(X, Y1), (W1, X)], undirected=[(W1, Y1)]),\n",
     ")\n",
-    "display(id_in.graph.draw())"
+    "id_in.graph.draw()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
@@ -1969,15 +1942,6 @@
      "metadata": {},
      "output_type": "display_data"
     },
-    {
-     "data": {
-      "text/plain": [
-       "None"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "image/svg+xml": [
@@ -1989,7 +1953,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:50.105053</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:39.567624</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -2013,33 +1977,33 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 344.972466 38.376543 \n",
-       "Q 307.215469 140.25912 344.974778 242.141696 \n",
-       "\" clip-path=\"url(#pf17583f185)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 67.747838 \n",
+       "Q 185.758683 107.316253 267.554475 67.749112 \n",
+       "\" clip-path=\"url(#p2123891301)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"mfce6ed88ba\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"md47a124b45\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#pf17583f185)\">\n",
-       "     <use xlink:href=\"#mfce6ed88ba\" x=\"348.087273\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#mfce6ed88ba\" x=\"348.087273\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p2123891301)\">\n",
+       "     <use xlink:href=\"#md47a124b45\" x=\"84.305455\" y=\"57.096\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md47a124b45\" x=\"287.214545\" y=\"57.096\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#pf17583f185)\">\n",
+       "    <g clip-path=\"url(#p2123891301)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(341.547273 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(73.405455 62.61475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -2074,9 +2038,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#pf17583f185)\">\n",
+       "    <g clip-path=\"url(#p2123891301)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(339.267273 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(272.514545 62.61475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -2103,7 +2067,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"pf17583f185\">\n",
+       "  <clipPath id=\"p2123891301\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -2121,7 +2085,7 @@
     "id_out = line_7(id_in)\n",
     "display(id_out.estimand)\n",
     "display(id_out.outcomes, id_out.treatments)\n",
-    "display(id_out.graph.draw())"
+    "id_out.graph.draw()"
    ]
   },
   {
@@ -2135,7 +2099,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -2149,7 +2113,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:50.441733</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:39.964615</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -2173,81 +2137,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 204.476151 48.012091 \n",
-       "Q 125.462455 72.901405 47.515138 97.45481 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 51.931225 98.160621 \n",
-       "L 47.515138 97.45481 \n",
-       "L 50.729439 94.345427 \n",
+       "    <path d=\"M 117.992739 79.774125 \n",
+       "Q 143.662685 79.774125 167.096564 79.774125 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 159.096564 75.774125 \n",
+       "L 167.096564 79.774125 \n",
+       "L 159.096564 83.774125 \n",
        "z\n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 162.599585 147.598681 \n",
-       "Q 185.760229 100.39184 208.428418 54.188737 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 204.87102 56.898888 \n",
-       "L 208.428418 54.188737 \n",
-       "L 208.462101 58.660746 \n",
+       "    <path d=\"M 265.395316 79.774125 \n",
+       "Q 191.695936 79.774125 120.232623 79.774125 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 128.232623 83.774125 \n",
+       "L 120.232623 79.774125 \n",
+       "L 128.232623 75.774125 \n",
        "z\n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 325.967774 214.911474 \n",
-       "Q 288.901398 237.846294 252.785775 260.192836 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 257.239632 259.788906 \n",
-       "L 252.785775 260.192836 \n",
-       "L 255.134945 256.387392 \n",
+       "    <path d=\"M 117.992739 230.974125 \n",
+       "Q 143.662685 230.974125 167.096564 230.974125 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 159.096564 226.974125 \n",
+       "L 167.096564 230.974125 \n",
+       "L 159.096564 234.974125 \n",
        "z\n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 214.999466 53.769799 \n",
-       "Q 242.551205 150.170412 326.053754 205.664227 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 85.296585 99.603898 \n",
+       "Q 60.610465 155.376509 85.298695 211.14912 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 44.305345 106.527495 \n",
-       "Q 88.755238 149.232193 150.145224 154.781132 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 211.90098 89.347884 \n",
+       "Q 239.723168 99.018064 267.545357 89.348472 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 165.571318 160.754444 \n",
-       "Q 235.990346 214.824247 324.685263 210.875354 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.690546 83.389527 \n",
+       "Q 153.018351 106.227729 104.33614 210.373818 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 161.357755 163.643704 \n",
-       "Q 182.043238 225.615562 237.079345 260.820701 \n",
-       "\" clip-path=\"url(#p595a9cb7d6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 268.285453 90.776597 \n",
+       "Q 203.252929 132.205008 193.381861 208.678446 \n",
+       "\" clip-path=\"url(#pe8da728e5d)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"md5389bc0c6\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m110358c340\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
-       "     <use xlink:href=\"#md5389bc0c6\" x=\"212.735207\" y=\"45.410489\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md5389bc0c6\" x=\"38.189752\" y=\"100.392307\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md5389bc0c6\" x=\"158.784793\" y=\"155.374125\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md5389bc0c6\" x=\"333.330248\" y=\"210.355943\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#md5389bc0c6\" x=\"244.470744\" y=\"265.337761\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
+       "     <use xlink:href=\"#m110358c340\" x=\"95.634052\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m110358c340\" x=\"191.694027\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m110358c340\" x=\"287.754002\" y=\"79.774125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m110358c340\" x=\"95.634052\" y=\"230.974125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m110358c340\" x=\"191.694027\" y=\"230.974125\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(208.595207 48.721739) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(88.734052 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -2270,9 +2234,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(31.649752 103.703557) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(180.794027 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -2307,9 +2271,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(149.964793 158.685375) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(273.054002 85.292875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -2334,9 +2298,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
        "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(324.510248 213.667193) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(80.934052 236.492875) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
        "L 3431 531 \n",
@@ -2369,9 +2333,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#p595a9cb7d6)\">\n",
+       "    <g clip-path=\"url(#pe8da728e5d)\">\n",
        "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(237.930744 268.649011) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(180.794027 236.492875) scale(0.2 -0.2)\">\n",
        "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
@@ -2453,7 +2417,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p595a9cb7d6\">\n",
+       "  <clipPath id=\"pe8da728e5d\">\n",
        "   <rect x=\"7.2\" y=\"22.318125\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -2487,7 +2451,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -2513,7 +2477,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:50.877766</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:40.407781</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -2537,118 +2501,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 218.638916 96.848754 \n",
-       "Q 272.034717 72.901981 324.410379 49.412717 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.942198 49.224669 \n",
-       "L 324.410379 49.412717 \n",
-       "L 321.579032 52.874433 \n",
+       "    <path d=\"M 84.305455 101.803328 \n",
+       "Q 84.305455 151.714791 84.305455 199.390186 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 191.390186 \n",
+       "L 84.305455 199.390186 \n",
+       "L 80.305455 191.390186 \n",
        "z\n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 44.637983 161.159762 \n",
-       "Q 99.488488 210.35811 153.506706 258.809935 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 151.864444 254.65025 \n",
-       "L 153.506706 258.809935 \n",
-       "L 149.193601 257.627933 \n",
+       "    <path d=\"M 264.851076 79.443223 \n",
+       "Q 236.488062 79.443223 210.361116 79.443223 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 218.361116 83.443223 \n",
+       "L 210.361116 79.443223 \n",
+       "L 218.361116 75.443223 \n",
        "z\n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 282.946487 203.266962 \n",
-       "Q 249.326909 155.373417 216.349687 108.394955 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 217.0109 112.81794 \n",
-       "L 216.349687 108.394955 \n",
-       "L 220.284803 110.519776 \n",
+       "    <path d=\"M 172.912538 205.683638 \n",
+       "Q 135.032523 151.715167 98.437131 99.576927 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 99.759124 108.422962 \n",
+       "L 98.437131 99.576927 \n",
+       "L 106.307155 103.826954 \n",
        "z\n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 328.207537 52.398432 \n",
-       "Q 280.6107 119.624764 287.098747 201.739597 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 90.095061 \n",
+       "Q 185.758683 129.663476 267.554475 90.096335 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 279.274845 210.773299 \n",
-       "Q 214.572143 215.222187 167.015773 259.31947 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 267.270011 89.552761 \n",
+       "Q 201.73283 127.320451 188.488916 201.792343 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 202.088819 99.904987 \n",
-       "Q 114.405236 96.321242 44.960182 149.973562 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 175.483586 99.297797 \n",
+       "Q 152.674148 151.712988 175.481436 204.128179 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 45.401571 160.165924 \n",
-       "Q 152.731988 229.759033 279.365196 211.676457 \n",
-       "\" clip-path=\"url(#pa17ea59975)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.458275 233.677505 \n",
+       "Q 135.032021 244.733989 165.605767 233.678016 \n",
+       "\" clip-path=\"url(#pd99cb415fe)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m571d6d9879\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"mf972b21c8a\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
-       "     <use xlink:href=\"#m571d6d9879\" x=\"333.330248\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m571d6d9879\" x=\"210.733427\" y=\"100.394182\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m571d6d9879\" x=\"38.189752\" y=\"155.376\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m571d6d9879\" x=\"287.924018\" y=\"210.357818\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m571d6d9879\" x=\"160.786573\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
+       "     <use xlink:href=\"#mf972b21c8a\" x=\"84.305455\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mf972b21c8a\" x=\"185.76\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mf972b21c8a\" x=\"287.214545\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mf972b21c8a\" x=\"84.305455\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mf972b21c8a\" x=\"185.76\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
-       "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 48.723614) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
-       "L 1081 4666 \n",
-       "L 1953 2747 \n",
-       "L 3616 4666 \n",
-       "L 4325 4666 \n",
-       "L 2209 2222 \n",
-       "L 1778 0 \n",
-       "L 1147 0 \n",
-       "L 1575 2222 \n",
-       "L 403 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
-       "L 1825 531 \n",
-       "L 1825 4091 \n",
-       "L 703 3866 \n",
-       "L 703 4441 \n",
-       "L 1819 4666 \n",
-       "L 2450 4666 \n",
-       "L 2450 531 \n",
-       "L 3481 531 \n",
-       "L 3481 0 \n",
-       "L 794 0 \n",
-       "L 794 531 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(206.593427 103.705432) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(77.405455 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -2670,25 +2597,21 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
-       "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(29.369752 158.68725) scale(0.12 -0.12)\">\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
+       "     <!-- $Y_2$ -->\n",
+       "     <g transform=\"translate(174.86 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
-       "L 1228 4666 \n",
-       "L 1453 697 \n",
-       "L 3213 4666 \n",
-       "L 3916 4666 \n",
-       "L 4147 697 \n",
-       "L 5888 4666 \n",
-       "L 6528 4666 \n",
-       "L 4453 0 \n",
-       "L 3659 0 \n",
-       "L 3444 3891 \n",
-       "L 1697 0 \n",
-       "L 903 0 \n",
-       "L 616 4666 \n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
@@ -2716,26 +2639,69 @@
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
+       "     <!-- $W_2$ -->\n",
+       "     <g transform=\"translate(272.514545 84.961973) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
-       "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(279.104018 213.669068) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
+       "     <!-- $Y_1$ -->\n",
+       "     <g transform=\"translate(73.405455 229.506443) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
+       "L 1825 531 \n",
+       "L 1825 4091 \n",
+       "L 703 3866 \n",
+       "L 703 4441 \n",
+       "L 1819 4666 \n",
+       "L 2450 4666 \n",
+       "L 2450 531 \n",
+       "L 3481 531 \n",
+       "L 3481 0 \n",
+       "L 794 0 \n",
+       "L 794 531 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#pa17ea59975)\">\n",
-       "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(154.246573 268.650886) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#pd99cb415fe)\">\n",
+       "     <!-- $W_1$ -->\n",
+       "     <g transform=\"translate(171.06 229.506443) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
@@ -2821,7 +2787,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"pa17ea59975\">\n",
+       "  <clipPath id=\"pd99cb415fe\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -2866,7 +2832,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
@@ -2892,7 +2858,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:51.702997</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:41.425190</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -2916,118 +2882,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 218.638916 96.848754 \n",
-       "Q 272.034717 72.901981 324.410379 49.412717 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.942198 49.224669 \n",
-       "L 324.410379 49.412717 \n",
-       "L 321.579032 52.874433 \n",
+       "    <path d=\"M 84.305455 101.803328 \n",
+       "Q 84.305455 151.714791 84.305455 199.390186 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 191.390186 \n",
+       "L 84.305455 199.390186 \n",
+       "L 80.305455 191.390186 \n",
        "z\n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 44.637983 161.159762 \n",
-       "Q 99.488488 210.35811 153.506706 258.809935 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 151.864444 254.65025 \n",
-       "L 153.506706 258.809935 \n",
-       "L 149.193601 257.627933 \n",
+       "    <path d=\"M 264.851076 79.443223 \n",
+       "Q 236.488062 79.443223 210.361116 79.443223 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 218.361116 83.443223 \n",
+       "L 210.361116 79.443223 \n",
+       "L 218.361116 75.443223 \n",
        "z\n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 282.946487 203.266962 \n",
-       "Q 249.326909 155.373417 216.349687 108.394955 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 217.0109 112.81794 \n",
-       "L 216.349687 108.394955 \n",
-       "L 220.284803 110.519776 \n",
+       "    <path d=\"M 172.912538 205.683638 \n",
+       "Q 135.032523 151.715167 98.437131 99.576927 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 99.759124 108.422962 \n",
+       "L 98.437131 99.576927 \n",
+       "L 106.307155 103.826954 \n",
        "z\n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 328.207537 52.398432 \n",
-       "Q 280.6107 119.624764 287.098747 201.739597 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 90.095061 \n",
+       "Q 185.758683 129.663476 267.554475 90.096335 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 279.274845 210.773299 \n",
-       "Q 214.572143 215.222187 167.015773 259.31947 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 267.270011 89.552761 \n",
+       "Q 201.73283 127.320451 188.488916 201.792343 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 202.088819 99.904987 \n",
-       "Q 114.405236 96.321242 44.960182 149.973562 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 175.483586 99.297797 \n",
+       "Q 152.674148 151.712988 175.481436 204.128179 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 45.401571 160.165924 \n",
-       "Q 152.731988 229.759033 279.365196 211.676457 \n",
-       "\" clip-path=\"url(#pa26ccd3bc2)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.458275 233.677505 \n",
+       "Q 135.032021 244.733989 165.605767 233.678016 \n",
+       "\" clip-path=\"url(#p920a0ce408)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m5b21ce2841\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"ma26a28f06b\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
-       "     <use xlink:href=\"#m5b21ce2841\" x=\"333.330248\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m5b21ce2841\" x=\"210.733427\" y=\"100.394182\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m5b21ce2841\" x=\"38.189752\" y=\"155.376\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m5b21ce2841\" x=\"287.924018\" y=\"210.357818\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m5b21ce2841\" x=\"160.786573\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
+       "     <use xlink:href=\"#ma26a28f06b\" x=\"84.305455\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma26a28f06b\" x=\"185.76\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma26a28f06b\" x=\"287.214545\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma26a28f06b\" x=\"84.305455\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma26a28f06b\" x=\"185.76\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
-       "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 48.723614) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
-       "L 1081 4666 \n",
-       "L 1953 2747 \n",
-       "L 3616 4666 \n",
-       "L 4325 4666 \n",
-       "L 2209 2222 \n",
-       "L 1778 0 \n",
-       "L 1147 0 \n",
-       "L 1575 2222 \n",
-       "L 403 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
-       "L 1825 531 \n",
-       "L 1825 4091 \n",
-       "L 703 3866 \n",
-       "L 703 4441 \n",
-       "L 1819 4666 \n",
-       "L 2450 4666 \n",
-       "L 2450 531 \n",
-       "L 3481 531 \n",
-       "L 3481 0 \n",
-       "L 794 0 \n",
-       "L 794 531 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(206.593427 103.705432) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(77.405455 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -3049,25 +2978,21 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
-       "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(29.369752 158.68725) scale(0.12 -0.12)\">\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
+       "     <!-- $Y_2$ -->\n",
+       "     <g transform=\"translate(174.86 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
-       "L 1228 4666 \n",
-       "L 1453 697 \n",
-       "L 3213 4666 \n",
-       "L 3916 4666 \n",
-       "L 4147 697 \n",
-       "L 5888 4666 \n",
-       "L 6528 4666 \n",
-       "L 4453 0 \n",
-       "L 3659 0 \n",
-       "L 3444 3891 \n",
-       "L 1697 0 \n",
-       "L 903 0 \n",
-       "L 616 4666 \n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
@@ -3095,26 +3020,69 @@
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
+       "     <!-- $W_2$ -->\n",
+       "     <g transform=\"translate(272.514545 84.961973) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
        "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
-       "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(279.104018 213.669068) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
+       "     <!-- $Y_1$ -->\n",
+       "     <g transform=\"translate(73.405455 229.506443) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
+       "L 1825 531 \n",
+       "L 1825 4091 \n",
+       "L 703 3866 \n",
+       "L 703 4441 \n",
+       "L 1819 4666 \n",
+       "L 2450 4666 \n",
+       "L 2450 531 \n",
+       "L 3481 531 \n",
+       "L 3481 0 \n",
+       "L 794 0 \n",
+       "L 794 531 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#pa26ccd3bc2)\">\n",
-       "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(154.246573 268.650886) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#p920a0ce408)\">\n",
+       "     <!-- $W_1$ -->\n",
+       "     <g transform=\"translate(171.06 229.506443) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
@@ -3199,7 +3167,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"pa26ccd3bc2\">\n",
+       "  <clipPath id=\"p920a0ce408\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -3223,7 +3191,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:51.845299</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:41.572337</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -3247,118 +3215,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 218.638916 96.848754 \n",
-       "Q 272.034717 72.901981 324.410379 49.412717 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.942198 49.224669 \n",
-       "L 324.410379 49.412717 \n",
-       "L 321.579032 52.874433 \n",
+       "    <path d=\"M 84.305455 101.803328 \n",
+       "Q 84.305455 151.714791 84.305455 199.390186 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 191.390186 \n",
+       "L 84.305455 199.390186 \n",
+       "L 80.305455 191.390186 \n",
        "z\n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 44.637983 161.159762 \n",
-       "Q 99.488488 210.35811 153.506706 258.809935 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 151.864444 254.65025 \n",
-       "L 153.506706 258.809935 \n",
-       "L 149.193601 257.627933 \n",
+       "    <path d=\"M 264.851076 79.443223 \n",
+       "Q 236.488062 79.443223 210.361116 79.443223 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 218.361116 83.443223 \n",
+       "L 210.361116 79.443223 \n",
+       "L 218.361116 75.443223 \n",
        "z\n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 282.946487 203.266962 \n",
-       "Q 249.326909 155.373417 216.349687 108.394955 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 217.0109 112.81794 \n",
-       "L 216.349687 108.394955 \n",
-       "L 220.284803 110.519776 \n",
+       "    <path d=\"M 172.912538 205.683638 \n",
+       "Q 135.032523 151.715167 98.437131 99.576927 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 99.759124 108.422962 \n",
+       "L 98.437131 99.576927 \n",
+       "L 106.307155 103.826954 \n",
        "z\n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 328.207537 52.398432 \n",
-       "Q 280.6107 119.624764 287.098747 201.739597 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 90.095061 \n",
+       "Q 185.758683 129.663476 267.554475 90.096335 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 279.274845 210.773299 \n",
-       "Q 214.572143 215.222187 167.015773 259.31947 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 267.270011 89.552761 \n",
+       "Q 201.73283 127.320451 188.488916 201.792343 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 202.088819 99.904987 \n",
-       "Q 114.405236 96.321242 44.960182 149.973562 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 175.483586 99.297797 \n",
+       "Q 152.674148 151.712988 175.481436 204.128179 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 45.401571 160.165924 \n",
-       "Q 152.731988 229.759033 279.365196 211.676457 \n",
-       "\" clip-path=\"url(#p31c3f74634)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.458275 233.677505 \n",
+       "Q 135.032021 244.733989 165.605767 233.678016 \n",
+       "\" clip-path=\"url(#p1abac82625)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"ma3944881f1\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"me3ed5fe7af\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
-       "     <use xlink:href=\"#ma3944881f1\" x=\"333.330248\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#ma3944881f1\" x=\"210.733427\" y=\"100.394182\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#ma3944881f1\" x=\"38.189752\" y=\"155.376\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#ma3944881f1\" x=\"287.924018\" y=\"210.357818\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#ma3944881f1\" x=\"160.786573\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
+       "     <use xlink:href=\"#me3ed5fe7af\" x=\"84.305455\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#me3ed5fe7af\" x=\"185.76\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#me3ed5fe7af\" x=\"287.214545\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#me3ed5fe7af\" x=\"84.305455\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#me3ed5fe7af\" x=\"185.76\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
-       "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 48.723614) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
-       "L 1081 4666 \n",
-       "L 1953 2747 \n",
-       "L 3616 4666 \n",
-       "L 4325 4666 \n",
-       "L 2209 2222 \n",
-       "L 1778 0 \n",
-       "L 1147 0 \n",
-       "L 1575 2222 \n",
-       "L 403 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
-       "L 1825 531 \n",
-       "L 1825 4091 \n",
-       "L 703 3866 \n",
-       "L 703 4441 \n",
-       "L 1819 4666 \n",
-       "L 2450 4666 \n",
-       "L 2450 531 \n",
-       "L 3481 531 \n",
-       "L 3481 0 \n",
-       "L 794 0 \n",
-       "L 794 531 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(206.593427 103.705432) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(77.405455 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -3380,25 +3311,21 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
-       "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(29.369752 158.68725) scale(0.12 -0.12)\">\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
+       "     <!-- $Y_2$ -->\n",
+       "     <g transform=\"translate(174.86 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
-       "L 1228 4666 \n",
-       "L 1453 697 \n",
-       "L 3213 4666 \n",
-       "L 3916 4666 \n",
-       "L 4147 697 \n",
-       "L 5888 4666 \n",
-       "L 6528 4666 \n",
-       "L 4453 0 \n",
-       "L 3659 0 \n",
-       "L 3444 3891 \n",
-       "L 1697 0 \n",
-       "L 903 0 \n",
-       "L 616 4666 \n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
@@ -3426,29 +3353,72 @@
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
+       "     <!-- $W_2$ -->\n",
+       "     <g transform=\"translate(272.514545 84.961973) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
+       "     <!-- $Y_1$ -->\n",
+       "     <g transform=\"translate(73.405455 229.506443) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
+       "L 1825 531 \n",
+       "L 1825 4091 \n",
+       "L 703 3866 \n",
+       "L 703 4441 \n",
+       "L 1819 4666 \n",
+       "L 2450 4666 \n",
+       "L 2450 531 \n",
+       "L 3481 531 \n",
+       "L 3481 0 \n",
+       "L 794 0 \n",
+       "L 794 531 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p1abac82625)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(279.104018 213.669068) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(171.06 229.506443) scale(0.2 -0.2)\">\n",
        "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#p31c3f74634)\">\n",
-       "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(154.246573 268.650886) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
        "   <g id=\"text_6\">\n",
        "    <!-- $P({Y_1}_{W_1, W_2, X, Y_2})$ -->\n",
        "    <g transform=\"translate(144.54 16.32) scale(0.12 -0.12)\">\n",
@@ -3530,7 +3500,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p31c3f74634\">\n",
+       "  <clipPath id=\"p1abac82625\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -3554,7 +3524,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:51.991844</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:41.726104</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -3578,118 +3548,81 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 218.638916 96.848754 \n",
-       "Q 272.034717 72.901981 324.410379 49.412717 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 319.942198 49.224669 \n",
-       "L 324.410379 49.412717 \n",
-       "L 321.579032 52.874433 \n",
+       "    <path d=\"M 84.305455 101.803328 \n",
+       "Q 84.305455 151.714791 84.305455 199.390186 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 191.390186 \n",
+       "L 84.305455 199.390186 \n",
+       "L 80.305455 191.390186 \n",
        "z\n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 44.637983 161.159762 \n",
-       "Q 99.488488 210.35811 153.506706 258.809935 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 151.864444 254.65025 \n",
-       "L 153.506706 258.809935 \n",
-       "L 149.193601 257.627933 \n",
+       "    <path d=\"M 264.851076 79.443223 \n",
+       "Q 236.488062 79.443223 210.361116 79.443223 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 218.361116 83.443223 \n",
+       "L 210.361116 79.443223 \n",
+       "L 218.361116 75.443223 \n",
        "z\n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 282.946487 203.266962 \n",
-       "Q 249.326909 155.373417 216.349687 108.394955 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 217.0109 112.81794 \n",
-       "L 216.349687 108.394955 \n",
-       "L 220.284803 110.519776 \n",
+       "    <path d=\"M 172.912538 205.683638 \n",
+       "Q 135.032523 151.715167 98.437131 99.576927 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 99.759124 108.422962 \n",
+       "L 98.437131 99.576927 \n",
+       "L 106.307155 103.826954 \n",
        "z\n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_5\">\n",
-       "    <path d=\"M 328.207537 52.398432 \n",
-       "Q 280.6107 119.624764 287.098747 201.739597 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 90.095061 \n",
+       "Q 185.758683 129.663476 267.554475 90.096335 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_6\">\n",
-       "    <path d=\"M 279.274845 210.773299 \n",
-       "Q 214.572143 215.222187 167.015773 259.31947 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 267.270011 89.552761 \n",
+       "Q 201.73283 127.320451 188.488916 201.792343 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_7\">\n",
-       "    <path d=\"M 202.088819 99.904987 \n",
-       "Q 114.405236 96.321242 44.960182 149.973562 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 175.483586 99.297797 \n",
+       "Q 152.674148 151.712988 175.481436 204.128179 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_8\">\n",
-       "    <path d=\"M 45.401571 160.165924 \n",
-       "Q 152.731988 229.759033 279.365196 211.676457 \n",
-       "\" clip-path=\"url(#pb2969ecda6)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.458275 233.677505 \n",
+       "Q 135.032021 244.733989 165.605767 233.678016 \n",
+       "\" clip-path=\"url(#pc0840df18f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m456640bc2e\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m83c0dd397a\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
-       "     <use xlink:href=\"#m456640bc2e\" x=\"333.330248\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m456640bc2e\" x=\"210.733427\" y=\"100.394182\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m456640bc2e\" x=\"38.189752\" y=\"155.376\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m456640bc2e\" x=\"287.924018\" y=\"210.357818\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m456640bc2e\" x=\"160.786573\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
+       "     <use xlink:href=\"#m83c0dd397a\" x=\"84.305455\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m83c0dd397a\" x=\"185.76\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m83c0dd397a\" x=\"287.214545\" y=\"79.443223\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m83c0dd397a\" x=\"84.305455\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m83c0dd397a\" x=\"185.76\" y=\"223.987693\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
-       "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 48.723614) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
-       "L 1081 4666 \n",
-       "L 1953 2747 \n",
-       "L 3616 4666 \n",
-       "L 4325 4666 \n",
-       "L 2209 2222 \n",
-       "L 1778 0 \n",
-       "L 1147 0 \n",
-       "L 1575 2222 \n",
-       "L 403 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
-       "L 1825 531 \n",
-       "L 1825 4091 \n",
-       "L 703 3866 \n",
-       "L 703 4441 \n",
-       "L 1819 4666 \n",
-       "L 2450 4666 \n",
-       "L 2450 531 \n",
-       "L 3481 531 \n",
-       "L 3481 0 \n",
-       "L 794 0 \n",
-       "L 794 531 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(206.593427 103.705432) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(77.405455 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -3711,25 +3644,21 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
-       "     <!-- $W_2$ -->\n",
-       "     <g transform=\"translate(29.369752 158.68725) scale(0.12 -0.12)\">\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
+       "     <!-- $Y_2$ -->\n",
+       "     <g transform=\"translate(174.86 84.961973) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
-       "L 1228 4666 \n",
-       "L 1453 697 \n",
-       "L 3213 4666 \n",
-       "L 3916 4666 \n",
-       "L 4147 697 \n",
-       "L 5888 4666 \n",
-       "L 6528 4666 \n",
-       "L 4453 0 \n",
-       "L 3659 0 \n",
-       "L 3444 3891 \n",
-       "L 1697 0 \n",
-       "L 903 0 \n",
-       "L 616 4666 \n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
@@ -3757,26 +3686,69 @@
        "z\n",
        "\" transform=\"scale(0.015625)\"/>\n",
        "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
+       "     <!-- $W_2$ -->\n",
+       "     <g transform=\"translate(272.514545 84.961973) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
        "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
        "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_4\">\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
-       "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(279.104018 213.669068) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
+       "     <!-- $Y_1$ -->\n",
+       "     <g transform=\"translate(73.405455 229.506443) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
+       "L 1825 531 \n",
+       "L 1825 4091 \n",
+       "L 703 3866 \n",
+       "L 703 4441 \n",
+       "L 1819 4666 \n",
+       "L 2450 4666 \n",
+       "L 2450 531 \n",
+       "L 3481 531 \n",
+       "L 3481 0 \n",
+       "L 794 0 \n",
+       "L 794 531 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_5\">\n",
-       "    <g clip-path=\"url(#pb2969ecda6)\">\n",
-       "     <!-- $Y_2$ -->\n",
-       "     <g transform=\"translate(154.246573 268.650886) scale(0.12 -0.12)\">\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
-       "      <use xlink:href=\"#DejaVuSans-32\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "    <g clip-path=\"url(#pc0840df18f)\">\n",
+       "     <!-- $W_1$ -->\n",
+       "     <g transform=\"translate(171.06 229.506443) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-31\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
@@ -3861,7 +3833,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"pb2969ecda6\">\n",
+       "  <clipPath id=\"pc0840df18f\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -3899,7 +3871,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -3908,7 +3880,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
@@ -3964,7 +3936,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -3976,7 +3948,7 @@
        "P(W2)"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -3997,7 +3969,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -4040,7 +4012,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
@@ -4052,7 +4024,7 @@
        "P(Y2 | W2)"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -4072,7 +4044,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [
     {
@@ -4096,7 +4068,7 @@
        "Sum[W2, Y2](P(W1, W2, X, Y1, Y2))"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -4118,7 +4090,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [
     {
@@ -4132,7 +4104,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:52.440967</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:42.194022</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -4156,54 +4128,54 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 46.309538 158.401275 \n",
-       "Q 185.762204 210.35864 324.167192 261.925659 \n",
-       "\" clip-path=\"url(#p7dd0c3cfa4)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 321.117172 258.654974 \n",
-       "L 324.167192 261.925659 \n",
-       "L 319.720632 262.403264 \n",
+       "    <path d=\"M 265.395316 79.776 \n",
+       "Q 191.695936 79.776 120.232623 79.776 \n",
+       "\" clip-path=\"url(#p003f696347)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 128.232623 83.776 \n",
+       "L 120.232623 79.776 \n",
+       "L 128.232623 75.776 \n",
        "z\n",
-       "\" clip-path=\"url(#p7dd0c3cfa4)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p003f696347)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 333.330248 256.678255 \n",
-       "Q 333.330248 155.376299 333.330248 55.192377 \n",
-       "\" clip-path=\"url(#p7dd0c3cfa4)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 331.330248 59.192377 \n",
-       "L 333.330248 55.192377 \n",
-       "L 335.330248 59.192377 \n",
+       "    <path d=\"M 113.208502 217.144762 \n",
+       "Q 191.696182 155.374304 268.426707 94.986743 \n",
+       "\" clip-path=\"url(#p003f696347)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 259.666314 96.791047 \n",
+       "L 268.426707 94.986743 \n",
+       "L 264.613915 103.07764 \n",
        "z\n",
-       "\" clip-path=\"url(#p7dd0c3cfa4)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p003f696347)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 324.673449 45.282539 \n",
-       "Q 164.867175 44.312296 44.654475 149.610519 \n",
-       "\" clip-path=\"url(#p7dd0c3cfa4)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 85.296585 99.605773 \n",
+       "Q 60.610465 155.378384 85.298695 211.150995 \n",
+       "\" clip-path=\"url(#p003f696347)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m9e37972b31\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m86280ebc0e\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p7dd0c3cfa4)\">\n",
-       "     <use xlink:href=\"#m9e37972b31\" x=\"333.330248\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m9e37972b31\" x=\"38.189752\" y=\"155.376\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m9e37972b31\" x=\"333.330248\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p003f696347)\">\n",
+       "     <use xlink:href=\"#m86280ebc0e\" x=\"95.634052\" y=\"79.776\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m86280ebc0e\" x=\"287.754002\" y=\"79.776\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m86280ebc0e\" x=\"95.634052\" y=\"230.976\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p7dd0c3cfa4)\">\n",
+       "    <g clip-path=\"url(#p003f696347)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(326.790248 48.723614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(84.734052 85.29475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -4238,9 +4210,34 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p7dd0c3cfa4)\">\n",
+       "    <g clip-path=\"url(#p003f696347)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(280.854002 85.29475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p003f696347)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(29.369752 158.68725) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(80.934052 236.49475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -4264,31 +4261,6 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p7dd0c3cfa4)\">\n",
-       "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(329.190248 268.650886) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
-       "L 1516 4666 \n",
-       "L 2316 2981 \n",
-       "L 3763 4666 \n",
-       "L 4500 4666 \n",
-       "L 2578 2438 \n",
-       "L 3738 0 \n",
-       "L 3103 0 \n",
-       "L 2163 1966 \n",
-       "L 459 0 \n",
-       "L -275 0 \n",
-       "L 1906 2509 \n",
-       "L 878 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
        "   <g id=\"text_4\">\n",
        "    <!-- $P({Y_1}_{W_1, X})$ -->\n",
        "    <g transform=\"translate(159.54 16.32) scale(0.12 -0.12)\">\n",
@@ -4364,7 +4336,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p7dd0c3cfa4\">\n",
+       "  <clipPath id=\"p003f696347\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -4391,7 +4363,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 29,
    "metadata": {},
    "outputs": [
     {
@@ -4435,7 +4407,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 30,
    "metadata": {},
    "outputs": [
     {
@@ -4447,7 +4419,7 @@
        "Sum(Sum[W1](P(Y1 | W1, X) * P(W1)))"
       ]
      },
-     "execution_count": 29,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -4458,7 +4430,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 31,
    "metadata": {},
    "outputs": [
     {
@@ -4472,7 +4444,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:52.721033</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:42.480802</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -4496,33 +4468,33 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 344.972466 53.496543 \n",
-       "Q 307.215469 155.37912 344.974778 257.261696 \n",
-       "\" clip-path=\"url(#p2efd1a79cc)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 103.962892 82.867838 \n",
+       "Q 185.758683 122.436253 267.554475 82.869112 \n",
+       "\" clip-path=\"url(#pf0dee27f93)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"ma5dab2c16c\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m03f937d3eb\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p2efd1a79cc)\">\n",
-       "     <use xlink:href=\"#ma5dab2c16c\" x=\"348.087273\" y=\"45.412364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#ma5dab2c16c\" x=\"348.087273\" y=\"265.339636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#pf0dee27f93)\">\n",
+       "     <use xlink:href=\"#m03f937d3eb\" x=\"84.305455\" y=\"72.216\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m03f937d3eb\" x=\"287.214545\" y=\"72.216\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p2efd1a79cc)\">\n",
+       "    <g clip-path=\"url(#pf0dee27f93)\">\n",
        "     <!-- $Y_1$ -->\n",
-       "     <g transform=\"translate(341.547273 48.723614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(73.405455 77.73475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -4557,9 +4529,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p2efd1a79cc)\">\n",
+       "    <g clip-path=\"url(#pf0dee27f93)\">\n",
        "     <!-- $W_1$ -->\n",
-       "     <g transform=\"translate(339.267273 268.650886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(272.514545 77.73475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
        "L 1228 4666 \n",
@@ -4647,7 +4619,7 @@
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p2efd1a79cc\">\n",
+       "  <clipPath id=\"pf0dee27f93\">\n",
        "   <rect x=\"7.2\" y=\"22.32\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -4674,7 +4646,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 32,
    "metadata": {},
    "outputs": [
     {
@@ -4723,7 +4695,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 33,
    "metadata": {},
    "outputs": [
     {
@@ -4735,7 +4707,7 @@
        "Sum(Sum[W1](P(Y1 | W1, X) * P(W1)))"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -4753,7 +4725,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 34,
    "metadata": {
     "scrolled": true
    },
@@ -4767,7 +4739,7 @@
        "Sum[W2](Sum(Sum[W1, X, Y1, Y2](P(W1, W2, X, Y1, Y2))) * Sum(Sum[W1](P(Y1 | W1, X) * P(W1))) * P(Y2 | W2))"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 34,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -4792,12 +4764,12 @@
     "1. $\\text{if } (\\exists Z \\in \\mathbf{Z})(\\mathbf{Y} \\ci Z | \\mathbf{X}, \\mathbf{Z}- \\{Z\\})_{G_{\\bar{\\mathbf{X}}\\ubar{Z}}} \\\\\n",
     "\\text{return } \\mathbf{IDC}(\\mathbf y, \\mathbf x \\cup \\{z\\}, \\mathbf z - \\{z\\}, P, G)\\\\ $\n",
     "2. $\\text{ else, let } P' = \\mathbf{ID}(\\mathbf y \\cup \\mathbf z, \\mathbf x, P, G). \\\\\n",
-    "\\text{ return } P'/\\sum{\\mathbf y}P'$."
+    "\\text{ return } P'/\\sum_{\\mathbf y}P'$."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 35,
    "metadata": {},
    "outputs": [
     {
@@ -4811,7 +4783,7 @@
        "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
        "   <cc:Work>\n",
        "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
-       "    <dc:date>2023-05-26T10:26:53.004264</dc:date>\n",
+       "    <dc:date>2023-06-26T23:30:42.764153</dc:date>\n",
        "    <dc:format>image/svg+xml</dc:format>\n",
        "    <dc:creator>\n",
        "     <cc:Agent>\n",
@@ -4835,54 +4807,54 @@
        "  </g>\n",
        "  <g id=\"axes_1\">\n",
        "   <g id=\"patch_2\">\n",
-       "    <path d=\"M 185.76 131.594619 \n",
-       "Q 185.76 85.273136 185.76 40.069688 \n",
-       "\" clip-path=\"url(#p9d461dec16)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 183.76 44.069688 \n",
-       "L 185.76 40.069688 \n",
-       "L 187.76 44.069688 \n",
+       "    <path d=\"M 269.284758 78.016583 \n",
+       "Q 185.760969 140.255278 104.03019 201.157891 \n",
+       "\" clip-path=\"url(#p91616e5fde)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 112.835113 199.585214 \n",
+       "L 104.03019 201.157891 \n",
+       "L 108.055002 193.170345 \n",
        "z\n",
-       "\" clip-path=\"url(#p9d461dec16)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p91616e5fde)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_3\">\n",
-       "    <path d=\"M 185.76 241.558255 \n",
-       "Q 185.76 195.236773 185.76 150.033324 \n",
-       "\" clip-path=\"url(#p9d461dec16)\" style=\"fill: none; stroke: #0000ff; stroke-linecap: round\"/>\n",
-       "    <path d=\"M 183.76 154.033324 \n",
-       "L 185.76 150.033324 \n",
-       "L 187.76 154.033324 \n",
+       "    <path d=\"M 84.305455 193.499921 \n",
+       "Q 84.305455 140.258615 84.305455 89.253377 \n",
+       "\" clip-path=\"url(#p91616e5fde)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 80.305455 97.253377 \n",
+       "L 84.305455 89.253377 \n",
+       "L 88.305455 97.253377 \n",
        "z\n",
-       "\" clip-path=\"url(#p9d461dec16)\" style=\"fill: #0000ff; stroke: #0000ff; stroke-linecap: round\"/>\n",
+       "\" clip-path=\"url(#p91616e5fde)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"patch_4\">\n",
-       "    <path d=\"M 182.752612 148.373738 \n",
-       "Q 166.775292 195.235967 182.75135 242.098197 \n",
-       "\" clip-path=\"url(#p9d461dec16)\" style=\"fill: none; stroke: #ff0000; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.054542 67.661087 \n",
+       "Q 146.870667 88.068608 93.520758 195.482751 \n",
+       "\" clip-path=\"url(#p91616e5fde)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
        "   </g>\n",
        "   <g id=\"PathCollection_1\">\n",
        "    <defs>\n",
-       "     <path id=\"m527ca62507\" d=\"M 0 9.354143 \n",
-       "C 2.480748 9.354143 4.860225 8.368532 6.614378 6.614378 \n",
-       "C 8.368532 4.860225 9.354143 2.480748 9.354143 0 \n",
-       "C 9.354143 -2.480748 8.368532 -4.860225 6.614378 -6.614378 \n",
-       "C 4.860225 -8.368532 2.480748 -9.354143 0 -9.354143 \n",
-       "C -2.480748 -9.354143 -4.860225 -8.368532 -6.614378 -6.614378 \n",
-       "C -8.368532 -4.860225 -9.354143 -2.480748 -9.354143 0 \n",
-       "C -9.354143 2.480748 -8.368532 4.860225 -6.614378 6.614378 \n",
-       "C -4.860225 8.368532 -2.480748 9.354143 0 9.354143 \n",
-       "z\n",
-       "\" style=\"stroke: #ffffff\"/>\n",
+       "     <path id=\"m0747768d44\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
        "    </defs>\n",
-       "    <g clip-path=\"url(#p9d461dec16)\">\n",
-       "     <use xlink:href=\"#m527ca62507\" x=\"185.76\" y=\"30.292364\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m527ca62507\" x=\"185.76\" y=\"140.256\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
-       "     <use xlink:href=\"#m527ca62507\" x=\"185.76\" y=\"250.219636\" style=\"fill: #ffffff; stroke: #ffffff\"/>\n",
+       "    <g clip-path=\"url(#p91616e5fde)\">\n",
+       "     <use xlink:href=\"#m0747768d44\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0747768d44\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0747768d44\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_1\">\n",
-       "    <g clip-path=\"url(#p9d461dec16)\">\n",
+       "    <g clip-path=\"url(#p91616e5fde)\">\n",
        "     <!-- $Y$ -->\n",
-       "     <g transform=\"translate(182.04 33.603614) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(78.105455 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
        "L 1081 4666 \n",
@@ -4902,32 +4874,9 @@
        "    </g>\n",
        "   </g>\n",
        "   <g id=\"text_2\">\n",
-       "    <g clip-path=\"url(#p9d461dec16)\">\n",
-       "     <!-- $Z$ -->\n",
-       "     <g transform=\"translate(181.62 143.56725) scale(0.12 -0.12)\">\n",
-       "      <defs>\n",
-       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
-       "L 4500 4666 \n",
-       "L 4409 4184 \n",
-       "L 794 531 \n",
-       "L 3769 531 \n",
-       "L 3669 0 \n",
-       "L -141 0 \n",
-       "L -50 481 \n",
-       "L 3566 4134 \n",
-       "L 738 4134 \n",
-       "L 838 4666 \n",
-       "z\n",
-       "\" transform=\"scale(0.015625)\"/>\n",
-       "      </defs>\n",
-       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
-       "     </g>\n",
-       "    </g>\n",
-       "   </g>\n",
-       "   <g id=\"text_3\">\n",
-       "    <g clip-path=\"url(#p9d461dec16)\">\n",
+       "    <g clip-path=\"url(#p91616e5fde)\">\n",
        "     <!-- $X$ -->\n",
-       "     <g transform=\"translate(181.62 253.530886) scale(0.12 -0.12)\">\n",
+       "     <g transform=\"translate(280.314545 70.17475) scale(0.2 -0.2)\">\n",
        "      <defs>\n",
        "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
        "L 1516 4666 \n",
@@ -4949,10 +4898,33 @@
        "     </g>\n",
        "    </g>\n",
        "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p91616e5fde)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(77.405455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
        "  </g>\n",
        " </g>\n",
        " <defs>\n",
-       "  <clipPath id=\"p9d461dec16\">\n",
+       "  <clipPath id=\"p91616e5fde\">\n",
        "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
        "  </clipPath>\n",
        " </defs>\n",
@@ -4979,7 +4951,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 36,
    "metadata": {},
    "outputs": [
     {
@@ -4991,7 +4963,7 @@
        "((P(Y | X, Z) / Sum[Y](P(Y | X, Z))))"
       ]
      },
-     "execution_count": 35,
+     "execution_count": 36,
      "metadata": {},
      "output_type": "execute_result"
     }
diff --git a/notebooks/Make Counterfactual Graph.ipynb b/notebooks/Make Counterfactual Graph.ipynb
index 85ff33c..478905e 100644
--- a/notebooks/Make Counterfactual Graph.ipynb
+++ b/notebooks/Make Counterfactual Graph.ipynb
@@ -7,7 +7,28 @@
    },
    "source": [
     "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
-    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Make-counterfactual-graph\" data-toc-modified-id=\"Make-counterfactual-graph-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Make counterfactual graph</a></span></li><li><span><a href=\"#Walkthrough-of-make-counterfactual-graph\" data-toc-modified-id=\"Walkthrough-of-make-counterfactual-graph-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Walkthrough of make counterfactual graph</a></span></li><li><span><a href=\"#ID*-algorithm\" data-toc-modified-id=\"ID*-algorithm-3\"></ul></div>"
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Make-counterfactual-graph\" data-toc-modified-id=\"Make-counterfactual-graph-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Make counterfactual graph</a></span></li>\n",
+    "    <li><span><a href=\"#Walkthrough-of-make-counterfactual-graph\" data-toc-modified-id=\"Walkthrough-of-make-counterfactual-graph-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Walkthrough of make counterfactual graph</a></span></li>\n",
+    "    <ul>\n",
+    "    <li><span><a href=\"#Starting-graph-(Figure-9a)\" data-toc-modified-id=\"Starting-graph-(Figure-9a)-3\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Starting graph (Figure 9a)</a></span></li>\n",
+    "    <li><span><a href=\"#First-Step:-Make-Parallel-worlds-graph\" data-toc-modified-id=\"First-Step:-Make-Parallel-worlds-graph-4\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>First Step: Make Parallel worlds graph</a></span></li>\n",
+    "    <li><span><a href=\"#Merging-the-Parallel-Worlds\" data-toc-modified-id=\"Merging-the-Parallel-Worlds-5\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Merging the Parallel Worlds</a></span></li>\n",
+    "    <li><span><a href=\"#Figure-11a-Checkpoint\" data-toc-modified-id=\"Figure-11a-Checkpoint-6\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Figure 11a Checkpoint</a></span></li>\n",
+    "    <li><span><a href=\"#Merging-nodes-with-different-parents\" data-toc-modified-id=\"Merging-nodes-with-different-parents-7\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Merging nodes with different parents</a></span></li>\n",
+    "    <li><span><a href=\"#Figure-11b-Checkpoint\" data-toc-modified-id=\"Figure-11b-Checkpoint-8\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Figure 11b Checkpoint</a></span></li>\n",
+    "    <li><span><a href=\"#Figure-11c-Checkpoint\" data-toc-modified-id=\"Figure-11c-Checkpoint-9\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Figure 11c Checkpoint</a></span></li>\n",
+    "    <li><span><a href=\"#Return-only-the-ancestors-of-events\" data-toc-modified-id=\"Return only the ancestors of events-10\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Return only the ancestors of events</a></span></li>\n",
+    "    <li><span><a href=\"#Figure-9c-Checkpoint\" data-toc-modified-id=\"Figure-9c-Checkpoint-11\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Figure 9c Checkpoint</a></span></li>\n",
+    "    </ul>\n",
+    "    <li><span><a href=\"#ID*-Algorithm\" data-toc-modified-id=\"ID*-Algorithm\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>ID* Algorithm</a></span></li>\n",
+    "    <li><span><a href=\"#ID*-Walkthrough\" data-toc-modified-id=\"ID*-Walkthrough\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>ID* Walkthrough</a></span></li>\n",
+    "    <ul>\n",
+    "    <li><span><a href=\"#ID*-lines-1-through-4\" data-toc-modified-id=\"ID*-lines-1-through-4\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>ID* lines 1 through 4</a></span></li>\n",
+    "    <li><span><a href=\"#ID*-line-6,-calculate-the-C-components\" data-toc-modified-id=\"ID*-line-6,-calculate-the-C-components\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>ID* line 6, calculate the C-components</a></span></li>\n",
+    "    <li><span><a href=\"#ID*-line-6,-get-the-markov-pillow-of-each-C-component\" data-toc-modified-id=\"ID*-line-6,-get-the-markov-pillow-of-each-C-component\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>ID* line 6, get the markov pillow of each C-component</a></span></li>\n",
+    "    <li><span><a href=\"#Recursive-calls-for-each-C-component\" data-toc-modified-id=\"Recursive-calls-for-each-C-component\"><span class=\"toc-item-num\">&nbsp;&nbsp;</span>Recursive calls for each C-component</a></span></li>\n",
+    "    </ul>\n",
+    "    </ul></div>"
    ]
   },
   {
@@ -20,7 +41,6 @@
     "$$\\newcommand{\\ubar}[1]{\\underset{\\bar{}}{#1}}\n",
     "\\newcommand{\\obar}[1]{\\overset{\\bar{}}{#1}}$$\n",
     "\n",
-    "\n",
     "**Lemma 24** Let $M$ be a model inducing $G$ containing variables $\\alpha,\\beta$ with the following properties: \n",
     "* $\\alpha$ and $\\beta$ have the same domain of values.\n",
     "*  There is a bijection $f$ from $Pa(\\alpha)$ to $Pa(\\beta)$ such that a parent $\\gamma$ and $f(\\gamma)$ have the same domain of values. \n",
@@ -71,11 +91,19 @@
     "    lemma_24_holds,\n",
     "    is_pw_equivalent,\n",
     "    has_same_function,\n",
+    "    # is_intervention_same_as_observed,\n",
     "    merge_pw,\n",
     "    is_inconsistent,\n",
     "    update_event,\n",
     "    parents_attain_same_values,\n",
+    "    is_not_self_intervened,\n",
+    "    value_of_self_intervention,\n",
     ")\n",
+    "import networkx as nx\n",
+    "from y0.graph import NxMixedGraph\n",
+    "import importlib\n",
+    "from y0.algorithm.identify.id_star import get_events_of_district\n",
+    "from y0.algorithm.identify.idc_star import idc_star\n",
     "from y0.graph import NxMixedGraph\n",
     "from y0.examples import (\n",
     "    figure_9a,\n",
@@ -86,7 +114,11 @@
     "    figure_11b,\n",
     "    figure_11c,\n",
     ")\n",
+    "from y0.mutate.canonicalize_expr import canonicalize\n",
     "from y0.dsl import (\n",
+    "    A,\n",
+    "    B,\n",
+    "    C,\n",
     "    X,\n",
     "    D,\n",
     "    W,\n",
@@ -100,109 +132,863 @@
     "    Variable,\n",
     "    Zero,\n",
     ")\n",
+    "from y0.algorithm.identify.id_star import (  # rule_3_applies,\n",
+    "    # get_district_interventions,\n",
+    "    get_events_of_district,\n",
+    "    get_events_of_each_district,\n",
+    "    get_free_variables,\n",
+    "    id_star,\n",
+    "    # id_star_line_4,\n",
+    "    id_star_line_6,\n",
+    "    id_star_line_9,\n",
+    "    get_cf_interventions,\n",
+    "    # intervene_on_district,\n",
+    "    # is_event_empty,\n",
+    "    get_evidence,\n",
+    "    is_redundant_counterfactual,\n",
+    "    # merge_interventions,\n",
+    "    remove_event_tautologies,\n",
+    "    # simplify_counterfactual,\n",
+    "    violates_axiom_of_effectiveness,\n",
+    ")\n",
+    "from y0.dsl import D, One, P, Sum, W, X, Y, Z, Zero\n",
+    "from y0.examples import (\n",
+    "    figure_9a,\n",
+    "    figure_9c,\n",
+    "    figure_9d,\n",
+    "    tikka_unidentifiable_graph,\n",
+    "    tikka_unidentifiable_cfgraph,\n",
+    "    tikka_figure_2,\n",
+    "    tikka_figure_5,\n",
+    "    tikka_figure_6a,\n",
+    "    tikka_figure_6b,\n",
+    ")\n",
+    "from y0.graph import NxMixedGraph\n",
+    "from y0.algorithm.identify.idc_star import (\n",
+    "    get_remaining_and_missing_events,\n",
+    "    get_new_outcomes_and_conditions,\n",
+    ")\n",
+    "from y0.examples import tikka_figure_2\n",
+    "from y0.algorithm.identify.cg import World\n",
+    "from y0.dsl import CounterfactualVariable\n",
+    "from y0.algorithm.identify.cg import extract_interventions, make_parallel_worlds_graph\n",
+    "from y0.algorithm.identify.id_star import id_star\n",
+    "from y0.dsl import _upgrade_ordering, _to_interventions\n",
+    "import matplotlib.pyplot as plt\n",
+    "from y0.dsl import Sum, P\n",
+    "from y0.algorithm.identify.id_star import id_star\n",
+    "from y0.algorithm.identify.idc_star import idc_star\n",
+    "from y0.examples import tikka_figure_2\n",
     "\n",
-    "x, y, z, w, d = -X, -Y, -Z, -W, -D"
+    "from matplotlib_inline.backend_inline import set_matplotlib_formats\n",
+    "from IPython.display import Latex\n",
+    "\n",
+    "set_matplotlib_formats(\"svg\")"
    ]
   },
   {
-   "cell_type": "markdown",
+   "cell_type": "code",
+   "execution_count": 2,
    "metadata": {},
+   "outputs": [],
    "source": [
-    "We illustrate the operation of make-cg by showing how the graph in Fig. 9 (c) is derived from the graph in Fig. 9 (a). We start the application of Lemma 24 from the topmost observable nodes, and conclude that the node pairs $D_x, D$, and $X_d, X$ have the same functional mechanisms, and the same parent set (in this case the parents are unobservable nodes $U_d$ for the first pair, and $U$ for the second). We then use Lemma 25 to obtain the graph shown in Fig. 11 (a). \n",
-    "Since the node pairs are the same, we pick the name of one of the nodes of the pair to serve as the name of the new node. In our case, we picked D and X . Note that for this graph, and all subsequent intermediate graphs we generate, we use the convention that if a merge creates a situation where an unobservable variable has a single child, that variable is omitted from the graph. For instance, in Fig. 11 (a), the variable $U_d$ , and its corresponding arrow to $D$ omitted. "
+    "x, y, z, w, d = -X, -Y, -Z, -W, -D"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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L7eRAU2aSCtX5uBJYmOljh2l994L87lFAEBuEAaQZRUr2pL/JZdILVrkcB/gDTdI334rrV0b9voAADlDGEC2lColJSXZ8n/79tI//5nNJ2jWTDr3XDueAADwBMIAsq1wYWnaNOmWW6QePaSXXsrGb86XT7r+egsDLBUAgCcQBpAj+fJJ48dL998vDR5sEwuz/L2dpQIA8BQmECLHYmKkp5+WypeXBg2yacOvvWZB4Yx+vVRQr15EagUAnB6dAeTawIHSW29JkybZCsCRI/b51FRp3Lhffn1C5lLB1KksFQCABxAGEBY33yzNmiUtXCi1aiXt2yd16yb162eB4HduuEHaupWlAgDwAO4mQFitWiVdc439/Mcf7WP16tJXX9mywglpadJ550l9+9paAwDAGToDCKuGDa0jkBkEJJtY+MUXv/nCzKWCjRtZKgAAx+gMIKxee026/faTPxcXJ/XpI40Z85svTkmRSpSwMHBS2wAAEEl0BhBWc+fax7i4X76/p6dLEyeeYiNh8eL2kSAAAE4RBhBW06dLa9ZIQ4dKl19u1xFIdrJg5MjffDEhAAA8gWUC5KmDB+2SwjFjbGph6dKuKwIA/BZhAACAgGOZAE61bNlSRYsW1YEDB3732I4dO1ShQgU1aNBAqampkS8OAP5n/vz5iomJOfEjX758KleunBISEvTGG28oIyPDdYm5QhiAU4MHD9aRI0f0+uuvn/T51NRUderUSaFQSO+//74KFSrkqEIAkNatWydJevHFFzVp0iSNHz9eAwcO1JEjR/SXv/xF7dq10/Hjxx1XmXMsE8CpUCikmjVr6ujRo/r6668V+78dh7feeqsmT56sRYsWqUmTJo6rBBB0PXr00LRp03To0CHFxcWd9NiDDz6op556Si+88IIGDx7sqMLcoTMAp2JiYjRo0CB9++23mjdvniTp5Zdf1sSJEzVixAiCAABPWLdunapXr/67ICBJjz76qEqVKqV//vOfDioLD8IAnOvRo4fKlSunkSNHatGiRRoyZIj69eunO+64w3VpAKBjx45p8+bNqlWr1ikfL1CggOLj47V58+YIVxY+hAE4V6hQISUmJiopKUldunRRw4YNNfJ3QwkAwI2NGzfq+PHjio+PP+3XxMbG+noTIWEAnpCYmKj8+fOrYMGCmjZtmgoUKOC6JACQJCUnJ0vSaTsDkrRv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",
+      "text/latex": [
+       "$X$"
+      ],
       "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
+       "-X"
       ]
      },
+     "execution_count": 3,
      "metadata": {},
-     "output_type": "display_data"
+     "output_type": "execute_result"
     }
    ],
    "source": [
-    "cf_graph_0 = figure_9a.graph\n",
-    "cf_graph_0.draw()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "![Figure9A.PNG](images/factual-world.PNG)\n"
+    "value_of_self_intervention(X @ -x)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We have two interventions here, D and X are being intervened on.  "
+    "We illustrate the operation of make-cg by showing how the graph in Fig. 9 (c) is derived from the graph in Fig. 9 (a). We start the application of Lemma 24 from the topmost observable nodes, and conclude that the node pairs $D_x, D$, and $X_d, X$ have the same functional mechanisms, and the same parent set (in this case the parents are unobservable nodes $U_d$ for the first pair, and $U$ for the second). We then use Lemma 25 to obtain the graph shown in Fig. 11 (a). \n",
+    "Since the node pairs are the same, we pick the name of one of the nodes of the pair to serve as the name of the new node. In our case, we picked D and X . Note that for this graph, and all subsequent intermediate graphs we generate, we use the convention that if a merge creates a situation where an unobservable variable has a single child, that variable is omitted from the graph. For instance, in Fig. 11 (a), the variable $U_d$ , and its corresponding arrow to $D$ omitted. "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "text/latex": [
-       "$P({Y}_{X} | D, X^*, {Z}_{D})$"
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:32.237312</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 93.076363 64.656 \n",
+       "Q 93.076363 73.056 93.076363 79.219932 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 97.076363 71.219932 \n",
+       "L 93.076363 79.219932 \n",
+       "L 89.076363 71.219932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 114.93179 86.188178 \n",
+       "Q 131.870992 89.855885 146.624768 93.0504 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 139.652421 87.448045 \n",
+       "L 146.624768 93.0504 \n",
+       "L 137.959476 95.266865 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 257.45465 142.333441 \n",
+       "Q 263.415745 145.494721 267.401372 147.608372 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 262.207774 140.32644 \n",
+       "L 267.401372 147.608372 \n",
+       "L 258.459667 147.394092 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 249.461897 138.487714 \n",
+       "Q 220.020697 123.455457 192.570994 109.44003 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 197.877028 116.640447 \n",
+       "L 192.570994 109.44003 \n",
+       "L 201.514948 109.515453 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 107.817906 124.758246 \n",
+       "Q 100.447134 128.307123 95.091065 130.885962 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.034341 131.019456 \n",
+       "L 95.091065 130.885962 \n",
+       "L 100.563826 123.811438 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 115.026154 136.12829 \n",
+       "Q 136.233899 140.256149 155.246767 143.956799 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 148.158346 138.502049 \n",
+       "L 155.246767 143.956799 \n",
+       "L 146.629915 146.354686 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 230.351894 148.656 \n",
+       "Q 230.351894 157.056 230.351894 163.219932 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 234.351894 155.219932 \n",
+       "L 230.351894 163.219932 \n",
+       "L 226.351894 155.219932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 209.116694 158.455658 \n",
+       "Q 204.872861 157.056647 202.752679 156.357713 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 209.098146 162.661287 \n",
+       "L 202.752679 156.357713 \n",
+       "L 211.602818 155.063484 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 128.370568 171.111029 \n",
+       "Q 117.868002 173.856118 109.528829 176.035754 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 118.280326 177.882722 \n",
+       "L 109.528829 176.035754 \n",
+       "L 116.257302 170.142737 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 107.655465 186.640058 \n",
+       "Q 127.7398 190.656066 145.631473 194.233636 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 138.571067 188.742675 \n",
+       "L 145.631473 194.233636 \n",
+       "L 137.00246 196.587384 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 266.599805 207.559564 \n",
+       "Q 256.510397 211.707782 248.489083 215.005712 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 257.40916 215.663147 \n",
+       "L 248.489083 215.005712 \n",
+       "L 254.367077 208.264111 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 224.580733 211.070502 \n",
+       "Q 208.086536 207.456398 193.776588 204.320894 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 200.735051 209.940484 \n",
+       "L 193.776588 204.320894 \n",
+       "L 202.447338 202.125877 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 85.715335 102.567768 \n",
+       "Q 85.317388 106.656036 85.715342 110.744304 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 81.955176 100.855082 \n",
+       "Q 68.819632 130.355889 77.539283 161.44941 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 82.695747 151.66451 \n",
+       "Q 81.620876 155.922388 81.435806 160.309956 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 166.935825 120.303762 \n",
+       "Q 167.235656 124.804573 168.465915 129.144347 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_18\">\n",
+       "    <path d=\"M 160.806915 118.32601 \n",
+       "Q 149.643671 148.468751 160.255995 178.809856 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_19\">\n",
+       "    <path d=\"M 148.351044 99.678646 \n",
+       "Q 146.783862 100.218245 145.269195 100.891312 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_20\">\n",
+       "    <path d=\"M 156.268903 115.364419 \n",
+       "Q 148.525336 128.22463 147.706704 143.213874 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_21\">\n",
+       "    <path d=\"M 168.109387 167.961494 \n",
+       "Q 166.769121 172.362451 166.390113 176.947295 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_22\">\n",
+       "    <path d=\"M 158.099911 155.479673 \n",
+       "Q 153.421992 159.363908 150.006415 165.456 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_23\">\n",
+       "    <path d=\"M 140.852482 133.330124 \n",
+       "Q 148.112468 140.375807 157.480544 144.195291 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_24\">\n",
+       "    <path d=\"M 129.233989 137.379072 \n",
+       "Q 130.999771 143.749071 134.477416 149.370551 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_25\">\n",
+       "    <path d=\"M 128.4539 137.412435 \n",
+       "Q 132.184075 165.349798 152.212862 185.180611 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_26\">\n",
+       "    <path d=\"M 155.969332 187.007547 \n",
+       "Q 160.856704 194.208179 169.748447 199.056 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_27\">\n",
+       "    <path d=\"M 237.697766 131.856 \n",
+       "Q 228.98483 138.052238 230.351894 148.656 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_28\">\n",
+       "    <path d=\"M 247.170689 151.277576 \n",
+       "Q 237.523647 155.491848 230.351894 165.456 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_29\">\n",
+       "    <path d=\"M 254.433246 165.284196 \n",
+       "Q 246.035568 178.200895 244.77437 193.555452 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_30\">\n",
+       "    <path d=\"M 229.497285 187.80022 \n",
+       "Q 230.508933 193.167956 232.791032 198.130633 \n",
+       "\" clip-path=\"url(#p8bec23f488)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m9db066319a\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"93.076363\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"93.076363\" y=\"81.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"170.666681\" y=\"98.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"237.697766\" y=\"131.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"269.37684\" y=\"148.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"127.968798\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"93.076363\" y=\"131.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"179.389904\" y=\"148.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"230.351894\" y=\"148.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"230.351894\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"150.006415\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"85.730491\" y=\"182.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"169.748447\" y=\"199.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"287.282404\" y=\"199.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9db066319a\" x=\"246.420989\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(81.076363 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(78.076363 86.97475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(159.466681 103.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${D}_{X}$ -->\n",
+       "     <g transform=\"translate(224.897766 137.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${Z}_{X}$ -->\n",
+       "     <g transform=\"translate(257.37684 154.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(121.068798 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(83.176363 137.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(173.189904 154.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(222.551894 154.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_10\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(223.451894 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_11\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${X}_{D}$ -->\n",
+       "     <g transform=\"translate(137.406415 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_12\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${W}_{D}$ -->\n",
+       "     <g transform=\"translate(70.130491 187.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_13\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(157.948447 204.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_14\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${D}_{D}$ -->\n",
+       "     <g transform=\"translate(273.882404 204.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_15\">\n",
+       "    <g clip-path=\"url(#p8bec23f488)\">\n",
+       "     <!-- ${Z}_{D}$ -->\n",
+       "     <g transform=\"translate(233.820989 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p8bec23f488\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
       ],
       "text/plain": [
-       "P(Y @ -X | D, +X, Z @ -D)"
+       "<Figure size 640x480 with 1 Axes>"
       ]
      },
-     "execution_count": 3,
      "metadata": {},
-     "output_type": "execute_result"
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "P(Y @ X | ~X, Z @ D, D)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "final_graph = make_counterfactual_graph(figure_9a.graph, {Y @ +x: +y, X: -x, Z @ -d: -z, D: -d})"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "cf_graph_1 = make_parallel_worlds_graph(figure_9a.graph, {frozenset([+x]), frozenset([-d])})"
+    "figure_9b.graph.draw()"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![Figure9B.PNG](images/parallel-worlds.png)\n"
+    "# Starting graph (Figure 9a)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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",
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:32.616484</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 64.656 \n",
+       "Q 135.031938 64.656 161.158884 64.656 \n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 153.158884 60.656 \n",
+       "L 161.158884 64.656 \n",
+       "L 153.158884 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 208.12347 64.656 \n",
+       "Q 236.486483 64.656 262.613429 64.656 \n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.613429 60.656 \n",
+       "L 262.613429 64.656 \n",
+       "L 254.613429 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 106.668924 215.856 \n",
+       "Q 135.031938 215.856 161.158884 215.856 \n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 153.158884 211.856 \n",
+       "L 161.158884 215.856 \n",
+       "L 153.158884 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 198.220444 197.285919 \n",
+       "Q 236.488614 140.254002 273.510877 85.078887 \n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.731836 89.493241 \n",
+       "L 273.510877 85.078887 \n",
+       "L 272.374936 93.950732 \n",
+       "z\n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 103.962892 75.307838 \n",
+       "Q 185.758683 114.876253 267.554475 75.309112 \n",
+       "\" clip-path=\"url(#p81aa7283f8)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"ma7f8e08e30\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <use xlink:href=\"#ma7f8e08e30\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma7f8e08e30\" x=\"185.76\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma7f8e08e30\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma7f8e08e30\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma7f8e08e30\" x=\"185.76\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(77.405455 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(175.86 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(281.014545 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p81aa7283f8)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(178.86 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p81aa7283f8\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -212,66 +998,307 @@
     }
    ],
    "source": [
-    "cf_graph_1.draw()"
+    "cf_graph_0 = figure_9a.graph\n",
+    "cf_graph_0.draw()"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "cf_graph_1 should be a stitched together graph of counterfactual worlds that corresponds to Figure 9b.\n",
-    "Now we will start merging nodes that are equivalent in the two graphs using the topological ordering of (X,D,W,Z,Y)"
+    "Every endogenous variable gets an exogenous variable, so there are some singletons pointing to the endogenous variables that don't have any bidirected edges."
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 7,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "# Does Lemma 24 hold for X and X @ D?  Then Merge them together.\n",
-    "if lemma_24_holds(cf_graph_1, {Y @ +x: +y, D: -d, Z @ -d: -z, X: -x}, X, X @ D):\n",
-    "    cf_graph_2, preferred_node, eliminated_node = merge_pw(cf_graph_1, X, X @ D)"
+    "<img src=\"images/factual-world.PNG\" style=\"height: 400px\" />\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We have two interventions here, D and X are being intervened on.  "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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56QGYPly6QtQqBDQubPUATRsyKWARERaYgGhpfnvP6BuXRlbnzQJABARIf87bx7g5ZXGYxITpW6gQAFTRoobN2Qp4PLlwJ49sjKyXTvJZVq1yiB5ISIik2IyYImmTJHJ9DSaEWnt3j1g3ToZBdixQ674/fxkBODttwEXF60jJCKi1DhNYImGDgV27pRmRGbg0SNZCrh8ueyo+OSJLAWcMwfo2BEoXFjrCImIKCMcGbBUT57IZbdGk+3x8XLlv2KFNAW6f1/2AejaFXj3XVkdQEREloHJAGWZXi9LAZcvl1qA27dlgUK3brIxUPnyWkdIREQ5wWSAMqSU7H2wYoX8u3hR1v2/954kATVrcikgEZGlY82AhXF3d8ft27czPKZv376YO3durl7nzJnkBOD4cZn379xZEoAGDSx+00MiInoOkwELkpCQgB9++CHN+2JiYjBy5Eg8fvwY7du3z9HzP3kCzJ4t0wD79knlf/v2wMSJsmiBSwGJiKwTpwmswOPHj+Hn54eQkBDMmjULAwYMyPFz1a0LvPSSjAC0acOlgEREtoDJgIVLTExEly5dsG7dOowZMwajR4/O8XPp9TI6kOYWyEREZLWYDFi4vn37Yv78+Rg4cCBmzpyZ7cdHR0fjv//+AwDUrFkTBQsWNGyARERk9lgzYME+++wzzJ8/H126dMH06dNz9BwhISH47bffoJRCdHR0jusNiIjIcrEm3EJNnz4dEyZMQIsWLbB06VLY5bC8X/fcukAd1wgSEdkkThNYoBUrVqB79+545ZVX8OeffyJ//vwvHBMWFoZmzZrh0qVLyJcvHwBg8ODBOHr0KP744w84OMigEKcJiIiIyYCFCQ4ORtu2bVG2bFn8/fffcHd3T/fYli1bon379hg4cCAWLlyI8ePHY//+/ShatKgJIyYiInPHZMCC7N27F82bN0fBggXxzz//wNPTM8Pjt27disGDB2Px4sVo06YN/vzzT9SoUcNE0RIRkaVgMmAhTpw4gYYNG0Kv12P37t2oUqVKlh5XrVo1nD17FkFBQejSpYuRoyQiIkvEZMACREdHo3r16rh06RICAwNRr169NI/z8PBAq1atnv3/48ePUb9+fTx69AjHjh0zVbhERGRhmAxYgG3btsHX1zfT43r27InFixc/+/+AgADExMQgNDQUGzZsSDeJICIi28ZkwEpNmjQJS5cuRWhoKCZPnozw8HCsWbNG67CIiMgMMRmwQlu3bsX777+PPXv2wMvLC7dv30bZsmURFhYGb29vrcMjIiIzw2TAykRERKBBgwZYvXo1mjRp8uzrgYGBcHBwyHGnQiIisl5MBoiIiGwc2xETERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTjmAwQERHZOCYDRERENo7JABERkY1jMkBERGTj/h/DuRwO9H7JTQAAAABJRU5ErkJggg==",
+      "text/latex": [
+       "$P({Y}_{X} | D, X^*, {Z}_{D})$"
+      ],
       "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
+       "P(Y @ -X | D, +X, Z @ -D)"
       ]
      },
+     "execution_count": 6,
      "metadata": {},
-     "output_type": "display_data"
+     "output_type": "execute_result"
     }
    ],
    "source": [
-    "# Next we merge D and D @ ~X\n",
-    "cf_graph_3, preferred_node, eliminated_node = merge_pw(cf_graph_2, D, D @ ~X)\n",
-    "figure_11a_calculated = cf_graph_3\n",
-    "figure_11a_calculated.draw()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "![Figure11A.PNG](images/step-2-make-counterfactual.png)\n"
+    "query = P(Y @ X | ~X, Z @ D, D)\n",
+    "query"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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",
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:33.162666</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 215.856 \n",
+       "Q 185.760943 215.856 262.616893 215.856 \n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.616893 211.856 \n",
+       "L 262.616893 215.856 \n",
+       "L 254.616893 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 164.706568 64.656 \n",
+       "Q 136.068228 64.656 109.665955 64.656 \n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 117.665955 68.656 \n",
+       "L 109.665955 64.656 \n",
+       "L 117.665955 60.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 107.422257 64.656 \n",
+       "Q 185.906039 64.656 262.153753 64.656 \n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.153753 60.656 \n",
+       "L 262.153753 64.656 \n",
+       "L 254.153753 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 287.145576 193.499921 \n",
+       "Q 286.981325 140.258615 286.823972 89.253366 \n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 282.848671 97.265669 \n",
+       "L 286.823972 89.253366 \n",
+       "L 290.848633 97.240988 \n",
+       "z\n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 267.084024 75.303437 \n",
+       "Q 200.275092 116.119569 188.991045 193.593122 \n",
+       "\" clip-path=\"url(#p5b03fd5504)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"mcb19180867\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"286.748088\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"187.066082\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"186.926144\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"85.064614\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mcb19180867\" x=\"287.214545\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(275.548088 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(175.066082 70.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(180.026144 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(70.064614 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p5b03fd5504)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(280.314545 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p5b03fd5504\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -281,18 +1308,357 @@
     }
    ],
    "source": [
-    "cf_graph_z, preferred_node, eliminated_node = merge_pw(cf_graph_3, Z, Z @ -d)\n",
-    "cf_graph_z.draw()"
+    "final_graph, event = make_counterfactual_graph(\n",
+    "    figure_9a.graph, {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}\n",
+    ")\n",
+    "final_graph.draw()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABuR0lEQVR4nO3deViUVRsG8HsAEUXEFffAPZfUXHIpRc2ttNwKc0HMTAOzRa0+s1KzLEsTV0xN3DVzT819D0VNxTVcEDV3RQREEJjz/fE4ArI4wMy8A3P/rotrdOZdDjDM+7znPOc5OqWUAhEREdksO60bQERERNpiMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBERGTjGAwQERHZOAYDRERENo7BABERkY1jMEBEJjFmzBjY2dnhzJkzaV7r378/7O3tsWHDBg1aRkTPwmCAiEzC19cX+fPnh7+/f6rnp06disDAQHz77bfo2LGjNo0jokzplFJK60YQUd4wYMAALFmyBJcvX0aJEiWwe/dutGnTBp07d8aKFSu0bh4RZYDBABGZzKlTp1C7dm2MHTsWPj4+aNiwIdzc3LB//34UKlRI6+YRUQYYDBCRSbVv3x7Hjx9HuXLlEBYWhkOHDqFy5cpaN4uIMsFggIhMavPmzejQoQPs7OywceNGtG/fXusmEdEzMIGQiEzKMJugUqVKDASIcgkGA0RkMtu2bcPw4cNRtWpVnD9/Hlu2bNG6SURkBA4TEJFJhIWFoVGjRqhUqRK2bduGatWqoX79+vjrr7+0bhoRPQN7Bogox2JiYtC5c2fky5cPq1evhqurK/z8/LB58+Z0ixARkXVhMEBEOaKUgre3N0JDQ7Fy5UqUL18eAODn55duESIisj4MBojIOBmMKI4ePRpr1qzBtGnT8PLLLz95vmTJkujTpw8WLlyIu3fvWqqVRJQNDAaIKHMnTgBffgnodGleWr16NcaOHYsP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",
+      "text/plain": [
+       "{Y @ -X: -Y, X: +X, D: -D, Y: -Y, Z: -Z}"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:33.678949</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 287.214545 187.816693 \n",
+       "Q 287.214545 190.655879 287.214545 191.258996 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 291.214545 183.258996 \n",
+       "L 287.214545 191.258996 \n",
+       "L 283.214545 183.258996 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 84.305455 87.016693 \n",
+       "Q 84.305455 115.055011 84.305455 140.857261 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 132.857261 \n",
+       "L 84.305455 140.857261 \n",
+       "L 80.305455 132.857261 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 256.224892 101.408563 \n",
+       "Q 241.227447 89.85497 228.001386 79.665999 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 231.897773 87.716972 \n",
+       "L 228.001386 79.665999 \n",
+       "L 236.779997 81.379474 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 255.780529 128.100507 \n",
+       "Q 238.857941 140.256318 223.751446 151.107596 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 232.582517 149.689081 \n",
+       "L 223.751446 151.107596 \n",
+       "L 227.915277 143.19163 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 84.305455 92.695307 \n",
+       "Q 84.305455 89.856121 84.305455 89.253004 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 80.305455 97.253004 \n",
+       "L 84.305455 89.253004 \n",
+       "L 88.305455 97.253004 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 84.305455 137.416693 \n",
+       "Q 84.305455 140.255879 84.305455 140.858996 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 132.858996 \n",
+       "L 84.305455 140.858996 \n",
+       "L 80.305455 132.858996 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 204.826968 143.119916 \n",
+       "Q 206.146974 115.053645 207.361929 89.220974 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 202.990507 97.024221 \n",
+       "L 207.361929 89.220974 \n",
+       "L 210.981674 97.40006 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 276.891051 196.021613 \n",
+       "Q 247.865368 140.25497 219.872058 86.47181 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 220.017424 95.414901 \n",
+       "L 219.872058 86.47181 \n",
+       "L 227.11375 91.721372 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 265.513651 210.465778 \n",
+       "Q 185.760865 190.656215 108.178204 171.385683 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 114.978033 177.196218 \n",
+       "L 108.178204 171.385683 \n",
+       "L 116.90653 169.432141 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 92.752296 85.362574 \n",
+       "Q 120.494074 142.964706 181.943928 160.615073 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 186.243803 62.71656 \n",
+       "Q 135.117664 62.017788 98.932819 98.142136 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 186.590643 69.047849 \n",
+       "Q 122.728775 85.872958 93.117127 144.903243 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 76.944427 136.167768 \n",
+       "Q 76.546479 140.256036 76.944433 144.344304 \n",
+       "\" clip-path=\"url(#p3a0c65e33b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m68c71955f6\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"287.214545\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"208.517263\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"273.940305\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"84.305455\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"203.776463\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"84.305455\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m68c71955f6\" x=\"287.214545\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(279.414545 170.97475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(74.405455 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(197.317263 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(261.940305 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(77.405455 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(188.776463 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(78.105455 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p3a0c65e33b)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(280.314545 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p3a0c65e33b\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -302,48 +1668,547 @@
     }
    ],
    "source": [
-    "# We no longer need to merge D and D @ D\n",
-    "cf_graph_4, preferred_node, eliminated_node = merge_pw(cf_graph_3, D, D @ D)\n",
-    "cf_graph_4.draw()"
+    "graph, event = make_counterfactual_graph(\n",
+    "    tikka_unidentifiable_graph.graph, {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d, Y: -y}\n",
+    ")\n",
+    "graph.draw()\n",
+    "event"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## First Step: Make Parallel worlds graph"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Here we make a parallel worlds graph based on the interventions. Since we have two interventions we create two parallel worlds, represented here by different colors (red for the x intervention and green for the d intervention). The \"parallel\" variables in each world are connected by unidrected edges."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "event = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}  # This is the original event we are using\n",
+    "# the input for make_parallel_worlds_graph is a graph and extracted interventions from an event\n",
+    "cf_graph_1 = make_parallel_worlds_graph(figure_9a.graph, {frozenset([-x]), frozenset([-d])})"
+   ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 11,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABx4ElEQVR4nO3dd1iT1xcH8G8AFUXc4t517611712ttlTbOmsdqHV2aftTq60d2rp3pe696t6AdU9wFQdacU8ElZ37++NrBGTISPJmnM/z8KBJSG40vO957z33HJ1SSkEIIYQQdstB6wEIIYQQQlsSDAghhBB2ToIBIYQQws5JMCCEEELYOQkGhBBCCDsnwYAQQghh5yQYEEIIIeycBANCCCGEnZNgQAghhLBzEgwIIYQQdk6CASGEEMLOSTAghBBC2DkJBoQQQgg7J8GAEEIIYeckGBBCCCHsnAQDQgghhJ2TYEAIIYSwcxIMCCGEEHZOggEhhBDCzkkwIIQQQtg5CQaEEEIIOyfBgBBCCGHnJBgQQggh7JwEA0IIIYSdk2BACCGEsHMSDAghhBB2ToIBIYQQws5JMCCEEELYOQkGhBBCCDsnwYAQQghh5yQYEEIIIeycBANCCCGEnZNgQAghhLBzEgwIYWbjx4+Hg4MDLl26FO++Pn36wNHREdu2bdNgZEIIeyXBgBBmNnDgQGTIkAFTp06Nc/uMGTPg6emJH374Ae3atdNmcEIIu6RTSimtByGEvenbty9WrFiBmzdvIleuXPD29kbz5s3RsWNHrFu3TuvhCSHsjAQDQmjgwoULqFChAiZMmICePXuiRo0acHNzw5EjR5A5c2athyeEsDMSDAihkVatWsHPzw8FChRAQEAATpw4gRIlSmg9LCGEHZJgQAiN7Nq1C61bt4aDgwO2b9+OVq1aaT0kIYSdkgRCITRi2E1QvHhxCQSEEJqSYEAIDezduxejRo1CyZIlcfXqVezevVvrIQkh7JgsEwhhZgEBAahZsyaKFy+OvXv3olSpUqhWrRp27Nih9dCEEHZKZgaEMKPnz5+jY8eOSJcuHTZu3IisWbPCw8MDu3btSrAIkRBCmIMEA0KYiVIK3bt3h7+/P9avX4+CBQsCADw8PBIsQiSEEOYiwYAQZjJu3Dhs2rQJM2fORL169V7fnjt3bnz66adYunQpHj9+rOEIhRD2SoIBIcxg48aNmDBhAgYMGIB+/frFu3/48OEICwvD3LlzNRidEMLeSQKhEEIIYedkZkAIIYSwcxIMCCGEEHZOggEhhBDCzkkwIISp6fVp+vHoaCA01EhjEUKIBEgwIIQp3b8PzJvHP6cyKFi2DGjYEHjxwojjEkKIWCQYEMKURowAvvgC6NED0OmS9zPR0fweEQEAqFEDuHQJ6NsXkL0/QghTkGBACFPZvRtYsQKIigJ6905+MBAVxamA//0PAFC+PODpCaxaBUiRQiGEKUgwIIQphIYCAwYAGTIAnToBTZok/2czZABq1wbmzAGePQMAfPgh8OWX/PLyMsmIhRB2TIIBIUzhxx+BmzeZJzB5csp/fvhwICwsJt8AwE8/AY0aAe7uwK1bRhyrEMLuSQVCIYztwgWgalUu8I8YAfzyS+qep29fYPt24Pp1zhYAePiQOQR58wI+Pq9vFkKINJGZASGMSa/n8kDGjEC2bMCYMal/ri+/BO7dA5YufX1T7tzA+vWAry/zEoUQwhgkGBDCmBYtAv75BwgJYQJgliypf67SpZlv8OuvMTsMwJmBOXOA+fOBhQvTPmQhhJBlAiGM5ckT4J13AFdXwMEB+PfftM/jHzsG1KkDrFsHdOkS566BAxl7HDwI1KqVtpcRQtg3CQaEMJZRo3jJ/vIlp/Y//dQ4z9usGfDgAXD2LODo+Prm8HCgcWMmE546Bbi5GeflhBD2R4IBIYzhv/+AUqWAfPm4NHDmTJwTd5ocP86thp6eQK9ece66fRuoVg0oVw7YswdwcjLOSwoh7IvkDAhhDN9/D7i4MCiYNMl4gQDANYAPP+RrvNGkoEABYO1aLhV8843xXlIIYV8kGBAirc6eZQMBFxegfn2gbVvjv8aPPwJ37wIzZ8a7q2FDYMoUfq1ebfyXFkLYPlkmECKtWrUCzp3jyfqff4B69UzzOh4ewMqVQEAAkD17nLuUYorCpk3MOaxQwTRDEELYJgkGhEiLvXuBFi2APHk4nf/336Z7rXv3uFvBw4PbDd/w8iVQty6/nzjBMgdCCJEcEgwIkVp6PTf9P3vGq3U/P6BiRdO+5tixrGh45QpQqFC8uwMCgOrVuVqxeTN3OAohxNvIoUKI1Fq1irsGgoKA7t1NHwgA3L6YJQuDggQUL85Gidu2ARMnmn44QgjbIDMDQqRGeDhQpgzLDl+9Cly+DBQtap7XnjkTGDqUNYkTSQ6YOJEFELdsAdq1M8+whBDWS4IBIVLjjz94lZ4pE9CnDzBtmvleOyKChQXKluXZPgF6PfD++4C3N3DyJFMNhBAiMRIMCJFSQUFAiRJA4cJcuw8IMH/5v9Wrga5debZv2DDBhzx7BtSsyYrIR49y56MQQiREcgaESKlffgHCwoBr19ihUIs6wB9+yEzBr7/mvsIEZM0KbNzIDsh9+yb6MCGEkGBAiBS5dQuYOpXbCCMigJEjtRmHgwODkqNHecZPRPnyrGK8ahWHLYQQCZFlAiFS4rPPuGdPKeCjj4DZs7UdT+vWvPS/cCHJxgRffQX8/jvLIjRubL7hCSGsgwQDQiTX+fNA5cpAx44sLnT1qvl2ECTm7FmgalVg7lygf/9EHxYVFVMo8fRpoGBB8w1RCGH5JBgQIrnatwcuXWK+QIsWwF9/aT0i+vRTYN8+BidJZAk+fMg0g3z5AB8fJhYKIQQgOQNCJI+3Nyv5NGvGHgSW1CJw4kTgyRPgp5+SfFju3MCGDSxP8MUXZhqbEMIqyMyAEG+jFFCnDhAdzZNu9ersG2xJxo8HJkxgUYEqVZJ86KJFTH1YsIC7DIQQQoIBId5myxbgvfeA0aN59X36NNfpLUlEBPskODmxbWG6dEk+fOBABgUHD3JjhBDCvkkwIMTbNGnC8sPPnjFhcNs2rUeUsBMnOIMxcSLw7bdJPjQ8nLsKbt0CTp3SplSCEMJySM6AEEk5exbw8gLefRe4eBEYM0brESWuZk3WPRg/Hvj33yQfmiEDsG4dJxS6duVuAyGE/ZKZASGS0qsXsH8/s++yZAEOHNB6REkLDeX2x9y5uWXA0THJh/v4AE2bAsOHA7/9ZqYxCiEsjswMCJGYe/eAlSuBli2ZJzB6tNYjeruMGYGFC4HDh4FZs9768IYNgSlTgMmT2e5ACGGfZGZAiMSMHcszZdWqXGQ/dgzQ6bQeVfIMGsQ6COfPA8WKJflQpViqYNMmvsVEuiILIWyYBANCJCQsjF0JmzVjYf+VK7m4bi1CQnhWL1UK2L37rUHMixdMi3j5knmIISHccfDZZ2yFLISwbbJMIERCVqxgyT6lgPz5gS5dtB5Ryri6AvPnsxmBp+dbH+7iwoJEjx4Bbdow7WDbNmDpUjOMVQihOZkZEOJNSvFsmD8/M+xGjwa++07rUaVOr16c/794ke8nCUoB/fox5UCn49/z5mXBRSGEbZOZASHetH8/O/oUKcKqg/36aT2i1Pv9d8DZGfDw4Nk9EdHRXAVZuJB/Nzz03j3g/n0zjFMIoSkJBoR409SpQKVKwM6dPENac0WeHDnYZnnzZmDNmkQf9ugRCy0mlFpw4oQJxyeEsAgSDAgR2+XLwNat3HN386ZtdPTp3Jk5D0OG8KyfgDx5gBs3uCKSOXPcoODQIfMMUwihHckZECK2wYPZhKhMGZbls5Uz4b17QLlyzA5cvjzJhwYHA/PmAZMmAU+fsgLz9evmGaYQQhsSDAhh8PQpULAg0KMHMHcutxR+9JHWozKeJUuAnj25bSAZ+wXDwlhqwdXVevMnhRDJI8GAEAa//caz3ocfsuzwjRtv7f5nVZTicsH+/Wx1/M47Wo9ICGEhJBgQAuCSQPHiQP363IpnzdsJk/LsGRsaOTsDR48CmTJpPSIhhAWwmgTC8ePHw8HBAZcuXYp3X58+feDo6IhtltpaVli+DRuAwEBm0ln7dsKkZM3K93rtGtC/f5LbDWPz9PSETqfD8ePH49yulELJkiWh0+lw+vTpOPdFR0ejYMGCaNq0qdGGL4QwDasJBgYOHIgMGTJg6tSpcW6fMWMGPD098cMPP6Bdu3baDE5Yvz/+ABo35omyWzfr3k74NhUqsKDAsmXcdpgMWbNmBQAEBwfHuX337t24evVqgvf9/fffuH37Njw8PIwwaCGEKVlNMODm5oZPPvkES5cuxaNX26O8vb0xYsQIdOnSBWMsuc+8sGxHj/Krbl1uJxwyROsRmV63bsDQocCwYexw+BaJBQNz5sxBuXLlEr0vf/786NSpk1GGLIQwHasJBgBg+PDhCA0Nxdy5cxEYGAh3d3eUKVMGf/31l9ZDE9Zs+nSgRAnAzw+oUQOoXl3rEZnHb78BtWszYfItZQYNwUBISMjr2wIDA7F161aMGDECTk5Oce67evUq9u7di88//xxOTk6mGb8Qwmis6re0fPnyaNmyJWbNmoVNmzYhMjISmzZtQubMmVP8XEFBQTh79iwAoEqVKsiWLZtxByusw/PnTBgcMQL4+WcGBuamFFskP38ORETw73p9zPfYf07oPgcHIGPGuF/p07+93XK6dKypUK0at1Du3QskcuLOkiULgLhX//Pnz0eWLFnw8ccf48svv4xz39y5c+Ho6Ih+tpp7IYSNsapgAABGjBiB1q1b48GDB9i+fTtKlCiRqufx8vLCli1boJRCUFCQTGXaqy1bgNBQnlSdnDh9nlJ6PWsUGAr5G74HB7MX8PPn/DL8OaHv0dHGfV86XfwA4c2vrFmB7NmBFi2YP9C+PRMn27Th/bG8uUwQGRmJhQsXok+fPsiYMSNcXV1f3xcWFgZPT0907NgR+d/SHEkIYRmsLhgw7CYoXrw4WrVqlern0cW6atK97QpK2K7Vq4FatVi7v1MnnhwN9Hrgzh0gIICt+wwn+jdP+vfvc2tibC4uPNm6urK+r+F7njxckoh9m+F75sy8ondw4MncwSHun9/8bvizXs+A5s2vly8Tvt1w3717wL//MpDJkAHYtQvw9maA8oY3g4ENGzbg/v37GDhwIADECQbWrFmDJ0+eYNCgQcb//xJCmIRVBQN79+7FqFGjULJkSVy5cgW7d+9Gy5Yt4z3O19cXTZs2RWBgIDK92kc9ZMgQnD9/Hnv27IGTkxMaNWr0+gBXpUoVc74NYSmePQO2b2czoqVL2Y9g6FCe/K9d4/fw8JjHOzuzp2/evDyp16zJ74a/x77PxUW795UaSnGp4OpVwNEx3t3Ozs5Inz7967yAOXPmoHXr1q9n5lxdXePcV7ZsWTRp0sR84xdCpInVBAMBAQH46KOPULVqVezduxelSpXCH3/8kWAwULlyZVSrVg2enp4YNGgQFi1ahK1bt+LEiROvk5myZcuGxo0bm/ldCE0oxSt7X1+2Jr58mSd7Pz8gMpKBAAB4egLFivHKvUULfi9RgsWIChTgFbytziLpdMCiRUD37ok+JEuWLAgODsbFixfh7e0dp66HYWbA19cXR48exXQtci+EEKlmFRUInz9/jrp16+Lhw4c4efIkChYsiPHjx2P8+PG4cOECypYtG+9ndu7ciSFDhmDx4sVo3749Dhw4gMqVK2swemFW4eHAxYs80fv68svPL6Zbn6srUKoUT/KnTjFQuH8f6NWLyYMOVrXBxviuX2dAlIB33nkH5cqVQ5EiRbB9+3ZcuXIFDq/+vbp06QKlFNzc3LBs2TLcuXPnddKhEMLyWXwwoJRC586dsW3bNhw4cAD16tUDADx8+BCFCxdGjx49MG/evAR/tmLFiggICICnpyfc3d3NOWxhDg8fAqdPxz3p//tvzPp9iRJApUpA5coxX0WK8IT/5Amn8z/9FPjrL8Dfn0GCYICUwAxI9erV4eDggMuXL+P777/HqFGjXt/Xq1cvXLp0CRcvXsTHH3+c6O+kEMIyWfwywbhx47Bp0ybMmzfvdSAAALlz58ann36KpUuX4qeffkLOnDnj/Fx4eDgyZMiAokWLSiBgC/R6nugPH2Zb4UOHgCtXeJ+LC0/69esDHh486VesyFmAxGzcyAz+GzeAd9+VQCC2RJZCsmbNigMHDiBjxozo06dPnPtcXV1flyqWioNCWB+LnhPduHEjJkyYgAEDBiS4X3n48OEICwvD3Llz493Xr18/FCpUCI8ePcKRI0fMMVxhTC9fMrP9p5+45S1XLqB8edbTP3sWaNkSWL6cAUFwMIOEOXOAgQN5ck8qEAC4i6BOHb5G795meUtWJYEJQ0PCbbdu3ZAjR44497m++vd+9913ZTlOCCtk8csEqTF58mQsXboUhw8fxpQpU+Dn54d169ZpPSyRlMeP2TbYcNV/5gyn+11dedKuV49ftWoBaV2LfvgQyJePQcbu3dxiJ+vbQgg7ZvHLBCm1c+dOTJ48GUePHoWLiws8PDxQrFgxBAQEoHjx4loPTxhERbEfwK5d/Dp5klejRYvypN+7N6/wK1RIcKtbmqxfz+9+fkCXLhIICCHsnk3NDPj7+6N+/fpYu3ZtnG2DHh4ecHJyku1OWrtxI+bkv28fp/dz5OA2vlat+L1gQdOPo0kT4MUL4MQJjkNa7Aoh7JxNBQPCwrx4AXh5xQQAly/zKr9OHZ78W7ViUyBjX/kn5e5d1gxo1Ii1Bm7ckO2EZpTIRgUhhMZsbplAaOzBAzb+Wb+egUBEBLfztWoFTJrEq3Atm0KtW8fg4+JFbiuUQCBJkZE8eRuj8WB0NHeCRkWxW7QQwnLIzIBIuzt3uFVv3TrAx4dnj8aNgffeA1q3BkqWtJzLwfr1eVY6epQ7EOSslCi9Hvj4Y+DLL9nYMK3/hVFRQMeOzBPduJHxoRDCMshlkUidmzeBP/7gybVgQWDYMNbunz+f2fl79wJffMH9+5YSCAQGcqeCqyuXCmrX1npEFu2337gD88ED4/wXOjkxXmzWDOjQgd2ThRCWQZYJRPJdu8bp/3XrmHyXIQMv7/76i0f32B3/LNHatewKeP488OGHskSQBB8fYMwY4Ntv2dE4Hr0+Vf9+GTMCGzaw+nPXruwV1bdvmocrhEgjWSYQSXv4EFixAli8mHv/M2YE2rYFPvgAaNfu7cV9LEnt2gxgDh7k2a5BA61HZJHu3weqVuWkzt69SeQLPHnCNs2pSADV64EhQ4DZszkDEauysRBCAzZ3aTRiBPD551qPwspFRgJ//w28/z6QPz8XjYsV44zAw4f83rWrdQUC168Dx49zzHnzsoaBiCc6mnkCej2wcuVbEgdz5AB+/x0oXZrVIFPAwQGYORMYPZofrzFjEix6KIQwE5tbJrh7l+crkQrnznHKf9kyLhRXrcqDfbduLAdszTZuZE6Dnx/QubN5tzNakfHjuQlk714WaXyrUaP4Wfn0U0YSPXok+7V0OuDHH7m69OWXwNOnDBBk9UYI87O5YECk0OPHvAT86y+29M2dmwf2nj3Z8MdWeHmxmuHJk1ziEPHs2gVMnAhMmMC6TMmi0wG//sozeZ8+XDbo2DFFrztqFAOCfv2YQ/DXX0C6dCkevhAiDWwuZ6BbN84M7N2r9UgsWHQ0j/yenlwO0Ou5/t+7N7PF0qfXeoTGFR0d0+jo8mVuhTTGxnkbEhjIiaBatYCtW1NxdR4dzaWjzZuZX9KtW4rHsG4dlyhatmSuZ8aMKX4KIUQqyYScPQkK4rR/qVI8+fv7Az//DNy+zUJBHTvaXiAAcPdAUBAQEMA8CAkE4oiMBD76CMiUCVi6NJXT9I6OTDTt1o1n9KlTU/wUH3wAbNnCOgStW7NatRDCPOSoaA8uXuRi7OLFPPK7u/PAXauW5dQAMCVvb847370rSwQJ+Pprrp74+AA5c6bhidKl4xx/3rzA8OGsNzFpUoo+Y61aAXv2cMNKkybAzp1cuRJCmJYEA7YqOhrYvh2YPp1rJnnyAF99BfTvz4O1PfHx4Xt+8YKVEcVrGzeydtTUqWwZkWY6HfDLL8w+NAQECxakKAng3XcZv7VsCTRsyODAHP2rhLBnskxga2IvBbz3HhASwm1fN28CY8faXyCgFIOBly+BTp0kMy2Wa9dY/KdLFxaLNKphw/i5W7GC/+4vXqToxytXBv75BwgNZUfrK1eMPD4hRBwSDNiKS5cADw+W2f3mG15eHTvGGvwff2ybuQDJ8e+/zCh9/JhVEgUAICyMRRjd3IA//zTRatHHHzMb0dubNYgfPUrRj5csyYAgUyZWvfb1NcEYhRAAJBiwfidO8MqrXDnO+X71FWcBli5lToC98/ZmRpyjIzsmCgDA0KFMJVm7lrsBTaZlS27rDAjgGf2//1L04wULcmKnUCF2nT50yDTDFMLeSTBgrXx8mG1VqxZnBTw9eaC1x6WApHh782xXrx6QJYvWo7EIy5axn9TMmUCVKmZ4wRo1eBaPiOCM1blzKfrx3LmB/fs51hYtuCtWCGFcEgxYE6WYXt2gAS+T7t1jW7mLF7n4a69LAYkx5As8fy79cl+5cIE5pD16AJ99ZsYXLlmSLaPd3Pj5PXgwRT+eJQuwY4d0PBTCVCQYsAZ6PZcAatZkUSBD74CzZ7lNUErrJuzaNRYYiozkxnU79/w58wSKFWODILPvKs2blzM11arxEn/TphT9uKHj4Ycfsr7RwoWmGaYQ9kiCAUsWFcVs7EqVWE/f1ZXbBI8c4eWRPdQISAsfH37PmdNM8+GWSynOCAQGstKfi4tGAzFc4r/3HrcxzJ+foh9Pl47pMAMGsCHZ5MkmGqcQdkbqDFiiqChgyRLgp594ddu2LQ+a0mkvZby9eTnZurXdd7+ZP59x5cqVQJkyGg8mQwYOZOhQRij37gHff5/s4NbQ8TB2g6OJEyU2FiItJBiwJEpxOWDMGG6J69wZWLOG06oi5Q4c4EZ1O18iOH2adQQ8PDi9bhEcHYEZM1ic6LvvmAQ7f36y22LrdAwAsmdno6OgID6dncd8QqSa/OpYCm9voG5dTp0WLswOguvXSyCQWjdvck4c4PY2OxUUxArMFSuyFpVF0ekY+K5ezXoENWuyj0QKjBzJ3IG5c4Hu3ZkeIoRIOQkGtObry2WAxo1ZQnjvXu6dkiAgbQz5AhUrMoPdDinFRpRPnzL7PkMGrUeUCHd3NkdIn55bZRcvTtGPf/YZ44m1azmZFhpqonEKYcMkGNDK9evAp5+yb+zVq1wOOH6ce6dE2nl5cSq6fXutR6KZ339nwv7ixdxBYNFKl2a1zK5duU22b98UndUNHQ/37+eGG+l4KETKSDBgbg8fMnGqdGlg3z5gzhxu/v7wQ8mAMqa9eznTYqf1BQ4dYjfCL79k4r5VyJQJWLSIX8uXs3NSCpoSGDoenj3LjocPH5puqELYGgkGzOX5c2D8eKB4cbZ5HTeOMwL9+0vzHGO7e5fVGDNkYB6GnXn4EPjoI771H3/UejSp0Ls3+2qEhQHVq3MvZDIZOh7eusWOh7dumXCcQtgQCQZMTSluoypdmlsF+/dnnfbRozXc7G3j/vmH3xs2tLuqjNHRXH2KiABWrbLiOLNSJfbdaNOGs2ZDh/JNJUPsjof160vHQyGSQ4IBU/LzY2Lgxx8DtWsD/v6skpIzp9Yjs22G9nZ2uIvgxx85Vb5iBRtYWrUsWRjRzJjB5bQGDZLd6MjQ8TBjRv6YdDwUImkSDJjC06fc2F21KvDgAbB7N+uoFi2q9cjsw/Hj/F6/vrbjMLO9e7n6NG4c0Ly51qMxEp0OGDyYZ/b797nLZtu2ZP2ooeNhwYLS8VCIt5FgwJj0ejaHL1WKXQR/+YWXJC1aaD0y+3LxIncS2NH2zNu3OQHVvDm37tucWrVYPendd7lDZPRoVup8C0PHw8qVpeOhEEmRYMBYjh9n9nPfvqx45+/P0mh2tmatOb2e5W0LF7abf/vISO7IS5+eSfg227cqRw5g82YG2b/+ysjn7t23/liWLGz2KR0PhUicTQQDSvFi0M+PFddCQvjn8+d5bjCphw8ZANSuzQSngwfZSSV/fhO/sEhQYCCz6KpX13okZjNmDHtXrV7NK2Gb5uAAfPUVL/cvX2ai4fLlPAgkQToeCpE0mwgGNm0CypfnVODOnbxIr1yZxedM9ksfHc1uKaVK8SgzaxZLCNvZOrXF8fbmdztZmvn7b+C333ixXK+e1qMxo4YNWVCgWTNun2jTBrhxI8kfkY6HQiTOJoKBBg0Y+b/J0dFE54SLF3nS/+ILXmpcvswuMDY7P2tF9u3j906dNB2GOVy/DvTsybc6YoTWo9GAmxt3G2zZwsJd5cuz7GISuQSGjoejR7Mg05gxb51UEMIu2EQwkCsXMGxY3I5ljo6samrUMqwREcCECdwl8PQplwTmz+cAhGU4dYqL5zbejyA8nCX9c+RgrqpdF69s354B+mefMU+nbt0k9xLqdNyC+dtvLP0xeLAZlhOFsHA6pWwjLn70iDljhnLmjo4sNmK0YODkSR5sLlxgndfvvwecnY305MJoMmdmcPaWKWNrN2gQl8COHLGrTRNvd/Qo1wAuXWJgMHZswtOGryxcyDpgXbuyMKihSFNEBODkJC2Rhf2wmY+6YXbAcIVktFmBly+ZsFS7NiOMkyd5WSGBgOUJCgJevOB0sQ1btQqYPRuYNk0CgXjq1OHs0LhxwB9/MHFo//5EH963b/yOh9eu8cJi9GjzDVsIrdnMzADA2YG8eZnbFxBghGDA25tHi8BA9hUYOZKXC8IybdzII/rPP3P2xgb9+y9QowbQsSOwbJmdLw+8jb8/0K8fKw/17s2MwRw5Enzorl3A++8z8fjmTeDOHSBrVtYMs5MdqsLO2czMAMDZgbFjeSGfpkDg2TOmHDduzOjC15cnFwkELJuhMl2DBtqOw0RevGCr3sKFgXnzJBB4q9KlgQMHmNezYQNQtiynVRK4/mnViv2Qjh9nIADwMLB9u5nHLIRGbGpmwCi2beMi4rNn3K81YIAsHFqL8uWZSPb4caJXgNZKKS59rVvH/j3lymk9Iitz9y53/6xbB7Rrx3WWwoVf3x0SwpLFfn6cWQS4Kti2LbdvCmHr5Cxn8OwZj7bt23Od8cIFbheUQMA66PVsCe3iYnOBAAAsWgQsWcIZAQkEUiFfPiYGbNrE+gTlygHTp78+80+eDJw5ExMIAPzztm2sKyaErZMzHcDcgEqVOJXo6cm5wVhXDcIKBAQwBdwGm0H5+nL7W79+rK8j0qBjR84e9ezJjOOaNYEDBzBoEDBxIv8ae/lFr5fiRMI+2HcwEBbGyiNNmvAk4ufH2QFZjLU+hn3llStrOw4je/aMeQJlynD3gDCCLFlYMfTwYSBDBqBpU7h91gFjOl/C8eNsjrh4MfsYODjwYULYOvsNBpRi5cAFC9j0ZP9+m7yqtBtnzzKIq1JF65EYjVIsbfHgAZe6ZTerkdWpwzP9mjVcFqxYEfDwQG71AD16MFcgIoKbEYSwdRYdDHh6ekKn0+G4oT/9K0oplCxZEjqdDqdPn45zX3R0NAoWLIimTZsm/eQ6HRPOrl5lcRIpJWzdjh3j2bN0aa1HYjTTpwPr13PlqkQJrUdjo3Q6lhS/dIkXBStXAu+8A0yaBISGwtEx4YnCFi1awMXFBUFBQfHuu337NvLly4caNWogLCzM9O9BmMWuXbug0+lefzk5OcHNzQ3NmzfHX3/9Bb2Vl7G06GAga9asAIDg4OA4t+/evRtXr15N8L6///4bt2/fhoeHx9tfwNFRSgnbCsMygY0EA0ePMkYdPpylE4SJZcjABg9Xr3I6ZuxYoEePRB8+YsQIvHz5EosWLYpze1hYGN5//30opbBp0yY4y3SOzfB9dYz5/fffsXTpUixcuBDDhg3Dy5cv0bt3b3To0AGRkZEajzINlAXbu3evAqDWr18f5/aOHTuqcuXKKQBq8+bNce5r0aKFyp8/v4qMjDTnUIWWnj5VClDK0VGpiAitR5Nmjx4pVaiQUnXr2sTbsU5Xrih19apSUVEJ3q3X61W5cuVUiRIlVHR09Ovbe/bsqdKlS6cOHjxorpEKM/nkk0+Us7OzikrgMzF69GgFQE2ZMkWDkRmHVcwMhISEvL4tMDAQW7duxYgRI+Dk5BTnvqtXr2Lv3r34/PPP4SQFguyHnx+/588fU1zeSun1QPfurIK9erXVvx3r9c47XJtJZPlQp9Nh+PDhuHbtGnbs2AEAmDZtGhYvXozp06ejvrQytzm+vr4oW7YsHBP4TIwdOxbZsmXD8uXLNRiZcVh0MJAlSxYAcZcC5s+fjyxZsuDjjz+Gq6trnPvmzp0LR0dH9OvXL9mvERQUBC8vL3h5eSW4/iesgK8vF3bz5dN6JGn288/Azp3A8uVAoUJaj0Yk5dNPP4WbmxtmzJiB/fv3Y9SoUejXrx8GDBig9dCEkUVERMDf3x+VKlVK8P706dOjYsWK8Pf3N/PIjMeiL5/fzBmIjIzEwoUL0adPH2TMmDFOMBAWFgZPT0907NgR+fPnT/ZreHl5YcuWLVBKISgoCJ06dTL6+xAm5uvL7WLZs2s9kjQ5cIDNML/7juVxhWVzdnaGh4cHxo8fj+PHj6N27dqYMWOG1sMSJnDx4kVERkaiYsWKiT7GwcHBqpMILXpm4M1gYMOGDbh//z4GDhwIAHGCgTVr1uDJkycYNGhQil5DFytVWCf1BayTry/b1FpxMHDvHtCtG9thjB2r9WhEcnl4eCBdunTIkCED1q9fj/TS1cgm+b1aikxsZgAAHj16hLx585prSEZn0TMDzs7OSJ8+/eu8gDlz5qB169Yo8Wqflaura5z7ypYtiyZNmrz+eV9fXzRt2hSBgYHIlCkTAGDIkCE4f/489uzZAycnJzRq1Oh10FHFhvao243oaOD8eZYgttJgICoK6NqVBW5WrJBdrkan17OmcGAgWxLevw8EB8d8hYTE/XPOnMnuUOTi4oKoqCi0a9cOefLkMfEbEVox7CRIbGbg5cuX8Pf3x4cffmjOYRmVRQcDAPMGgoODcfHiRXh7e2OboTMdYmYGfH19cfToUUyfPj3Oz1auXBnVqlWDp6cnBg0ahEWLFmHr1q04ceLE6wTDbNmyoXHjxuZ8S8KYrlxhJcnoaCBbNq1Hkyr/+x/wzz+seyXnkxRSCggK4ok+9tfNmzF/vnWL1YMMHB3Zn9jVlctLWbLwzzlzst1pqVLJfvnz589Dr9cnecUorJ+fnx9y586d6JX/mjVrEBUVhY4dO5p5ZMZj8cFA1qxZERwcjDlz5qB48eJo3br16/sMwcCcOXPg4uKCnj17xvv5kSNHYsiQIahatSpGjRqFAwcOIJfUFrAdhvoCoaFWOTOwbRvr2/z8M9CwodajsVD37wPnzsU9wcf+ev485rGOjtxVUqgQ+4vUqsU/x/7KndtoJceTM30srJ+fn1+iswLPnj3D2LFjUbx4cXTp0sXMIzMeqwgG7t69C29vb3z//fdwiNVF0NXVFZcuXcKePXvwySefvN59EFvr1q3h7OyMFi1awNPTE5VtrHa93bt4kQf3hw+tLhj47z9uI2zfni0yBNhq+PRp4NSpmK/bt2Puz5Mn5qTeokXMnwsX5ve8eYG0bivW6xksJCNgkGDA9t27dw8PHjxI8P/45s2b+OCDD3Dnzh3s37/fqre0W/zIs2bNigMHDiBjxozo06dPnPtcXV1flypOrOJgeHg4MmTIgKJFi8Ld3d3k4xVmFhDAnhJWFgxERAAffcQZ6sWL7bRT9p07cU/6p04xGAD4f1m9Ots0Vq/OnhOFC7NSoCkoxddfuRJYtQrYsydZvaL9/PxQoEAB5LDBttmCDPkCT58+xbJly6DX6/H48WMcPXoUmzdvhouLC7Zu3YoGDRpoPNK0sYpgAAC6desW7xfO1dUVAPDuu+8mesXfr18/FCpUCIcPH8aRI0dQt25d0w5YmNe1a0CBAsCJE1aVM/Dll8CZM8wVsPnziFIJn/jv3eP9OXPyhN+rF79Xrw4UKWKe7qGXLjEAWLmSpYjd3AB3d/6nKPXWMZw7dw61a9c2/TiFZgyzP4sXL8bixYvh7OyMHDlyoGLFipg0aRL69u37+lxkzXRKKaX1IExl8uTJWLp0KQ4fPowpU6bAz88P69at03pYwpjy5AE6dQLmz+cJplo1rUf0VmvX8nwzcyaQwp2w1kEp5nJs385o5/RprvsD7AViOOEbvgoXNm/b8Js3efW/ciW7XWbJwgYQH3/MduZmnOpt1Aj491++fQcHfq9Thw2qhDAni58ZSK2dO3di8uTJOHr0KFxcXODh4YFixYohICAAxYsX13p4whhCQtjf17A8YAXLBJcvsw+OuzuQnF5aViM4GNi7lwHAjh2cCcicGahfH/j885gTf8GC5j3xG4SFsVXxwoXAwYPsB92hA7dytGlj9v7Qej1jpITaI794YdahCAHARoMBf39/dO/eHWvXrkXRokUBALly5UL37t0xderUeFsQhZUKCOB3wxSdhQcDoaHslpsvH89JVl3jSilOsW/fzq+DB1kwoWxZFk1o25aBgKnW+JPrxg1g7lzgzz+BR4+YdLhkCWeTNJzadXDgypZOx3/K2CZM0GZMwr7Z9DLB2yRjSVBYsg0bgC5dgN9+A776iicjC87E++wzzkwfOwYkUdXUcr14wZrJhgDgv/9Y+bFpU57827ThPn2t6fWcpZg1C9i6lSf93r2BgQNTVEPA1CIjgXr1OEMQHR1ze4sWwPjxgKQ3CXOyyZmB5IiOBk6e5DblDz7QejQiVa5d41R0dDSLyFhwIPDXX8CiRYCnp5UFAlevxpz8vbyA8HCgeHHgvfcYADRqxIDAEgQFcWvGrFksRlWpEjBnDvDJJ4CLi9ajiyddOuaPVKzIFS8A+OUXTly8+y7QujWDglq1tB2nvXn6lPGjFe8STBXLPXqamIMDZw4/+ojHD2GFrl1jm9mgIIteIjh3jvkBffowYd6iKQUcPQoMG8ar6JIlufVBr2dlJH9/BgjTp/NsZQmBgJ8f0L8/d5WMGsXchIMHmRzYr59FBgIGRYrw5A8wvvrqK76dVau4wlG7NutQnDql6TDthp8fg7OAgPjLN7bOrpcJoqOBAQO4fjt7NmcRhRVp0YKZ4LlzA8ePc77VwoSEADVrcun86FHLOHcm6MEDYOlSRsiXLvHE2r49r/6bNuUMjCWJiAA2buQswMGDrDrYvz+TFa2wlfXWrfycxC5HHR0NrF7N2YHLl4GOHYFx41hyQRjfvXuchcmVix8pC44hTcKugwGA0d/w4cC0acDkycDIkVqPSCRb8eJc47l5k0WH9u3TekRxKMVOhNu3c0nKgparKSoK2LWLAcCWLZwu69yZyQ1Nm1rmssvt29xGOn8+j96NG3N/ZseOnHe3QVFRbGD1ww+cDOvShZ0trWq5ycKFhvKjdOsWc3oKFoz/mMhIm/2IAbDjZQIDnQ744w9g9GjOME6YYH/TQ1YpMpJBQIkSXOSzwGWC2bN5ZffnnxYWCFy9yg98kSK8+g8IAH7/ndX/Vq4Emje3rEBAKcDbm1sxihQBpkwB3n+f6y8HDjAgtOGjtJMT0KMHJ2wWLeKSQaVKXOK8eFHr0Vk/vR7o2ZMfp7//TjgQCAwEFizgTJ9eb/4xmoUSr02cqBSg1NdfK6XXaz0akaQrV/iftWePUjVrKtW3r9YjiuP4caXSpVNqyBCtR/LKixdKLV6sVKNG/HfLmlUpDw+lTp3SemSJCwlRavZspcqX55jLlFFqxgylnj3TemSaiohQasECpQoXVkqnU6pbN6UuXdJ6VNbru+/48Vq/PvHHLFyolIODUkFBSg0frlSHDuYbn7lYUPivvTFjOEvwyy/A0KE2HAHagmvX+N0wM2BBpYifPOFFbNWqXHrSjFLMpRgwgOvoPXuyq9/y5ZwFmDXLMis2PnkCfPst8xYGD+a0yt69vAwePJh5InYsXTqgb19umJg9m+vb5ctz9uDKFa1HZ12WLQMmTmRubOfOiT/Ox4e5GlmzslzF06dmG6LZSDDwhmHDWKNk5kzmIsXe/yssyM2bXOMpVIhzdxZSG9ww5RgczIJ36dNrMIhHj4CpUzmXXLs2+yR/8QUDqH37WHbXEjMZQ0J4ZC5eHJgxgxm916+znkSzZlIU5A3p0zPOu3KFOU9797LmU+/eMfW4ROL++YfpMb17cxdHUry9Y1qMBwczKLA1EgwkoH9/bjf86y+2mI2M1HpEIp7795n26+TEq10LmcaZPJmZ4UuXcnnbrP79l5eH+fPz6FamDEsD37jBZBhLLcMdFsbgpUQJjrNXLwYuP//MvgUiSc7OnDC5do3pFDt2AKVL82Lmxg2tR2eZAgKYdlKnDi/+kooz//uPX40a8e/Pntnm5JQEA4no3p17fQ1NZcLDtR6RiOP+/Zh9WOnSWUTE5uPDvLxvvwXatTPjC587x2yycuWA/ft5Er1zhx/e1q0ZLFmiyEhmZZUsyezdjh15mTt1atw9diJZMmbk8mZAAJc6N2/mCsuAAZxIExQUxLzZbNk46fS22TtD/whDh+LgYAkG7M6HH3Ir844dLGX+8qXWIxKv3bsXNxiIitJ0OPfvsyR//frcAmYWp09zobNSJe6HmjOHl4cjRnDWxFLp9dwrV7YsiwI1aMBU+QULZCbACDJl4kfg+nWuuqxbx3hr0CDuzLRnUVG8uLt7lzN4OXO+/We8vYEKFWIeK8sEdqp9e35ofHx4tWcoGyo0dv8+kDcv/6zxzEB0NJfh9XruzDN5GdNjx/jBrF6dswKLFvGKun9/7RsDJUUp7t2qUoUlgsuVY5XAFSt4thJG5eLC1aLr11msaOVKrsQMHcqTob1RiqkzBw6wRXTp0sn7OR+fmCUCQJYJ7Frz5qzNcuoU0LIlp5mExmIvEzg5aRoMjB/Psv0rV5q4+N3Bg/wA1qnDueBly3hF3bu35e+z37eP4+7YkRUjjxxhYFC5stYjs3murly6unED+O47lj8uXpyzB/fvaz0685kxg5Nnc+awplZy3L3LONuQPAjIzIDdq1+fxzN/f36QHj3SekR2zkJyBnbt4lTsDz8ATZqY4AWUYh5A48Y8It27x0pG587x6trSu6kcOcJfmObNmaW1d29MYCDMKksWBgPXrwNff81iWMWKcfbg4UOtR2da27ax0uzIkdyWmVyGfAFDMBAezi+ZGbBzNWvyCvDWLR6b7XGqzSKEhXGuLvYygQY5A4GBPB+3bs0rL6NSCti5k1Fos2Zcn9q4kdPq7u6WmxRo4OsLdOjA9nuPHjGb7cgRvhehqWzZuGxw/TpPjnPmMCj49lvg8WOtR2d8584xn6d9eyZWpoS3N5MwDYea4GB+l5kBgUqVGC0+fcp1pMBArUdkhwxzmxrODERGMoE/UyZuIzRa9V7DunqtWkCbNkxE2LaNzQ06dbKsMsEJuXyZDRmqVOFWxxUrGMC8957UCbAwOXJwJ+f168CQIZxGL1oU+P572ymqc+8eg4B33mGtrZTG0AnlCwAyMyBeKVOGH5KICCZCG4rhCTOxgGDgm294fl6zJnkZycmyfz8rAnbsyChjzx7g8GF2DrT0E+mdO5x/LVeO1VwWLGDFwG7dLD+AsXO5cgGTJjEoGDiQtQqKFuXsgTXnR4WGMn6OjGQfrpQ23nz0CLhwIX6+ACDBgIilRAnmc6VPzw/Lv/9qPSI78mYwYOYEwo0b2dfnt9+MtPR9+zbnMZs1YxDg5cX5ScM6uyXT61m1pWxZLgVMnsyMq759LT+pUcSROzfw668MCj77jFPqxYoxJ8ZwErQWej3zav38Em8+9DYHD/J77JkBWSYQCSpUiDMEOXIwIPD11XpEduLePZ4kc+fm3804M3DtGgvkdenCbUppEhHBiKJ0ae53WryYV9Wxjz6W7N9/OdaBA5nHcPky63k7O2s9MpEGefIw2A0IYEHLiRMZFEyaBDx/rvXokmfcOObZLlsG1KiRuufw9ub7LlQo5jZZJhCJypuXF3KFCjGb/PhxrUdkB2KXIgbMlkAYFsZCVG5uzMRO00X7vn3cVvfNN7wM8/fnkdfSZwIABjETJnD89+8zkFmwwCLbSIvUy5ePPQ+uXeNqz7hxPDn++ivw4oXWo0vc8uX8eE6alHTzobeJ3Y/AQGYGRJJy5uSxvUwZzuwappeEicTeVgiYbWZg6FAug69dm4aDwa1bzDxs3pwBzZkzPOJaUNfFJB05wryGH35gKrqvL7fWCJtVoAAbt125whmx775jnYLff7e8qqyHDgF9+rBZ2Ndfp/55goL40X5zku7ZMy4NW3Jtr9SSYMBIsmUDdu/mlFSrVtxOLUzk0aOYJQLALMHAsmXA/Pk8KFapkooniIjgJVWZMrzkWLKEa0yVKhl7qKYREsKU83r1mNdw8iTw00+W2f1QmEThwkwPuXyZm0O++oq5U9OmcdZMawEBTBisU4e/q2mZZPvnH27sSWhmwBZnBQAJBowqc2buAmvcOKaMsTCB58/jpgabOIHwwgVW+u3RgzP6KbZ3L6fUR49mKzl/f3bCsoYlAYAf5HLlWPb49985OyCVA+1W0aJcFfL3Z42NkSMZFMyapV1Dt2fPWNYia1aWGk5r63AfH86IvNno01ZLEQMSDBhdxozMNm/bli0y167VekQ26MWLuMGACXMGnj9nnkCxYsDs2Sk8fwcGMrGuRQvOZJw5A/zxh/VcWhi6L3XoAJQvz6ho2DDLL3gkzKJECcDTkxWxmzVjQu0773D2ICLCfOMwNB+6c4dxqzF6dBnyBd78fZeZAZEiGTJw/7m7O4+lS5ZoPSIb8+bMgImWCZRi+9fAQHZ+c3FJ5g9GRHBfVpkyTCBZtoxHl4oVjT5Gk1CKR/myZZkMs2wZW3cWLar1yIQFKlmSx7iLF3kC9fBg1b6FC02fyqMUc3n27+fvaJkyaX/O58/ZhyahTT0yMyBSzMmJvyCGZJZ587QekQ15/jzumdlEwcD8+cxMnj8/BQeZPXuYBzBmDNcW/P1Zs9halgSuXmVyY58+XOu6dMm6xi80U7o0f1/Onwdq1+aKWOnSjCtNtdln5kzO2M2ebbxK14cPsxPpm/kCAGcGJBgQKeboyCBgyBBeYf7xh9YjshFvLhOYIGfg9GlOew4cyG1VyRpTv37sKpg3L0vw/v679Rw5IiM5m1GxIjOxdu1iNGuMOVdhV8qV4x5/Pz9uPOnTh5NMS5caNyjYvp2rViNGMPAwFh8fruoldAEgywQi1RwcmG37zTf80P74o9YjsgEJLRMY8SgTFAR88AHPi8kK4M6cAapXj5lGOHAAqFDBaOMxuVOn2Ath9Ghg0CBe2rVsqfWohJWrWJFT92fOMOWkRw9+X7GCV95pYWg+1K4dN+kYU2L5AoAsE4g00um4C2vCBO7RHT2aa10ilUy4TKAUy5g+fcrkzyT3E+v1LOReuza3250+zUsUa5lSDw0FRo1iIKAUcOwYywknOzlCiLerUgXYtIm7UUuV4qpTxYrMq9LrU/589+8zp7V4cQYWxsxnDQ1l4bjEioDKzIBIM52OgcCUKayMNWyYBASpEhnJBL3YMwNZssTUCU2j33/ngWvxYu4gSNTdu9xXNWoUM5iOHOECqbUICGDNgJkzGameOJH6uq1CJEP16mwYdOwYUKQIa29VrsytgMkNCgzNh8LDU9d86G2OHePhJbFgQGYGhNGMGMFkl+nTmV+W1ukyu2Oogxr7KJArFy/l07hUcOgQq5Z9+SWLqiRq61YmCZ47x0pTv/1mXSXJtmzhkfnZM+DoUb5paSokzKRWLW5OOXyYJY8/+IC5BZs2JX2BpBTzD3x92Xwods8AY/H2ZlXthFb5lJKZAWFkAwcCf/3F+vY9e5qlrL7tMHRKiT2VbUhye/Ik1U/78CGvVOrWTSKvIzQUGDyYc5R16jBDqkWLVL+m2UVFcY3qvfe4KHrqVCrLKQqRdnXrMpY+eJAl3d9/n5NTW7cmHBSMHw+sWsW81po1TTMmHx+2pY/ddfvRI8b9//7Lizdjz0ZYDCU0s3q1Uk5OSnXpolR4uNajsRKXLikFKOXjE3PboUO87fz5VD1lVJRSLVsqlTu3UrduJfIgPz+lypdXytlZqZkzldLrU/Vamrl3T6kmTZRycFDq55+Vio7WekRCxHHggFING/JXuWZNpbZvj/k1W76ct//4o+lePzxcqYwZlZo8Oe7ttWvztWN/OTsrVaOG6caiBZkZ0JC7O7BhA2dt33+fF57iLRJbJgAYwqfCjz+yPMCKFSxBGodSXFevWZOJHydOMOPeWpIEAa5/VKvGqjD79nFZwEF+9YVladyYHWD37uWqVdu2wLvvAlOnsm14jx7At9+a7vVPnuQx+M18gVat4j82LCztJY8tjRwRNNahA6fFDhxgjRdr6ReumaSWCR4+TNZTjBzJ82FEBA8848YBY8ey1k4cDx7wP2jIENYQOHHCurYMKsW9kY0bM/X69GnpMCgsmk7H4kH//MNSF2FhwPDhLPP+8cemjcG9vQFX1/grZwMGxHRLjz3O6dNNNxYtSDBgAVq04Af/xAlGoUZKjLdNhpmBTJlibsuWjfuLkjEzEB3NBM5ff2Uik6Gb8HffvfHAXbuYJHj8OKO16dMBZ2ejvQ2TCw7m1NOIETH1WvPn13pUQiSLTscdu+HhrOFVvDg37zRuzJO2Kfj4cIPNmyf+fPn4q2TYwujoyFyv6tVNMw6tSDBgIRo04FXqxYuMjB8/1npEFsqQWRR7c7GDAzOQkhEMXLsW027V15ebEPr0ifV04eGcOmjdmvue/PxY2cSanD/PZY1du7hva/Jk2S0grEpUFAP1O3c4a3r6NHcQBAczIGjWjKtfxny9f/5JuAQxwK3ghp1f6dNzN66tkWDAgtSqxTWzmzf5gb9/X+sRWZFcuZK1THDmTPzbunV79ct96xZQvz5zBH7/nfuf8uY1/lhNaflyXlJlyMBF0M6dtR6RECk2bBgvjgzNh3Q6rtidOsWusI8e8Ve1VSvujk2rM2e4AplYfYGaNWP6dI0Zw9kCWyPBgIWpXJnTYE+eMEq9dUvrEVmJAgWSdfV79mzCFcv+W3GI+5ru3+cG6OHDrSvJLjyc7eI+/ZQbt48eZbk3IazMzJnArFn8ejOPR6dj0aEzZ1gh9PZtblFs25bLrKnl48O8hKTqbk2YADRtyjpjNknr7QwiYVevKlWkiFLFiikVEKD1aCzIli3c23P3btzbk7lVrkGDuFuEihdX6nCfBUqfLh3vvH/fBIM2sRs3uBcrfXql5s2zvm2PQryyfTt3vw4fnrzHR0crtWqVUmXK8Pe5QwelTp9O+et26KBU06Yp/zlbYkWXPvalRAlGq46OzCfw99d6RBakQQPmCMSWzKt4w5RiiRLAyiWRuNJ6MOou+hy6zz7jvKSbm5EHa2I7d3Lb4IMHXETt18+6tj0K8cr588wTaNuWRT2Tw8GBP3P+PLBsGY+T1apxdczPL3nPodez8FFiSwT2QoIBC1a4MAOCrFm5ZJDcD7dNK1+e/yhvpvwm06ZN3Bhw+dBDdF3UEg7z5wFz5vDLmjYOR0dzT2TbtswROH1aegsIq3X/PrdWFyuWuuZDjo5sgHThAvuK+PlxyfXDDxkoJOXcOXYqtfddtzqlpF2OpXv0iB1lb9xg+U67PuYrlfYr3xcvuNB47x6z7Rs0MM7YzOXFC14Obd8O/PADSwxbU36DELGEhQFNmgDXr3Mnb+HCaX/OyEjOFPzwA/Dff9waOHYsULZs/MfOmMF8gLt3jdsB0drIEcQK5MrFbeKlSxt/S43VMcYUeIYMzLo/dcr6AoEnT1iYwtubux2++04CAWG1DM2Hzp7l1kFjBAIAc4l79+aywbx5bCpavjzzay9fjvvYI0e4i8ueAwFAggGrkS0bZwWqVeMswb59Wo9IGy1atICLiwuCgoLi3Xf79m3ky5cPNWrUQJihmEBCnJxYSdAUbc9M6c4dLmxeucLN1wnVSRXCivzwA7ByJZsP1apl/OdPnx74/HMGALNnM4YuW5ZFg65eZTDSpAm3L74pd+7c0Ol0SX7179/f+IPWiCwTWJmXL5kc4+XFGW5rq4eTVjt27EDbtm0xZcoUjBgx4vXtYWFhaNiwIW7evImTJ0+iYMGCGo7SBK5e5YxAdDSjwoSOXkJYkZUrWWJ44kTu3TeHsDBg4ULWFXnwAPjmG77+m6KiorBq1aoEnyM4OBijRo1CeHg4tm7dijZt2ph41OYhwYAVCg8HunYFtm3jL1SXLlqPyHyUUqhQoQLCw8Nx+fJlOLyaIu/VqxdWrFiB/fv3o379+hqP0sjOnmVFRMP0kLHmUoXQyJEjvCJ3d2fCn7k3wISGAvPnM2mwfPnk5yOHh4ejdevW8PLywuzZszFw4ECTjtOsNNzWKNIgIkKprl25J3fpUq1HY14LFixQANTWrVuVUkpNnTpVAVBz5szReGQm4OOjVJYs7Jf64IHWoxEiza5fZ7vwevWUCgvTejTJFxUVpTp37qwAqHHjxmk9HKOTYMCKRUUp1aePUjoda83Yi9DQUOXm5qZatWql9u3bp5ycnFS/fv20HpbxbdnCxulNmyoVHKz1aIRIs2fPlCpfnsW+tI5t9XqlIiOT//jPP/9cAVCDBg0y3aA0JMGAlYuOVmrIEFbfmjpV69GYz7hx45ROp1PZs2dX9erVU+Hh4VoPybiWLFHK0VGp999XKjRU69EIkWaRkUq1bq1U1qxKXbyo9WiUSskhY/To0QqAcnd3V9HJrHZqbSRnwAYoBXz7LfDLL8CPP3Lbua17+PAhChYsiBw5cuDs2bPIkyeP1kMynmnT2Knls8+AuXNTXWBJCEvyxRfM6N+xg7mwWtPrk7crd/r06Rg6dCiaN2+Obdu2Ib01FSdLAdlaaAN0OmDSJG7TGTOGW89tPcRzcXFBVFQU2rVrl2AgcOPGDeh0OmTOnBmurq4oWbIkBg0ahAcPHmgw2mRSCvjf/xgIfPUVsGCBBALCJsyaxeI+M2ZYRiAAJC8QWLlyJYYNG4YaNWpg48aNNhsIABIM2AydDvj+e7au//FHYMQI2w4Izp8/D71ej0qVKiV4v6+vL8qWLYvnz58jJCQE+/btw5MnT9C+fXtERUWZebTJEB0NDBrEUmi//sppHukxIGzAzp2cFRg6FLCm5Ptdu3ahZ8+eKFmyJLZv347MmTNrPSSTkssOGzNyJFtxDhrE7TOzZ9tmgTq/V40akgoGYt9XuHBheHp6ImfOnDhx4gTq1q1rlnEmS0QE0KMHe7L++SdLsglhA86f5/bBNm2AKVO0Hs0rERF4dMAPuVolXtf92LFj6NKlC9zc3LB7927kzp3bjAPUhgQDNsjDA8iUiUvOL18CixbZ3mxzcoKB6tWrx7nN2dkZRYoUQUBAQKLBQGQka5kHBLAFQMeOJg6mXryIqSK1bh3w/vsmfDEhzOfBA6BDB6BoUdZD0azcb3Q0a3Xs28e67gcPIpdeD/X8OXQJDOrSpUto164d0qdPj127dqFIkSLmH7MGbOwUIQx69eIMwaefcoZg+XLrasr3Nn5+fihQoABy5MiR4P2+vr7ok8AV9rNnz5AtW7Y4twUE8Orl3j02K9HrY+67exfIm9eYI4/lyROWkDx/nllVTZua6IWEMK+wMKBTJx57vL0BV1czDyA8nCf/9evZ9ODRI14hNWgAjBuHCYeb4uMbDihRIu6PBQUFoVWrVnj8+DE8PDxw5swZnDlzJt7Tu7m5oWXLlmZ6M2ai9XYGYVqbNyuVPr1S7drZ1g61HDlyqDZt2iR4X0hIiNLpdOrmzZtxbg8ICFCOjo7q4cOHr2+LjlZq1ixuzXzzq2xZE76BW7e44TpXLqVOnDDhCwlhXnq9Ut26sUTG0aNmfOHnz5Vat06pjz9moS5AqZIllfr6a6W8vePsJSxVije9adeuXQrAW7969OhhxjdmHjIzYOPeew/YsoVReocOwKZNgIuL1qNKu8ePHyd6n5+fH7Jly4ZCbzQiGjduHNzd3ZErV67Xtzk4sHGJg0PcGQEAyJOH/dHLlzfq0LkO0bgxpy8PHpQ+A8KmTJjAZYHVq4HatU38YkFBwNatwIYNzFQMDQUqVWLyVOfO/OV9IxH37l02Lkqol1nLli2hbDnzOgk2mFom3tSyJX9Pjh5lifvgYK1HZFq+vr6oWLHi67/7+/ujZ8+eOHbsGKZNmxbv8U2acLne0THucePkSTY3rFiRzUyuXDHC4B49YrdBnQ745x8JBIRNWbUKGDuWAYG7u4le5OlTdhtq0wZwcwO6d2dHz/Hj+Uvq68stuhUqJLgj5+BBfo91iBCQYMBuNGwI7N3L5elmzbhcbat8fX1x+PBhuLq6Inv27HB3d0eRIkVw7NixRLOC33+fBzLDsaNyZZ63//6bFxq//AKUKgVUr86dfzdupGJgz58DbdvyYCYNh4SNOXqUuUqffmqCLoRKAcePA717A/nzA/3789J+yhQgMJAv/uWXwDvvvPWpvL2BkiWBfPmMPEYrJxUI7czZsyz6kT8/sGcPA2sRY/VqtlWdMoW1fwxCQ4Ht2xkwbNvGv9euze6RH34IFCjwlieOiOA6zZEj3DlQrZoJ34UQ5nXjBn8fSpZk3l6GDEZ64hcvuOYwZw5w+jRQpAgDgd69U53ZW7EiUKcOa3qJGBIM2KGLF4HmzYEsWfiL+9YTmZ0JDOS/SWJbCp8/Zx7G6tXcBBAZCdSvz8Dggw8SCLD0el4urV8vuwaEzQkOBurV43n72DHAKFvyL15kALBkCRASwhm1gQO5zpmGPYqPHnF8S5ZwdeG1ly+53crW9mCngCwT2KFy5QAfH17dNmyYyilvG1aoUNK1BTJnBrp1YzLm/fuApydvGzqUU4/Nm3NJ88kTcHpzxAhOKSxfLoGAsClRUQyCb95kHl+aAoGICP6eNGrExL81a4DBg7n3d+tWbsNNY7ECQ75Ao0axbnz5kr+Xly7ZdtnWt5BgwE698w4DAp2OW28vX9Z6RCkUHa31CAAA2bIBPXtyCeHePfYVAjiTmScP4FnmF2DaNIROnsVpAyFsyMiRTH9Zu5YXGany7BkbqxQqxChbp2NQEBjI2upFixptvD4+XGmIk64zciTg58dZAXsuAa7pxkahudu3uZ8+Tx6lzp3TejTJNGaMUpcv888REdqOJRH37im175M/lQLUWIxV6dMr1bGjUitWKBUSovXohEg7Q32O2bNT+QTBwUpNnKhU9uxKZciglIeHUhcuGHWMb6paVak4JQI2bOCbmDvXpK9rDSQYEOrBA6WqVFEqZ06lTp3SejTJ0K+fUtWrK7V0qVLz5rHKiaXZvFkpBwelBgxQgTf16vfflapdm8edjBmV+vBD1kd5+VLrgQqRcjt3KuXoqNQXX6Tih0NClJo0iQec9OmVGjyYRbhMLChIKZ1OqYULX90QGKhUjhxKde5smccQM5MEQgGAu93atOGy2Y4dwLvvaj2iJHz/PbB4MVOC793j3J8lOXiQxR3at+d0Z6x1zuvXuRS6ejVw5gxzDTp2BD76iD9itCxsIUzkwgUeH+rX59bbZC/jv3jBzmm//sqlgb59gW+/5fKAGWzbxl/JK1eAd0ooJvdcvsy6BImUNbcnkjMgAADZs3OrYZUqPCnt36/1iJLg5sYuKEePMiCwJOfOcQth3brAsmXxjpTFigFff81dUv7+wFdfcbvne+8xx6BPH2DXLu5QEMLSPHzIE2rhwiloPvTyJfD770Dx4sDo0awMeOUKAwMzBQIArxny5QP7ESxaxIOcp6cEAq9IMCBec3XlrEC9ekzc3bFD6xElws2NjUgCAy2rjNiNG6wuWLw4txq85TK/VClOcpw/zxhiyBAWJWzdmnUgBgwADhywmFxJYecMzYdevmRyf5Ysb/mByEhg+nSefb/6ilHE5cvAvHnM4jMzb2/uItDdvweMGsUKSc2bm30clkqCARFHpkyc+mvZktPXGzZoPaIExN6/VKyYduOI7eFDBgKZMjGKeuuRMq4KFVjC1d+fswZ9+rCEdNOmQMGCwBdfAIcOxe+fIIQ5KMVZ/VOngM2bk3Eu9/HhNOPw4fy98PcH/vxTs9/X58859oYNwV+mdOmAyZM1GYulkmBAxJMhA2v1d+7M+uIrVmg9ojfErupjxG1HqWYoivLsGef48+RJ9VPpdEDVqix/fP06V0K6dmW9ovr1+XZHjQJOnLDrLdHCzCZOZJkMQ6pOoh484F7bRo0YEJ86Bfz1F+L1CjazI0dYE6Fd9Gbug5w+HciZU9MxWRytMxiF5YqKUqpXL2bgLlig9WhiuX+faflOThyklsLDlWreXClXV6VOnzbZy0RHK+Xjw91Xbm58+8WLK/Xtt0qdPSvJ0MJ0Vq3i5238+CQeFB3N7XnZs/Nr/nzeZiHGjFGqWI4gpc+fn/3c5RcmHgkGRJKio3kCApSaNk3r0bwSFcUB5c6t7Tiio5Xq2pXbo/bvN9vLRkYqtXevUn37cmcUoFTp0kqNHavUxYtmG4awA0eOsATAJ58kcf48dUqpWrX4Qezdm3uVLUyDBkrtKDZQqcyZlfrvP62HY5EkGBBvpdcrNWoUf9cnTdJ6NK+kT89LY63o9UoNGcJpk3XrNBtGRIRS27cr1bOnUlmy8P+oYkXWcrlyRbNhCRtw4wZnod59V6nQ0AQeEBTE3wEHB6UqVFDq4EGzjzE5Xr5UqpHTP/zlmD5d6+FYLKkzIJJFKbYLHz+eGfDjx2tcuTNjRq5Dnj+vzetPm8a2hnPnsvawBQgLY8rC6tVMAn3xgi2XP/qIuR8aJHALK2VoPvT8OZsPxWm+pRTrZ4wYwXyZ8eNjkvIskM+ecORuWQWFK2aDy5l/0tzfwGZpHY0I6/LLLwywR4zQeNktXTpeAmvh0CHmK4wYoc3rJ8OLF0qtWaNUly5KOTvz/6xuXaWmTmUJaiESExmpVNu2nGk6f/6NO58+ZflMgB+umze1GGKKeDX6nwpHOhV11lrqrWtDZgZEis2cyT3xAwYAs2Yl3eHPJJ4/Z1GE8uXNPzPw8CHT/YsWZREAC70aii0khDMFq1dzu2JUFLdYffQR0KVLAi2XhV0bNoy/49u2cVfga4cPAx9/zF0zCxZYR+OtCxcQWbEq1r/zDbpe/kHr0Vg02VooUmzwYG4ZnjeP++Gjosw8gDt3+P3lS/O+bnQ08MknbLW6erVVBAIA46ZPPmFAcP8+/++cnRnQ5c/PmhJ//vmq5bKwa3PmcAVs+vRYgUB0NLsHNmwIFCjAkpnWEAjo9dD3/RwBKI67vUdrPRrLp/XUhLBeK1awWYm7u5mbB168yGnK7NnN+KKK6fo6HVP5bcCDB9wN1qQJ31a6dNx1tWSJUs+eaT06YW67dvH3eciQWDfeuhXzAfnuO64hWIslS5QCVAN4q2PHtB6M5ZNlApEmmzZxurlVKzbgcXY2w4teuhTTPD0szDzdfXbtYienH34AvvvO9K9nZnfvstDU6tWsdJghA+soffQRq8i6uGg9QmFKFy+ynUa9epxBcnICsGUL0Ls3PwzLlwONG2s9zOQLDwfKlIG/S1XU+G8Dnj599Z5EoiQYEGm2axdrljdowOAgUyYTv2DsYMDfn0X+TenmTaBaNaBWLRZlN3uShHkFBsZ0Vjxxgv+f7duzEmKbNmYK+ITZPHwI1K7NgO/QISBL+jB205o+nU23Fi0CcuXSepgpM306MHw4+r17HjddymLnTq0HZPls+6gmzKJVK5bjP3yYTXaCg8344tevm/b5IyK4L8/FBVi61OYDAYCN5EaOBI4fB65d40SIvz/LU7u5Ad27M7ksIkLrkYq0Cg8H3n+f21C3bAGy3PVnveF584AZM9iIwNoCgZAQYOJE6Hv0wirfsuxHIN7K9o9swiwaNwb27gX8/IAWLcyUjObgwE6BpvTll+wctHatXdYyL16cLefPnuWEzMiRLDffvj2QNy/w2WdsfW32JFKRZobmQydPckav6OXdnP0KD2dxgcGDNS4mkkq//w4EB+Ncl3EICYEEA8kkwYAwmjp12CL82jV223vwwMQv6OZm2pmBNWs43fjHHzxI2rkyZYCxY4ELFwBfX2DgQLaFbdmSuxIMf5eWy9bhxx+BZcvYR6juuflMEmnQgFNClStrPbzUefiQ3QgHD8a+y4Xg7AzUrKn1oKyD5AwIo7twgW3Cs2UD9u3jicKoDDkDVasCJUtycdvY/P2BGjV4CbxihXVeIZmBUpw4WbWKsdPNm0C+fMCHHzLHoE4d+aezRGvWMDl03P/0GPvya55AhwzhVbU1Z9oNGwZ4egIBAejYJydCQniBIt5OggFhEleuAM2aAenTMyAwailcQzDQti3w6BGnNI3pxQtmVEVH8yrJ1dW4z2+j9Hr+V6xezZPN3btA4cJMufjoI5ZGlsBAe8eOcVnvow4v4Rn1KXSbN3P264svtB5a2ty4AZQuDfzvf9B/Owa5cvEtjRun9cCsgywTCJMoWRI4eJBXjg0aMDgwuvz5jb9MoBTnu69f5147CQSSzcGB29OmTuWOBC8voF07TkPXrMnPxJgxzCuRSxBt3LwJdOwINCt/D4sCGkO3ezcTBqw9EAB41s+eHRg6FOfPA0+fAo0aaT0o6yHBgDCZIkUAHx8m4jdsyOUDo8icmd+zZuUa4YsXRnpiAAsXctfA/PksdyxSxdGRB+LZszlDsHs3r0Znz+ZydPny7G/z779aj9R+hIRw1auy43lsvl8bDndvM2Lv0EHroaXd+fPAkiXsopY5M3x8WCC0dm2tB2Y9JBgQJlWgAJPK8uThyeH0aSM8af78XNc0XF4aa0fB6dMxTRc++cQ4zyng5MQdJgsXshzy1q1Mx5gyBShbFqhSBZg0CQgI0Hqktis6GujWDSh+dTe2B9eDY87sXC+oWlXroRnHmDFAsWLA558D4DGnVi0z1DyxIRIMCJNzc2MST/Hi3GVw5Egan9DRkYvRoaH8uzGWCp4+Zb31ChW4fipMIn16Lh0sWcLdJhs2cJfCxInsSF2rFoOEwECtR2pbRo0C8m9fiA3hbeHYqAFnBAoW1HpYxnH4MMsmTpgApE8PpTgjKUsEKSPBgDCLHDlYh6BSJV4lenml8QmLFmXyYPr0aZ8Z0OuBnj2BoCDWE5ASe2bh7MyCN6tWMTBYtYrnpzFjGOvVq8e6N3fvaj1S6zZ3LhAxdRbmq8/hMKA/cwRsKRdm0iQG8V27AuBGoAcPpL5ASkkwIMwmSxZWKnz3XZa1TVOJ0KJFgf/+Y2JCWmcGJk9m+bUlSzjVKMzOxYU7DjZs4IF8yRLmgo0cyaWmJk1YFO/RI61Hal327AEueMzCLAzmP+bMmda9dfBNV6+yHOawYa+rg3p7c/Lw3Xe1HZq1kWBAmJWLC2f0WrQA3nuPFympUrQoZwSKFk1bMHDoEDB6NMvstW+f+ucRRpMlC0seb93KHIOFC5kMNmgQqx62asWt5E+faj1Sy3bpErDrvVmYoQZDP2wE8Ntvtre3c8YMTjt+/PHrm3x82ErEliY/zEGCAWF2zs7A+vVsbvTBB8DKlal4kqJFeQlZqFDqM89evODyQO3a7EYoLE727ECfPtyNcOcOj/3h4SyDnCcPE+GXL2emvIjx8CGwqsEsTA4bjPBBI+Dw+2TbCwSCgxkV9u8PZMwIgDnF3t6SL5AaEgwITaRLx8J+n3zCr0WLUvgERYvye65cwOXLXPdPqW++4Rnmr79sa+rURrm5sQSElxdw6xZXdx4/Bj79lPd16cKUj5cvtR6ptsLDgSV1Z2P848F49tlwZJhhg4EAwEAgNBTw8Hh90/XrwO3bki+QGhIMCM04OcUE9p99xuXMZDMEAy4uPCDcvJmyFz9wgC/488+shiOsSv78rJNz+DBTRyZM4Hd3dwYG3bpxCSosTOuRmt69e8Dz5/yzUsCqhrMx8tog3PloGLIumGKbgYBez2miDz5gUskr3t58u/Xrazg2KyXBgNCUgwML0YwYwS3+v/4a9/7IyER+MH9+Ti8YZgQuXUr+i4aEcO65USN2ZhNWrXBhbp07eZKVLkePZoGr99/nUkLPnsD27Ul8lqxc3bpMpv/3X2BnxznoeXwQ/m0zDPlX/m6bgQDA/9Br14ChQ+Pc7OPDHUvZs2s0LismwYDQnE7HKd/vvwe+/ppVRZViAlnWrNySGI+jI6vVXLvG9cKUlLL78ksuqi5a9DoDWdiGd95hMODnB1y8CAwfzvYS7dox+fDzz/l5spWWy//9xzzamzeB2RXnoM0WDxytPRRlttlwIAAA06axKEWdOnFulnyB1JMjobAIOh1z+CZNYplad3de2YWGcktZgurUYRW10qWTPzOwezef8LffWAVJ2KyyZRlYXrwInD3L5aj9+7mTpUAB7k7w8Ulduoml8Pbm997qT0yP8sA0DIVf7z9sOxC4cIER3RuzAoGBzBmQYCB1pGuhsDhDhwLTp8f8PX16XshnyfLGAw0ZiJ07s2DQvn1JP/GzZ5xPLVOGQYEtHzBFgpTicoKhs2JgIAODDz9knYPata3rY/HZZ8Cjv7Zivb4TFuBzeGA2AB1+/ZUTYDapf3/WBblxgweHV5YvZzLpgwdA7tzaDc9aycyAsCjHj3NfeewDckQEi9HE07AhMGsWI4fdu9/+5CNGMCD480/rOuILo9Hp2EFx8mSeSw4dYiy5ahXX3osX51LV6dPW0Vnx0bZjWKl3xxZ0wGDMhIODDhkyxDlH2pYnT9hIbODAeG/S25udzSUQSB2ZGRAWpXJlrve+qVGjREoYR0Ulb1vgs2fclN6zJy+nhIglOprl+letYg2MR4+Yf9C1K2cMKlTQeoTxPfYNhL5KNVxGKTTHXuQskBFDh/LjnSOH1qMzkV9/ZXJRYCC3jcRSpgwrVc6Zo9HYrJwEA8Ki+PoCixdzv/itW8zvM6zpXr8es6MwxaKjmXSolMwKiCRFRnLn6apVwMaNXIEqVy4mMChVSusR4vXn+Mn0pfjAsx2+GJsDHTrwI26zlGKE1qABa4PEcu8ekC8fC5i9alEgUkiCAWGRlGKL8s2bmfT/5Ak3DOTNq/XIhD2JiOAK1OrVrFvw/Dk3sXTtyiRXrVtZKKWgs5fg9uRJrvHs3Qs0axbnrrVr+f9x+zZ3HYuUk2BAWIXkrgYIYSqhoWy0tXo189dCQ7m7rWtXJiDaSkdgi/Xll5w2vHMn3sFg8GBg1y7WmRCpIwmEwuK1aNECWbO6ICgoKN59t2/fRr58+VCjRg2E2UO5OaGZjBmZbLh6NTPWV67kVeg337BFRoMGzGe9fz/5z5k7d27odLokv/r372+6N2UtlOL2jw8+SPCqwMdHShCnlcwMCIu3Y8cOtG3bFlOmTMGIESNe3x4WFoaGDRvi5s2bOHnyJArKpZnQwLNnXM5avZpLCno90LgxZww6dwZy5kz456KiorBq1aoE7wsODsaoUaMQHh6OrVu3ok2bNqZ7A9bg6FFu9zhwgP+4sTx+zBYlixcDPXpoMzxbIMGAsHhKKVSoUAHh4eG4fPkyHF5VDezVqxdWrFiB/fv3o74UIxcW4PFjJh2uXs0CRw4OQPPmTDzs1AnIlu3tzxEeHo7WrVvDy8sLs2fPxsCBA009bMs3fDgzOm/dipcluXkz/21v3ACKFNFkdDZBlgmExdPpdBg+fDiuXbuGHTt2AACmTZuGxYsXY/r06RIICIuRMyfQty+wZw+XtqdNYxfFPn2A5FzcR0dH4+OPP4aXlxfGjRsngQDAqZa1a5mYkcB2CW9v9qeQQCBtZGZAWIWwsDAUKVIEVatWxVdffYVWrVqhT58+mJdoreKEBQUF4ezZswCAKlWqIFtyLtWESKPbt1m7oGLFpNth9OvXDwsWLMCgQYMwM0VtPG3YP/8wIePgwQTbEdaowa2fS5ZoMDYbIvnZwio4OzvDw8MD48ePx/Hjx1G7dm3MmDEjxc/j5eWFLVu2QCmFoKAgdOrUyfiDFeINBQrE6bSboDFjxmDBggVwd3fH9Nj1uO3dmjX8x3v33Xh3PXsGnDkDDBigwbhsjCwTCKvh4eGBdOnSIUOGDFi/fj3Sp6Lmauw92XazP1tYvOnTp+Onn35C8+bNsXTp0td5MXYvOjpmiSCBf5NDh7iKIM2J0k4+ccJquLi4ICoqCu3atUOePHni3e/r64ucOXPi5cuXr28bMmQImjRpgqhXPWsbNWqE7t27o0ePHmgkRxBhAVauXIlhw4ahRo0a2LhxY4JB7o0bN6DT6ZA5c2a4urqiZMmSGDRoEB48eKDBiM3o4EGWF/zoowTv9vFhIbJ33jHzuGyQBAPCapw/fx56vR6VKlVK8P7KlSujWrVq8PT0BAAsWrQIW7duxdq1a+H0am9ytmzZ0LhxYzRu3FjyBYTmdu3ahZ49e6JkyZLYvn07MmfOnODjfH19UbZsWTx//hwhISHYt28fnjx5gvbt278OdG3SmjXMDqxdO8G7vb05KyCTfGknwYCwGn6vOhglFgwAwMiRIzF16lQcPnwYo0aNwqZNm5ArV65kv8atW8C6dSx21qYNcO5cmoctRIKOHTuGLl26wM3NDbt370buJNrt+fr6xvncFy5cGJ6enrhw4QJOnDhhjuGaX3Q0u0a5uyd4tn/xghWKZYLPOCSBUFiN5AQDrVu3hrOzM1q0aAFPT09Urlz5rc8bHc1S5xcuMOMbiGmQNHQoM8CFMKZLly6hXbt2SJ8+PXbt2oUib9kX5+vri+rVq8e5zdnZGUWKFEFAQADq1q1ryuFq48wZlnpMJMn3yBGWKZfKg8YhwYCwGn5+fihQoAByJNGfNTw8HBkyZEDRokXh7u6erOf19+d0Y2x6Pbc0SwkDYWxBQUFo1aoVHj9+DA8PD5w5cwZnzpyJ9zg3Nze0bNkSAIOBPn36xHvMs2fPbHe5y8sLyJSJzYkS4OPDyoPlypl3WLZK6gwIq5EzZ07Url0b27dvT/QxPXv2RHBwMA4fPoxNmzYl64opJISd6K5fZwl0A52OlU+bNuVXzZpAunRpfx/Cvu3evRutWrV66+N69OiBxYsX4/nz58iSJQv+++8/FCpU6PX9169fR8mSJXHv3r0ULYVZjfbtgfBwVnBKQKNGLPK0YYOZx2WjJBgQNmPy5MlYunQpDh8+jClTpsDPzw/r1q1L1s8+ewa8/z4vRpTirEDTpoCzM2cNgoMBFxfWPjEEB1Wq2Hj/eGERDh8+jPbt2+PJkydxbu/ZsyciIyOxYsUKjUZmQtHRQI4cwFdfAWPGxLs7LIylnX/5hUt5Iu0kgVDYhJ07d2Ly5MnYvHkzXFxc4OHhgV27diEgICBZP581K1ug9uzJv0dHA99+C/z9N+vNHzsGfP89lw/GjmXVs1y5GEBMnw6cPx93VkEIY/H19UXFWIkr/v7+6NmzJ44dO4Zp06ZpODITOnuWEfgbTYkMjh/npIHkCxiPBAPC6vn7+6N79+5YtWoVihYtCgDIlSsXunfvjqlTpyb7edKlAxYtAiZOBCpUYJM0gB1Ta9UCvv6aAcPTp1yvHDaMf/7ySyYZ5s3LTnXz57OvugQHwhh8fX1x+PBhuLq6Inv27HB3d0eRIkVw7NixJHcgWDUvL/aMTiJfIGtWIIlcYpFCskwgRBq9fAkcPswudfv3c7tTdDRQsGDMkkKTJtwuLYRIhg4dgNBQYO/eBO9u0QLIkAHYutXM47JhEgwIYWTBwSycZggOXvVFQokScYODBIooCiGio5kZOGoU8N138e6OjGS+wLhxnJUTxiHBgBAm9vgxkxANwcGlS7y9fHkGBU2bMjM6iR2TQtiP06eB6tW5FtCgQby7jx7lEt6xY1y+E8YhdQaEMLGcOYHOnfkFAHfvAgcO8Gv7dmDmTG5jrFo1ZtagQQPA1VXbcQsLppTt1uD18uI2nkTO9N7e3NlTtap5h2XrZGZACI3duBETHOzbB9y5wy2LtWrFLCvUrct8KmHn9HqWx3z0iNtZbNF777HW8L59Cd7drh0rD+7aZeZx2TgJBoSwIEpxJ8L+/QwO9u/ncT9DBgYEsQsgpaKDs7AFX38NrFzJ0pm2FiFGRzPIGT4c+N//Erw7ifIDIg0kGBDCgun17JlgyDfw9maBJBcXlko2BAdVq0oBJLtx+TL3vn73XYInTKt25gxQrRo/6AkUETCkExw8KKXCjU2CASGsSHQ0j5eG4ODgQW5tzJqV9VkMCYnly3M2Wdiob78F/viD1a7eeUfr0RjPn38Cn38OPH/OvgRv+OMPYPRoICiIs2XCeCQYEMKKRUQAJ07EBAeHD/O23LljAoMmTYCSJW0338wuvXzJDj1lygA7dtjOf+7IkcDmzcDVqwne/f77DAQOHDDvsOyBBANC2JDQUAYEhnyD48c5m1CgQNwaB2/pmCuswd9/Ax07AuvWAV26aD0a42jThqVA//473l16PYPcwYOB8eM1GJuNk2BACBsWEhJTAOnAAS4xKAUULx43OMibV+uRilTp2BE4dYrFK2xhL2qRIkC3bsDPP8e769w5lh/et4+fW2FcEgwIYUeePIlbAOniRd5erlzMskLjxlIAyWrcuMH/PA8PYPJkrUeTNiEhQJYswOLFQI8e8e6eNYubDIKCEkwnEGkkwYAQduzePdZ4MQQH165x+blKlbgFkLJk0XqkIlGTJrGl5qlTQOXKWo8m9U6cYHGNEyfYFvQN7u7A7dvAoUMajM0OSDAghHjt5s2YfIP9+4Fbt7hlsWbNmGWFd9+1ve3tVi0igidPpXgidXbWekSps3gx0KsXZwgyZ45zl1JAvnxAnz7ATz9pMzxbJ8GAECJBSjGpO3Zw8PAhix3FLoBUq5YUQNLcuXOM2Pr3B6ZN03o0qfP118Dq1Vz6eIO/f8zGidatzT80eyDBgBAiWZSKKYB04ACXFwzrt7ELIFWrJgWQNDF9OjB0KBtetGmj9WhSrkMHbn3Zvj3eXQsWAAMG8PNmC3mSlkiCASFEqkRHsz1z7AJIL16wAFKjRjEJiRUqSAEks1AKaNuWW0b8/AA3N61HlDIlSrCQQAKJkJ9+ytmBEyc0GJedkGBACGEUkZHxCyCFh7PUfOwCSKVK2U6NHItz7x7339Wuzb361vIP/fIl8wT+/BPo3TvOXUoBhQsDH31k/RsmLJkEA0IIkwgLA44ciQkOjh9nt7n8+WOWFJo2lQJIRrd1K6fcZ84EBg3SejTJY+hJcPQoA5lYrl9nXYy//+bbEqYhwYAQwixCQoB//olJSDx9mld9xYrFLYCUL5/WI7UBgwcDCxcysaNOHa1H83bLl3Mt4NmzePtYFy/mZMHjx0D27BqNzw5IMCCE0MTTpzEFkA4cYM8dAChbNm4BpJw5NR2mdQoP5z/gtWtcuylUSOsRJW38eGDOHC5zvKFPHwaOZ8+af1j2RIIBIYRFuH8/pgDSgQPAlStc8q5cOSY4aNhQCiAl2/373PeZMyezO11ctB5R4gYN4rSRr2+8u0qUANq142YJYToSDAghLFJgYNwaB4GB3LJYo0bcAkhSmjYJvr78R2rblnv4LXVbh7s7p4r27Ilz861bnNSwpV5MlkqCASGExVOKM96xg4MHD1jsqE6dmOCgdm0pgBTPxo1A587AuHHA2LFajyZhhmSRFSvi3LxiBfDJJ5zksLadktZGggEhhNVRik2WDMGBlxcvLDNmjF8AyclJ69FagB9/BL77DlizBvjwQ61HE1/58kCLFsDUqXFuHjAA8PGJaaglTEeCASGE1YuO5oy4Id/Axwd4/pz5BbELIFWsaLkz5SalFC+xN2wAtm0DmjXTekRxubmxeuKYMXFuLluW/39z52o0LjsiwYAQwuZERgInT8YsKRw6xAT7nDnjFkAqXdp66vKkWXg40LEjkwl37wbq1dN6RBQdDaRLB8ybB3z++eubHzwA8uThUkG3bhqOz05IMCCEsHlhYaxnYwgOjh1jAaR8+eIWQCpaVOuRmtjLlzEli/ftS7BVsNk9fMiZgY0bgU6dXt+8bh1XNG7dAgoU0G549kKCASGE3Xn+PG4BpFOnOJNetGjcAkj582s9UhMICQFatgQuX2ayRcWK2o7nwgU2sDh0iDsfXvniC/YsunpVw7HZEQkGhBB27+lT5hkYcg7OnePtpUvHBAeNG7PPgk0ICuKbun2bb7x0ae3G4uXFyOvyZaBkydc3V67MiYs//9RuaPZEggEhhHjDgwcxBZD272cBJIA9gAzBQcOG7NBotR49Ynbes2d8k6VKaTOONWvYhSgo6PU/6JMnDLw8PYGePbUZlr2RYEAIId7i1q24NQ5u3uSuhBo1YhIS69Wz7CJ/Cbp7F2jenNHPtm2sWGhus2YBw4czwfFVNufffzPX8fp1O8jjsBD2uMlGCCFSpGBBoHt3XqneuMF17HnzWCr3r7+AVq3YRKdhQ9b28fbmuc3i5cvH3QWlSjGq2bHD/GN48ADInTvOtg5vb1YelI6W5iMzA0IIkQZKAZcuxeQbHDgQUwCpXr2YZYXq1S24AFJoKNC1KzP2/vwT6NHDfK/t4QEcPoyxHc9ixgyuXJw6xbzGv/9mCWphehIMCCGEEen1MQWQ9u+PKYDk6sqZA0NwUKmShRVAiooCBg5k6+NffgG+/NI8RRi6dwdu3sT/GnljwgT+m+j1vCtzZjYpWrbMggMpGyH/vEIIYUQODkDVqvwaOZIFkE6digkOxoxh3YMcObhDwRAclCmjcQEkJydg/nwuHXz9NXcaTJli+rNweDiQPv3rGkiGQABgEHX6tMwOmIPMDAghhBmFhbHokSE4OHqUF+V588bUN2jaFChWTMPgYM4cYMgQTmWsXMlSgKbSqRMQFYWgZVuRIweXXQAGVVmysJJkiRKme3lBEgwIIYSGXryIXwBJr2fyXOwCSGavwuftzS1/jo4sB1i3rmlep00b9qFevx5lygD+/rzZyYn/JvXrm+ZlRVyWtGIlhBB2x8WFuxF+/hk4fhx4/BjYvJkXzCdPckm9YEHWBRo4EFi7lhV8Ta5RI87RFyvGP8+cGXPZbkzh4UCGDADinvg9PSUQMCfJGRBCCAuSLRvw3nv8Anjij10AydDBr2LFuAWQsmUzwWDy5+fl+ZdfctngyBHmFRizoEKePK/XAQw1Bfr3Bz791HgvId5OlgmEEMKK3L4ds6Swb19MAaTq1WPyDerXN0EBpFWrgL59ecZevpz1go1MKRZGzJXLjrpJWggJBoQQwkopxSp9hhoH+/cD9+6xI3Dt2jH5BnXqAM7ORnjBCxdYj8DfH/j+e+Cbb/hiwupJMCCEEDZCKeDff2OWFLy8WOff2TluAaQaNdKwYzA8HJgwgUkOlSsDixez66CwahIMCCGEjdLrAT+/uAWQQkJYzCd2AaTKlVNRAOnECaBXL3ZxGjcO+OorqQxkxSQYEEIIOxEVFbcA0j//xBRAatQoJjgoWzaZa/ZhYcD48cCvvwLVqnELgMwSWCUJBoQQwk6Fh7PokSHf4OhRVkzMkycmGbFpU6B48bcEB8eOcZbg6lVg6FBg7FjWXxZWQ4IBIYQQAFgA6dChmITEkye51FC4cNzqiAULJvDD4eHA5MnAjz8CrVsj98GDePToUZKv169fP8ybN880b0akiAQDQgghEvTsGfMMDMsKfn68vWTJmFmDxo0BN7dYP/Tff4gKC8Oqo0cTbCoQHByMUaNGITw8HFu3bkWbNm3M8l5E0iQYEEIIkSwPH7JKsSE4MJQOrlAhJjho2jTxFYLw8HC0bt0aXl5emD17NgYOHGi+wYskSTAghBAiVe7ciVsA6b//gNmzgc8/j7+xIDo6Gu7u7tiwYQPGjRuHsWPHajNokSAJBoQQQhjF9essi5w9e/z7+vXrhwULFmDQoEGYOXNmip87KCgIZ8+eBQBUqVIF2UxSf9l+yaZQIYQQRlGsWMK3jxkzBgsWLIC7uzumT5+equf28vLCli1boJRCUFAQOnXqlPqBinika6EQQgiTmT59On766Sc0b94cS5cuhUOKqxuRLtbeRp00LjA6WSYQQghhEitXrsQnn3yC6tWr48CBA8icOXO8x/j6+qJp06YIDAxEpkyZAABDhgzB+fPnsWfPHji9Sj6QZQLTkmBACCGE0e3atQsdOnRAsWLF8M8//yB37tyJPrZFixbo1KkTBg0ahEWLFmHChAk4ceIEcuXKZcYR2zcJBoQQQhjVsWPH0KxZM2TLlg2HDh1CkSJFknz8zp07MWTIECxevBjt27fHgQMHUNkELZJF4iQYEEIIYTSXLl1CgwYNoNfrcfDgQZQvXz5ZP1exYkUEBATA09MT7u7uJh6leJMEA0IIIYwiKCgIlSpVQmBgIDw8PFC3bt0EH+fm5oaWLVu+/nt4eDjq1auH0NBQXLhwwVzDFbFIMCCEEMIodu/ejVatWr31cT169MDixYtf/71nz54IDg7G4cOHsWnTpkSDCGE6EgwIIYTQzOTJk7F06VIcPnwYU6ZMgZ+fH9atW6f1sOyOBANCCCE0sXPnTvTq1QtHjx5F0aJF8ejRIxQrVgy+vr4oXry41sOzKxIMCCGEMDt/f3/Ur18fa9euRePGjV/f7uHhAScnp1RXKhSpI8GAEEIIYeekHLEQQghh5yQYEEIIIeycBANCCCGEnZNgQAghhLBzEgwIIYQQdk6CASGEEMLOSTAghBBC2DkJBoQQQgg7J8GAEEIIYeckGBBCCCHsnAQDQgghhJ2TYEAIIYSwcxIMCCGEEHZOggEhhBDCzkkwIIQQQtg5CQaEEEIIOyfBgBBCCGHnJBgQQggh7JwEA0IIIYSdk2BACCGEsHMSDAghhBB2ToIBIYQQws5JMCCEEELYOQkGhBBCCDsnwYAQQghh5yQYEEIIIeycBANCCCGEnZNgQAghhLBzEgwIIYQQdk6CASGEEMLOSTAghBBC2DkJBoQQQgg793+wymkfnsYHrAAAAABJRU5ErkJggg==",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
    "source": [
-    "# Next we merge W and W @ D\n",
-    "cf_graph_5, preferred_node, eliminated_node = merge_pw(cf_graph_4, W, W @ D)\n",
-    "cf_graph_5.draw()"
+    "![Figure9B.PNG](images/parallel-worlds.png)\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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",
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:34.464476</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 235.060205 79.730121 \n",
+       "Q 238.635244 82.993061 240.558697 84.748597 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 237.346328 76.401101 \n",
+       "L 240.558697 84.748597 \n",
+       "L 231.953279 82.309994 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 221.811948 95.414643 \n",
+       "Q 218.157126 97.05562 216.542194 97.780708 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 225.478715 98.152988 \n",
+       "L 216.542194 97.780708 \n",
+       "L 222.20193 90.854859 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 104.538363 171.176801 \n",
+       "Q 104.897039 171.9164 104.279996 170.644042 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 104.388259 161.700426 \n",
+       "L 104.279996 170.644042 \n",
+       "L 97.190061 165.191262 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 123.321653 159.479657 \n",
+       "Q 149.679702 140.255485 174.231148 122.348955 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 165.410573 123.831342 \n",
+       "L 174.231148 122.348955 \n",
+       "L 170.124713 130.294846 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 236.499361 142.784613 \n",
+       "Q 242.070596 146.920307 245.846388 149.723189 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 241.80702 141.742995 \n",
+       "L 245.846388 149.723189 \n",
+       "L 237.038612 148.166567 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 226.267444 157.630658 \n",
+       "Q 212.530497 161.856077 200.930794 165.42409 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 209.753239 166.895302 \n",
+       "L 200.930794 165.42409 \n",
+       "L 207.40123 159.248861 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 138.622884 172.656 \n",
+       "Q 138.234916 183.456 137.927223 192.021373 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 142.211843 184.170129 \n",
+       "L 137.927223 192.021373 \n",
+       "L 134.217 183.882931 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 157.476309 183.541693 \n",
+       "Q 157.633334 183.455984 155.827635 184.44159 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 146.889155 184.763416 \n",
+       "L 155.827635 184.44159 \n",
+       "L 150.722007 191.78547 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 272.111507 167.543402 \n",
+       "Q 269.769848 170.099701 268.938589 171.007155 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 277.291905 167.809952 \n",
+       "L 268.938589 171.007155 \n",
+       "L 271.392816 162.40618 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 246.59294 180.767865 \n",
+       "Q 239.689063 183.455778 234.868897 185.332431 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 243.775039 186.157439 \n",
+       "L 234.868897 185.332431 \n",
+       "L 240.872589 178.702522 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 104.020205 204.809467 \n",
+       "Q 104.482446 205.056908 102.973304 204.249052 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 97.808045 196.946991 \n",
+       "L 102.973304 204.249052 \n",
+       "L 94.0325 204.000023 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 146.364681 210.484345 \n",
+       "Q 168.302776 205.055912 188.070266 200.16458 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 179.34368 198.203278 \n",
+       "L 188.070266 200.16458 \n",
+       "L 181.265272 205.969067 \n",
+       "z\n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 207.418452 84.055192 \n",
+       "Q 186.478794 127.992184 202.850006 173.827957 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 201.794914 79.471749 \n",
+       "Q 199.701296 82.509164 198.175918 85.868081 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 210.090701 85.360834 \n",
+       "Q 207.557186 97.05881 210.091918 108.756786 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 202.13287 79.838177 \n",
+       "Q 174.867576 109.852185 175.262789 150.398848 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_18\">\n",
+       "    <path d=\"M 180.656622 125.720918 \n",
+       "Q 174.61764 137.386774 174.272365 150.518461 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_19\">\n",
+       "    <path d=\"M 207.691779 125.61571 \n",
+       "Q 212.423967 128.321219 218.544248 129.456 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_20\">\n",
+       "    <path d=\"M 189.025382 129.63101 \n",
+       "Q 186.288675 154.510813 198.657589 176.270445 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_21\">\n",
+       "    <path d=\"M 208.021232 149.184394 \n",
+       "Q 204.234468 160.734459 205.616206 172.810582 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_22\">\n",
+       "    <path d=\"M 198.293855 138.933233 \n",
+       "Q 190.911914 144.326399 185.888578 151.964858 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_23\">\n",
+       "    <path d=\"M 192.428195 189.227979 \n",
+       "Q 200.746067 194.047813 211.948795 194.256 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_24\">\n",
+       "    <path d=\"M 235.502778 107.58887 \n",
+       "Q 233.922238 119.579665 237.477414 131.139983 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_25\">\n",
+       "    <path d=\"M 238.843691 108.363907 \n",
+       "Q 237.947695 134.380672 252.698194 155.830634 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_26\">\n",
+       "    <path d=\"M 260.189829 169.563859 \n",
+       "Q 263.420837 171.465509 267.428188 172.656 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_27\">\n",
+       "    <path d=\"M 83.281008 170.23027 \n",
+       "Q 83.052892 171.081989 82.865547 171.943595 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_28\">\n",
+       "    <path d=\"M 120.053617 189.42221 \n",
+       "Q 127.651857 193.798238 137.846949 194.256 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_29\">\n",
+       "    <path d=\"M 107.542218 194.901639 \n",
+       "Q 108.406458 197.196764 109.547695 199.367495 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_30\">\n",
+       "    <path d=\"M 124.866301 212.462081 \n",
+       "Q 124.669757 214.103214 124.656044 215.856 \n",
+       "\" clip-path=\"url(#p826859fcee)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m4f9fb8842f\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"218.544248\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"242.210283\" y=\"86.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"194.102277\" y=\"107.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"94.780585\" y=\"151.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"105.255715\" y=\"172.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"218.544248\" y=\"129.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"247.641831\" y=\"151.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"177.419663\" y=\"172.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"138.622884\" y=\"172.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"137.846949\" y=\"194.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"287.214545\" y=\"151.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"267.428188\" y=\"172.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"211.948795\" y=\"194.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"84.305455\" y=\"194.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m4f9fb8842f\" x=\"124.656044\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(211.644248 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(232.310283 91.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(187.902277 113.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(86.980585 156.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(98.355715 178.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${X}_{D}$ -->\n",
+       "     <g transform=\"translate(205.944248 134.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${W}_{D}$ -->\n",
+       "     <g transform=\"translate(232.041831 156.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(165.619663 178.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${D}_{D}$ -->\n",
+       "     <g transform=\"translate(125.222884 178.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_10\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${Z}_{D}$ -->\n",
+       "     <g transform=\"translate(125.246949 199.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_11\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 156.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_12\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(252.428188 178.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_13\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(200.748795 199.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_14\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${D}_{X}$ -->\n",
+       "     <g transform=\"translate(71.505455 199.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_15\">\n",
+       "    <g clip-path=\"url(#p826859fcee)\">\n",
+       "     <!-- ${Z}_{X}$ -->\n",
+       "     <g transform=\"translate(112.656044 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p826859fcee\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -353,210 +2218,4590 @@
     }
    ],
    "source": [
-    "# Next we merge Z, Z @ D, and Z @ ~X\n",
-    "cf_graph_6, preferred_node, eliminated_node = merge_pw(cf_graph_5, Z, Z @ D)\n",
-    "cf_graph_7, preferred_node, eliminated_node = merge_pw(cf_graph_6, Z, Z @ ~X)\n",
-    "figure_11b_calculated = cf_graph_7\n",
-    "figure_11b_calculated.draw()"
+    "cf_graph_1.draw()"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![Figure11B.PNG](images/step-4-make-counterfactual.PNG)"
+    "## Merging the Parallel Worlds"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "cf_graph_1 should be a stitched together graph of counterfactual worlds that corresponds to Figure 9b.\n",
+    "Now we will start merging nodes that are equivalent in the two graphs using the topological ordering of (X,D,W,Z,Y)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Finally we merge Y and Y @ D\n",
-    "cf_graph_8, preferred_node, eliminated_node = merge_pw(cf_graph_7, Y, Y @ D)\n",
-    "figure_11c_calculated = cf_graph_8"
+    "# Does Lemma 24 hold for X and X @ D?  Then Merge them together.\n",
+    "if lemma_24_holds(cf_graph_1, {Y @ -x: -y, D: -d, Z @ -d: -z, X: +x}, X, X @ D):\n",
+    "    cf_graph_2, preferred_node, eliminated_node = merge_pw(cf_graph_1, X, X @ D)\n",
+    "    # update the event\n",
+    "    new_event2 = update_event(event, preferred_node, eliminated_node)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![Figure11C.PNG](images/step-5-make-counterfactual.png)"
+    "### Next we merge `D` and `D @ ~x`"
    ]
   },
   {
-   "cell_type": "markdown",
+   "cell_type": "code",
+   "execution_count": 12,
    "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:35.270217</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 214.855604 86.83766 \n",
+       "Q 215.882979 94.895178 216.627533 100.734586 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 219.58356 92.29291 \n",
+       "L 216.627533 100.734586 \n",
+       "L 211.647808 93.304759 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 212.027329 87.014848 \n",
+       "Q 212.027329 90.955424 212.027329 92.659932 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 216.027329 84.659932 \n",
+       "L 212.027329 92.659932 \n",
+       "L 208.027329 84.659932 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 192.602353 105.975756 \n",
+       "Q 185.518664 110.0162 180.377297 112.94877 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 189.308185 112.459646 \n",
+       "L 180.377297 112.94877 \n",
+       "L 185.34453 105.510585 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 92.001358 146.12995 \n",
+       "Q 100.933467 170.496192 109.095964 192.762981 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 110.098133 183.875031 \n",
+       "L 109.095964 192.762981 \n",
+       "L 102.586906 186.628476 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 93.145579 145.678676 \n",
+       "Q 95.232103 150.527338 96.434746 153.322039 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 96.946716 144.392432 \n",
+       "L 96.434746 153.322039 \n",
+       "L 89.598242 147.554699 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 117.399427 145.532865 \n",
+       "Q 128.1667 140.255002 136.926146 135.961329 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 127.982152 135.890762 \n",
+       "L 136.926146 135.961329 \n",
+       "L 131.503296 143.074183 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 210.09298 145.309535 \n",
+       "Q 207.686369 150.342768 206.24433 153.358675 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 213.30399 147.866753 \n",
+       "L 206.24433 153.358675 \n",
+       "L 206.086588 144.415794 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 135.592534 177.513363 \n",
+       "Q 135.0114 181.564682 134.747765 183.402588 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 139.843156 176.051602 \n",
+       "L 134.747765 183.402588 \n",
+       "L 131.924211 174.915683 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 154.992359 176.839682 \n",
+       "Q 169.852371 170.497127 182.655811 165.032359 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 173.727761 164.493916 \n",
+       "L 182.655811 165.032359 \n",
+       "L 176.868227 171.851734 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 270.669824 140.180326 \n",
+       "Q 270.585167 140.257306 272.154883 138.829943 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 280.764801 136.407275 \n",
+       "L 272.154883 138.829943 \n",
+       "L 275.382699 130.488408 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 234.964263 167.17558 \n",
+       "Q 229.617646 170.496972 226.170436 172.638426 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 235.076698 171.814715 \n",
+       "L 226.170436 172.638426 \n",
+       "L 230.855224 165.01919 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 138.701242 208.568241 \n",
+       "Q 161.418966 200.736545 182.022715 193.63362 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 173.155861 192.459355 \n",
+       "L 182.022715 193.63362 \n",
+       "L 175.763191 200.022545 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 200.914348 84.057622 \n",
+       "Q 182.366165 123.667303 196.392007 165.094077 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 191.70257 73.979397 \n",
+       "Q 174.246261 85.014857 165.591923 103.766106 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 201.100444 84.162752 \n",
+       "Q 190.861083 108.69347 197.359317 134.469098 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 164.317308 146.853827 \n",
+       "Q 171.134408 163.799267 185.706121 174.812191 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_18\">\n",
+       "    <path d=\"M 172.280063 143.134166 \n",
+       "Q 177.344809 147.602948 183.470921 150.447777 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_19\">\n",
+       "    <path d=\"M 201.702394 177.446918 \n",
+       "Q 202.829034 181.531459 205.279758 185.616 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_20\">\n",
+       "    <path d=\"M 216.423138 116.821504 \n",
+       "Q 222.147066 132.657328 234.969982 143.571359 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_21\">\n",
+       "    <path d=\"M 213.700884 117.196992 \n",
+       "Q 215.934051 121.366886 219.738838 125.136 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_22\">\n",
+       "    <path d=\"M 231.182445 144.348769 \n",
+       "Q 232.292713 145.412659 233.485135 146.38358 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_23\">\n",
+       "    <path d=\"M 95.93692 177.697237 \n",
+       "Q 97.257133 189.027024 103.024133 198.868467 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_24\">\n",
+       "    <path d=\"M 109.283932 174.268497 \n",
+       "Q 111.279361 176.134722 113.510082 177.712187 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_25\">\n",
+       "    <path d=\"M 119.567487 202.324125 \n",
+       "Q 117.325765 208.399102 117.561339 215.856 \n",
+       "\" clip-path=\"url(#pd18b188191)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"maebddd08b7\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"212.027329\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"212.027329\" y=\"94.896\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"159.010702\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"84.305455\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"97.318627\" y=\"155.376\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"219.738838\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"205.279758\" y=\"155.376\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"138.76799\" y=\"155.376\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"134.430266\" y=\"185.616\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"287.214545\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"253.958661\" y=\"155.376\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"205.279758\" y=\"185.616\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#maebddd08b7\" x=\"117.561339\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(205.127329 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(202.127329 100.41475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(152.810702 130.65475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 130.65475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(90.418627 160.89475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${W}_{D}$ -->\n",
+       "     <g transform=\"translate(204.138838 130.65475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(193.479758 160.89475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${D}_{D}$ -->\n",
+       "     <g transform=\"translate(125.36799 160.89475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${Z}_{D}$ -->\n",
+       "     <g transform=\"translate(121.830266 191.13475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_10\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 130.65475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_11\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(238.958661 160.89475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_12\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(194.079758 191.13475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_13\">\n",
+       "    <g clip-path=\"url(#pd18b188191)\">\n",
+       "     <!-- ${Z}_{X}$ -->\n",
+       "     <g transform=\"translate(105.561339 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pd18b188191\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
-    "The last line of `make-counterfactual-graph()` removes all nodes that are not ancestors of the events $\\left\\{y_{do(X=x')}, z, d\\right\\}$. Thus we remove $\\{Y, W\\}$"
+    "if lemma_24_holds(cf_graph_2, new_event2, D, D @ -x):\n",
+    "    cf_graph_3, preferred_node, eliminated_node = merge_pw(cf_graph_2, D, D @ -X)\n",
+    "    # update_event will be run after each merge_pw\n",
+    "    new_event3 = update_event(new_event2, preferred_node, eliminated_node)\n",
+    "\n",
+    "    figure_11a_calculated = cf_graph_3\n",
+    "    figure_11a_calculated.draw()\n",
+    "else:\n",
+    "    print(f\"{D} and {D @ -x} cannot be merged\")"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![Figure9C.PNG](images/counterfactual-graph.png)"
+    "## Figure 11a Checkpoint"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "X\n",
-      "W\n",
-      "Y\n",
-      "D\n",
-      "Z\n",
-      "X @ +X\n",
-      "W @ +X\n",
-      "Y @ +X\n"
+      "Figure 11a calculated is correct\n"
      ]
     }
    ],
    "source": [
-    "for node in figure_11c_calculated.nodes():\n",
-    "    print(node)"
+    "assert (\n",
+    "    figure_11a_calculated == figure_11a.graph\n",
+    "), \"Calculated figure 11a is not equal to the actual figure 11a\"\n",
+    "print(\"Figure 11a calculated is correct\")"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 15,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "X @ +X\n",
-      "W @ +X\n",
-      "Y @ +X\n",
-      "D\n",
-      "Z\n",
-      "Y\n",
-      "X\n",
-      "W\n"
-     ]
-    }
-   ],
    "source": [
-    "for node in figure_11c.graph.nodes():\n",
-    "    print(node)"
+    "![Figure11A.PNG](images/step-2-make-counterfactual.png)\n"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 16,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "NodeView((X, D, Y @ +X, W @ +X, Z, X @ +X))"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
    "source": [
-    "final_graph[0].nodes()"
+    "## Merging nodes with different parents"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Examples of Notation\n"
+    "We are allowed to merge certain nodes with different parents if the parents attain the same value. In our case we have `Z, Z @ -d`, and `Z @ -x` with parents `D` and `D @ -d` which attain the same values. This means that we can merge the three `Z` nodes. (notice that `D @ -d` disappears when we merge `Z, Z @ -d`)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "text/latex": [
-       "${W}_{X}$"
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:35.919323</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 204.828228 82.260932 \n",
+       "Q 210.776346 89.856201 215.345784 95.691004 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 213.562479 86.926312 \n",
+       "L 215.345784 95.691004 \n",
+       "L 207.264047 91.858833 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 191.041196 87.016693 \n",
+       "Q 191.041196 88.436347 191.041196 87.619932 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 195.041196 79.619932 \n",
+       "L 191.041196 87.619932 \n",
+       "L 187.041196 79.619932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 173.78658 104.077143 \n",
+       "Q 167.126217 109.566571 162.191379 113.633833 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 170.908859 111.632447 \n",
+       "L 162.191379 113.633833 \n",
+       "L 165.820758 105.459017 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 86.756924 137.281342 \n",
+       "Q 89.864427 165.454366 92.726778 191.404802 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 95.825579 183.014484 \n",
+       "L 92.726778 191.404802 \n",
+       "L 87.873804 183.89157 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 95.747796 134.266693 \n",
+       "Q 97.531482 137.261347 98.170909 138.334888 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 97.513671 129.414796 \n",
+       "L 98.170909 138.334888 \n",
+       "L 90.640493 133.508623 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 117.366876 153.454315 \n",
+       "Q 125.574397 159.455158 131.976855 164.136247 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 127.87971 156.185561 \n",
+       "L 131.976855 164.136247 \n",
+       "L 123.158019 162.643551 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 119.988608 131.736542 \n",
+       "Q 129.889277 127.656508 137.722545 124.428444 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 128.801936 123.778263 \n",
+       "L 137.722545 124.428444 \n",
+       "L 131.850034 131.174822 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 210.682983 125.387323 \n",
+       "Q 182.146651 140.255947 155.593351 154.091329 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 164.536377 153.942043 \n",
+       "L 155.593351 154.091329 \n",
+       "L 160.839738 146.847337 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 266.92099 124.442938 \n",
+       "Q 259.974842 127.655932 255.058166 129.930178 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 263.998306 130.202042 \n",
+       "L 255.058166 129.930178 \n",
+       "L 260.639741 122.941185 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 215.540931 154.557123 \n",
+       "Q 202.435112 165.457953 191.048422 174.928889 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 199.756836 172.888416 \n",
+       "L 191.048422 174.928889 \n",
+       "L 194.641092 166.737874 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 116.667774 208.877704 \n",
+       "Q 133.781101 203.256268 148.770036 198.332659 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 139.921273 197.029051 \n",
+       "L 148.770036 198.332659 \n",
+       "L 142.417892 204.629505 \n",
+       "z\n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 178.097314 82.888073 \n",
+       "Q 153.774319 123.484309 165.115999 169.430564 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 173.313995 78.288777 \n",
+       "Q 167.545949 84.877398 164.367223 93.036839 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 172.505644 77.160318 \n",
+       "Q 140.814704 102.788343 135.030487 143.13264 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 154.699389 136.662468 \n",
+       "Q 152.513805 154.986175 160.125364 171.796997 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 143.664576 129.811094 \n",
+       "Q 139.02418 135.96932 136.539871 143.269072 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_18\">\n",
+       "    <path d=\"M 147.812474 182.867489 \n",
+       "Q 149.162478 183.840802 150.591861 184.693287 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_19\">\n",
+       "    <path d=\"M 197.687016 111.202799 \n",
+       "Q 203.305441 122.152497 213.007337 129.724123 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_20\">\n",
+       "    <path d=\"M 205.204811 107.161611 \n",
+       "Q 206.96527 108.428031 208.855039 109.491915 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_21\">\n",
+       "    <path d=\"M 230.894883 137.414339 \n",
+       "Q 231.709087 138.844503 232.734844 140.256 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_22\">\n",
+       "    <path d=\"M 89.309964 160.250197 \n",
+       "Q 83.642689 177.346629 87.523092 194.934515 \n",
+       "\" clip-path=\"url(#p69d0626193)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m23ef667838\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"191.041196\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"191.041196\" y=\"89.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"160.465853\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"84.305455\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"99.315168\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"230.511183\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"133.781918\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"287.214545\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"232.734844\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"172.140075\" y=\"190.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m23ef667838\" x=\"95.423761\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(184.141196 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(181.141196 95.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(154.265853 120.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 120.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(92.415168 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${W}_{D}$ -->\n",
+       "     <g transform=\"translate(214.911183 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(121.981918 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(217.734844 145.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_10\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(160.940075 196.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_11\">\n",
+       "    <g clip-path=\"url(#p69d0626193)\">\n",
+       "     <!-- ${Z}_{X}$ -->\n",
+       "     <g transform=\"translate(83.423761 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p69d0626193\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
       ],
       "text/plain": [
-       "W @ -X"
+       "<Figure size 640x480 with 1 Axes>"
       ]
      },
-     "execution_count": 17,
      "metadata": {},
-     "output_type": "execute_result"
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "W @ X"
+    "if lemma_24_holds(cf_graph_3, new_event3, Z, Z @ -d):\n",
+    "    cf_graph_4a, preferred_node, eliminated_node = merge_pw(cf_graph_3, Z, Z @ -d)\n",
+    "    # update the event\n",
+    "    new_event4a = update_event(new_event3, preferred_node, eliminated_node)\n",
+    "    cf_graph_4a.draw()\n",
+    "else:\n",
+    "    print(f\"{Z} and {Z @ -d} cannot be merged\")\n",
+    "if lemma_24_holds(cf_graph_4a, new_event4a, Z, Z @ -x):\n",
+    "    cf_graph_4b, preferred_node, eliminated_node = merge_pw(cf_graph_4a, Z, Z @ -x)\n",
+    "    # update the event\n",
+    "    new_event4b = update_event(new_event4a, preferred_node, eliminated_node)\n",
+    "else:\n",
+    "    print(f\"{Z} and {Z @ -x} cannot be merged\")"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": 18,
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/latex": [
-       "$W^*$"
-      ],
-      "text/plain": [
-       "+W"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
    "source": [
-    "~W"
+    "### Next we merge W and W @ D"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "text/latex": [
-       "$P({Y}_{X} | D, X^*, {Z}_{D})$"
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:36.522601</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 145.14211 81.248871 \n",
+       "Q 151.305014 88.072436 155.969155 93.23657 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 153.575495 84.618543 \n",
+       "L 155.969155 93.23657 \n",
+       "L 147.638538 89.980682 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 142.785385 111.754652 \n",
+       "Q 136.958345 118.445326 132.599865 123.449782 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 140.870345 120.044027 \n",
+       "L 132.599865 123.449782 \n",
+       "L 134.837549 114.789945 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 143.430675 112.301903 \n",
+       "Q 120.886117 140.256706 99.74527 166.470936 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 107.880971 162.754705 \n",
+       "L 99.74527 166.470936 \n",
+       "L 101.653706 157.732636 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 204.228511 147.310277 \n",
+       "Q 204.748909 151.343139 204.983139 153.158319 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 207.92642 144.71219 \n",
+       "L 204.983139 153.158319 \n",
+       "L 199.992204 145.736017 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 205.269308 177.734848 \n",
+       "Q 205.269308 185.615484 205.269308 191.260052 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 209.269308 183.260052 \n",
+       "L 205.269308 191.260052 \n",
+       "L 201.269308 183.260052 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 183.574222 160.799599 \n",
+       "Q 144.786757 170.496156 108.1686 179.650404 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.899868 181.590754 \n",
+       "L 108.1686 179.650404 \n",
+       "L 114.959641 173.8296 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 184.56732 146.931908 \n",
+       "Q 168.202867 140.257044 153.908871 134.426695 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 159.805651 141.15187 \n",
+       "L 153.908871 134.426695 \n",
+       "L 162.827079 133.744376 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 287.214545 117.254848 \n",
+       "Q 287.214545 121.195424 287.214545 122.899932 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 291.214545 114.899932 \n",
+       "L 287.214545 122.899932 \n",
+       "L 283.214545 114.899932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 272.22743 141.727948 \n",
+       "Q 246.242537 170.495324 221.756496 197.60335 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 230.087288 194.347906 \n",
+       "L 221.756496 197.60335 \n",
+       "L 224.150616 188.98545 \n",
+       "z\n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 129.571959 87.011751 \n",
+       "Q 131.728432 158.133452 187.103192 202.81723 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 122.303148 85.589148 \n",
+       "Q 120.687867 95.05545 122.607186 104.464738 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 113.625466 79.71441 \n",
+       "Q 80.404767 114.968405 81.910334 163.385513 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 136.087617 146.939108 \n",
+       "Q 148.695725 186.435194 184.889574 206.656591 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 111.486119 135.815859 \n",
+       "Q 96.686443 146.835717 89.724481 163.923823 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 101.234776 200.218931 \n",
+       "Q 138.153208 227.262758 183.454187 220.775328 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 174.558692 109.315707 \n",
+       "Q 215.575062 139.040427 265.506584 130.514126 \n",
+       "\" clip-path=\"url(#p789d85d96a)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"mfb285ddc84\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"130.155766\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"157.467919\" y=\"94.896\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"131.131305\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"201.367153\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"205.269308\" y=\"155.376\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"84.305455\" y=\"185.616\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"287.214545\" y=\"94.896\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"287.214545\" y=\"125.136\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mfb285ddc84\" x=\"205.269308\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(123.255766 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(147.567919 100.41475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(124.931305 130.65475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(193.567153 130.65475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(198.369308 160.89475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(72.505455 191.13475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 100.41475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(272.214545 130.65475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#p789d85d96a)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(194.069308 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p789d85d96a\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
       ],
       "text/plain": [
-       "P(Y @ -X | D, +X, Z @ -D)"
+       "<Figure size 640x480 with 1 Axes>"
       ]
      },
-     "execution_count": 19,
      "metadata": {},
-     "output_type": "execute_result"
+     "output_type": "display_data"
     }
    ],
    "source": [
-    "P(Y @ X | ~X, Z @ D, D)"
+    "if lemma_24_holds(cf_graph_4b, new_event4b, W, W @ -d):\n",
+    "    cf_graph_5, preferred_node, eliminated_node = merge_pw(cf_graph_4b, W, W @ -d)\n",
+    "    # update the event\n",
+    "    new_event5 = update_event(new_event4b, preferred_node, eliminated_node)\n",
+    "    figure_11b_calculated = cf_graph_5\n",
+    "    figure_11b_calculated.draw()\n",
+    "else:\n",
+    "    print(f\"{W} and {W @ -d} cannot be merged\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Next we (attempt to) merge Y and Y @ X"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
-     "data": {
-      "text/plain": [
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Y and Y @ -X cannot be merged\n"
+     ]
+    }
+   ],
+   "source": [
+    "if lemma_24_holds(cf_graph_5, new_event5, Y, Y @ -x):\n",
+    "    cf_graph_6, preferred_node, eliminated_node = merge_pw(cf_graph_5, Y, Y @ -x)\n",
+    "    # update the event\n",
+    "    new_event6 = update_event(new_event5, preferred_node, eliminated_node)\n",
+    "else:\n",
+    "    print(f\"{Y} and {Y @ -x} cannot be merged\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Figure 11b Checkpoint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Figure 11b calculated is correct\n"
+     ]
+    }
+   ],
+   "source": [
+    "assert (\n",
+    "    figure_11b_calculated == figure_11b.graph\n",
+    "), \"Calculated figure 11b is not equal to the actual figure 11b\"\n",
+    "\n",
+    "print(\"Figure 11b calculated is correct\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Figure11B.PNG](images/step-4-make-counterfactual.PNG)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Next, we (attempt to) merge `Y` and `Y @ -d`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{Y @ -X: -Y, X: +X, D: -D, Z: -Z}"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:36.988897</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 171.81 87.012079 \n",
+       "Q 171.81 94.73404 171.81 100.219932 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 175.81 92.219932 \n",
+       "L 171.81 100.219932 \n",
+       "L 167.81 92.219932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 151.282429 111.32345 \n",
+       "Q 128.056741 121.356426 106.883783 130.502669 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 115.814093 131.002231 \n",
+       "L 106.883783 130.502669 \n",
+       "L 112.641618 123.658158 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 175.614545 162.612079 \n",
+       "Q 175.614545 170.33404 175.614545 175.819932 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 179.614545 167.819932 \n",
+       "L 175.614545 175.819932 \n",
+       "L 171.614545 167.819932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 194.12486 190.595246 \n",
+       "Q 203.514423 196.955917 211.052703 202.062494 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 206.672746 194.264034 \n",
+       "L 211.052703 202.062494 \n",
+       "L 202.185961 200.887384 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 154.952408 169.50232 \n",
+       "Q 129.958203 159.155256 107.030026 149.663484 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 112.891684 156.419293 \n",
+       "L 107.030026 149.663484 \n",
+       "L 115.951668 149.027643 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 287.214545 124.812079 \n",
+       "Q 287.214545 132.53404 287.214545 138.019932 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 291.214545 130.019932 \n",
+       "L 287.214545 138.019932 \n",
+       "L 283.214545 130.019932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 273.937183 158.244684 \n",
+       "Q 259.316134 178.053848 246.022978 196.06393 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 253.992092 192.002747 \n",
+       "L 246.022978 196.06393 \n",
+       "L 247.5555 187.251929 \n",
+       "z\n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 169.366718 86.883137 \n",
+       "Q 165.95055 154.314813 214.4621 201.276065 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 150.152924 70.233431 \n",
+       "Q 111.872378 83.725627 92.966021 119.642816 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 97.118147 158.58498 \n",
+       "Q 139.955253 212.898773 209.054845 216.108726 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 187.691175 118.202795 \n",
+       "Q 221.293247 146.455457 265.09914 143.555546 \n",
+       "\" clip-path=\"url(#p299420d382)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"ma8c65d96af\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"171.81\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"171.81\" y=\"102.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"84.305455\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"175.614545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"175.614545\" y=\"178.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"287.214545\" y=\"102.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"287.214545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#ma8c65d96af\" x=\"231.414545\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(164.91 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(161.91 107.97475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(78.105455 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(167.814545 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(168.714545 183.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 107.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(272.214545 145.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p299420d382)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(220.214545 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p299420d382\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "if lemma_24_holds(cf_graph_5, new_event5, Y, Y @ -d):\n",
+    "    cf_graph_7, preferred_node, eliminated_node = merge_pw(cf_graph_5, Y, Y @ -d)\n",
+    "    figure_11c_calculated = cf_graph_7\n",
+    "    # update the event\n",
+    "    new_event7 = update_event(new_event5, preferred_node, eliminated_node)\n",
+    "    figure_11c_calculated.draw()\n",
+    "    display(new_event7)\n",
+    "else:\n",
+    "    print(f\"{Y} and {Y @ -d} cannot be merged\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Figure11C.PNG](images/step-5-make-counterfactual.png)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Figure 11c Checkpoint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Figure 11c calculated is correct\n"
+     ]
+    }
+   ],
+   "source": [
+    "assert (\n",
+    "    figure_11c_calculated == figure_11c.graph\n",
+    "), \"Calculated figure 11c is not equal to the actual figure 11c\"\n",
+    "\n",
+    "print(\"Figure 11c calculated is correct\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Return only the ancestors of events"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:37.377889</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 215.856 \n",
+       "Q 185.760943 215.856 262.616893 215.856 \n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.616893 211.856 \n",
+       "L 262.616893 215.856 \n",
+       "L 254.616893 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 164.706568 64.656 \n",
+       "Q 136.068228 64.656 109.665955 64.656 \n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 117.665955 68.656 \n",
+       "L 109.665955 64.656 \n",
+       "L 117.665955 60.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 107.422257 64.656 \n",
+       "Q 185.906039 64.656 262.153753 64.656 \n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.153753 60.656 \n",
+       "L 262.153753 64.656 \n",
+       "L 254.153753 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 287.145576 193.499921 \n",
+       "Q 286.981325 140.258615 286.823972 89.253366 \n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 282.848671 97.265669 \n",
+       "L 286.823972 89.253366 \n",
+       "L 290.848633 97.240988 \n",
+       "z\n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 267.084024 75.303437 \n",
+       "Q 200.275092 116.119569 188.991045 193.593122 \n",
+       "\" clip-path=\"url(#p3c4ecc4428)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"md5f4e19943\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"286.748088\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"187.066082\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"186.926144\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"85.064614\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5f4e19943\" x=\"287.214545\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(275.548088 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(175.066082 70.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(180.026144 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(70.064614 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p3c4ecc4428)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(280.314545 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p3c4ecc4428\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# this doesn't quite work yet but I will add it in soon\n",
+    "ancestors = cf_graph_7.ancestors_inclusive(new_event7)\n",
+    "return_graph = cf_graph_7.subgraph(ancestors)\n",
+    "figure_9c_calculated = return_graph\n",
+    "figure_9c_calculated.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:37.811307</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 164.941744 64.656 \n",
+       "Q 136.18534 64.656 109.665003 64.656 \n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 117.665003 68.656 \n",
+       "L 109.665003 64.656 \n",
+       "L 117.665003 60.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 107.426168 64.656 \n",
+       "Q 186.139822 64.656 262.617408 64.656 \n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.617408 60.656 \n",
+       "L 262.617408 64.656 \n",
+       "L 254.617408 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 106.664202 215.856 \n",
+       "Q 135.73334 215.856 162.56641 215.856 \n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 154.56641 211.856 \n",
+       "L 162.56641 215.856 \n",
+       "L 154.56641 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 199.502684 197.207477 \n",
+       "Q 237.190036 140.253787 273.643435 85.164865 \n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.892912 89.6291 \n",
+       "L 273.643435 85.164865 \n",
+       "L 272.56451 94.043824 \n",
+       "z\n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 276.938395 84.517738 \n",
+       "Q 252.424731 140.366682 277.285419 196.062953 \n",
+       "\" clip-path=\"url(#p76737364d4)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"mba96432861\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"187.302857\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"85.066364\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"187.162597\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mba96432861\" x=\"287.682078\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(175.302857 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(70.066364 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(276.014545 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(180.262597 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p76737364d4)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(280.782078 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p76737364d4\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "figure_9c.graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The last line of `make-counterfactual-graph()` removes all nodes that are not ancestors of the events $\\left\\{y_{do(X=x')}, z, d\\right\\}$. Thus we remove $\\{Y, W\\}$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Figure9C.PNG](images/counterfactual-graph.png)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Figure 9c Checkpoint"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Figure 9c calculated is correct\n"
+     ]
+    }
+   ],
+   "source": [
+    "assert (\n",
+    "    figure_9c_calculated == figure_9c.graph\n",
+    "), \"Calculated figure 9c is not equal to the actual figure 9c\"\n",
+    "print(\"Figure 9c calculated is correct\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "# ID* Algorithm\n",
+    "\n",
+    "$\\text{function }\\mathbf{ ID^*}\\left(G, \\gamma\\right) \\\\ \\text{INPUT: } \\text{ $G$ a causal diagram, $\\gamma$ a conjunction of counterfactual events}. \\\\  \\text{OUTPUT:  an expression for $P(\\gamma)$ in terms of $P_*$ or $\\mathbf{FAIL}$} $\n",
+    "\n",
+    "* 1 if $\\gamma=\\varnothing$, return 1 \n",
+    "* 2 if ($\\exists x_{x'..} \\in \\gamma$), return 0\n",
+    "* 3 if ($\\exists x_{x..} \\in \\gamma$), return $\\mathbf{ ID^*}(G,\\gamma \\backslash \\{x_{x..}\\})$\n",
+    "* 4 $(G',\\gamma')=\\mathbf{make-cg}(G,\\gamma)$\n",
+    "* 5 if $\\gamma'= \\mathbf{INCONSISTENT}$ return 0\n",
+    "* 6 if $C(G')=\\{S^1,...,S^k\\},$ return $\\sum_{\\mathbf{V}(G')\\backslash\\gamma}\\prod_{i}\\mathbf{ID^*}(G,s^i_{\\mathbf{v}(G')\\backslash s^i})$\n",
+    "* 7 if $C(G')=\\{S\\}$ then\n",
+    "    * 8 if $\\exists \\mathbf{x,x'}$ s.t. $\\mathbf{x} \\neq \\mathbf{x',x} \\in \\mathbf{sub}(S),\\mathbf{x'} \\in \\mathbf{ev}(S),$ throw $\\mathbf{FAIL}$\n",
+    "    * 9 else, let $\\mathbf{x} = \\bigcup \\mathbf{sub}(S)$ return $P_\\mathbf{x}(\\mathbf{var}(S))$\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{W} P(D) P({W}_{X}) P({X}_{W, Z}, {Y}_{W, Z}) P({Z}_{D})$"
+      ],
+      "text/plain": [
+       "Sum[W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D))"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "event = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}\n",
+    "expected = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(Z @ -d) * P(W @ -x) * P(D))\n",
+    "expected = canonicalize(expected)\n",
+    "expected"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## ID* Walkthrough\n",
+    "\n",
+    "We are going to start with the same graph that we started with for the make counterfactual graph walkthrough. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Figure9A.PNG](images/factual-world.PNG)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## ID* lines 1 through 4\n",
+    "On line 1 we check that the event is not empty. We move on to line 2 we note that $\\gamma$ does not contain any inconsistencies. One line 3 we verify that $\\gamma$ doesn't have any self interventions (if it does we will remove them from the query and run ID* on the new query). Finally on line 4 we run make-cg and obtain the counterfactual graph from before"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Passed ID* line 1\n",
+      "Passed ID* line 2\n",
+      "Passed ID* line 3\n"
+     ]
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:38.218563</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 215.856 \n",
+       "Q 185.760943 215.856 262.616893 215.856 \n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.616893 211.856 \n",
+       "L 262.616893 215.856 \n",
+       "L 254.616893 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 164.706568 64.656 \n",
+       "Q 136.068228 64.656 109.665955 64.656 \n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 117.665955 68.656 \n",
+       "L 109.665955 64.656 \n",
+       "L 117.665955 60.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 107.422257 64.656 \n",
+       "Q 185.906039 64.656 262.153753 64.656 \n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.153753 60.656 \n",
+       "L 262.153753 64.656 \n",
+       "L 254.153753 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 287.145576 193.499921 \n",
+       "Q 286.981325 140.258615 286.823972 89.253366 \n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 282.848671 97.265669 \n",
+       "L 286.823972 89.253366 \n",
+       "L 290.848633 97.240988 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 267.084024 75.303437 \n",
+       "Q 200.275092 116.119569 188.991045 193.593122 \n",
+       "\" clip-path=\"url(#pe4d595913e)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m8d1f0fcbf4\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"286.748088\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"187.066082\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"186.926144\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"85.064614\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8d1f0fcbf4\" x=\"287.214545\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(275.548088 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(175.066082 70.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(180.026144 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(70.064614 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#pe4d595913e)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(280.314545 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pe4d595913e\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "assert event is not None, \"ID* line 1 failed, return One()\"\n",
+    "print(\"Passed ID* line 1\")\n",
+    "\n",
+    "# Line 2: This violates the Axiom of Effectiveness\n",
+    "assert not violates_axiom_of_effectiveness(event), \"ID* line 2 failed, return Zero()\"\n",
+    "print(\"Passed ID* line 2\")\n",
+    "\n",
+    "# Line 3: This is a tautological event and can be removed without affecting the probability\n",
+    "reduced_event = remove_event_tautologies(event)\n",
+    "if reduced_event == event:\n",
+    "    print(\"Passed ID* line 3\")\n",
+    "else:\n",
+    "    print(\"Reduction occurs on ID* line 3\")\n",
+    "\n",
+    "cf_graph, new_event = make_counterfactual_graph(figure_9a.graph, event)\n",
+    "cf_graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "![Figure9C.PNG](images/counterfactual-graph.png)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Passed ID* line 5\n"
+     ]
+    }
+   ],
+   "source": [
+    "# We check that the new event $\\gamma '$ is not inconsistent\n",
+    "assert new_event is not None, \"ID* line 5 failed, return Zero()\"\n",
+    "print(\"Passed ID* line 5\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## ID* line 6, calculate the C-components\n",
+    "$\\text{Line 6 is only triggered if the counterfactual graph contains more than 1 C-component.} \\\\\n",
+    "\\text{On line 6 we calculate the C-components of the counterfactual graph and then call ID* on each of these C-components.} \\\\\n",
+    "\\text{We return the sum over the vertices which are in the counterfactual graph but not in the event times the product of a recursive call to ID* for each C-component.} \\\\\n",
+    "\\text{The recursive call to ID* will have the original graph and new interventions, these interventions will be the markov pillow of the C-component}$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "nodes = set(node for node in cf_graph.nodes() if is_not_self_intervened(node))\n",
+    "C_components = cf_graph.subgraph(nodes).get_c_components()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## ID* line 6, get the markov pillow of each C-component\n",
+    "$\\text{For each C-component we will intervene on the nodes that are needed to infer the value of the C-componenet (Markov Pillow)} \\\\\n",
+    "$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "C-Component:frozenset({D}) Interventions: {D: -D}\n",
+      "C-Component:frozenset({Y @ -X, X}) Interventions: {Y @ (-W, -Z): -Y, X @ (-W, -Z): +X}\n",
+      "C-Component:frozenset({W @ -X}) Interventions: {W @ -X: -W}\n",
+      "C-Component:frozenset({Z}) Interventions: {Z @ -D: -Z}\n"
+     ]
+    }
+   ],
+   "source": [
+    "for c_component in C_components:\n",
+    "    print(\n",
+    "        f\"C-Component:{c_component} Interventions: {get_events_of_district(cf_graph,c_component,new_event)}\"\n",
+    "    )"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Recursive calls for each C-component\n",
+    "$\\text{For each C-component there are no self interventions or empty events so we move past the first 5 lines.}\\\\\n",
+    "\\text{ At line 6 we find in each case there is only 1 c-component, so we move to line 7 } \\\\\n",
+    "\\text{ We find no conflicts on line 8 and return the probability on line 9}\n",
+    "$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Passed ID* line 1\n",
+      "Passed ID* line 2\n",
+      "Passed ID* line 3\n",
+      "Passed ID* line 5\n",
+      "Only 1 c-component, move past line 6\n",
+      "Passed ID* line 8\n",
+      "line 9 returns  P(D)\n",
+      "Passed ID* line 1\n",
+      "Passed ID* line 2\n",
+      "Passed ID* line 3\n",
+      "Passed ID* line 5\n",
+      "Only 1 c-component, move past line 6\n",
+      "Passed ID* line 8\n",
+      "line 9 returns  P(X @ (-W, -Z), Y @ (-W, -Z))\n",
+      "Passed ID* line 1\n",
+      "Passed ID* line 2\n",
+      "Passed ID* line 3\n",
+      "Passed ID* line 5\n",
+      "Only 1 c-component, move past line 6\n",
+      "Passed ID* line 8\n",
+      "line 9 returns  P(W @ -X)\n",
+      "Passed ID* line 1\n",
+      "Passed ID* line 2\n",
+      "Passed ID* line 3\n",
+      "Passed ID* line 5\n",
+      "Only 1 c-component, move past line 6\n",
+      "Passed ID* line 8\n",
+      "line 9 returns  P(Z @ -D)\n"
+     ]
+    }
+   ],
+   "source": [
+    "for c_component in C_components:\n",
+    "    r_event = get_events_of_district(cf_graph, c_component, new_event)\n",
+    "\n",
+    "    assert r_event is not None, \"ID* line 1 failed, return One()\"\n",
+    "    print(\"Passed ID* line 1\")\n",
+    "\n",
+    "    # Line 2: This violates the Axiom of Effectiveness\n",
+    "    assert not violates_axiom_of_effectiveness(r_event), \"ID* line 2 failed, return Zero()\"\n",
+    "    print(\"Passed ID* line 2\")\n",
+    "\n",
+    "    # Line 3: This is a tautological event and can be removed without affecting the probability\n",
+    "    reduced_event = remove_event_tautologies(r_event)\n",
+    "    if reduced_event == r_event:\n",
+    "        print(\"Passed ID* line 3\")\n",
+    "    else:\n",
+    "        print(\"Reduction occurs on ID* line 3\")\n",
+    "\n",
+    "    r_cf_graph, r_new_event = make_counterfactual_graph(figure_9a.graph, r_event)\n",
+    "\n",
+    "    assert r_new_event is not None, \"ID* line 5 failed, return Zero()\"\n",
+    "    print(\"Passed ID* line 5\")\n",
+    "    nodes = set(node for node in r_cf_graph.nodes() if is_not_self_intervened(node))\n",
+    "    if r_cf_graph.subgraph(nodes).is_connected():\n",
+    "        print(\"Only 1 c-component, move past line 6\")\n",
+    "\n",
+    "    # Here is line 8.  We check for inconsistencies in the subscripts\n",
+    "    assert not any(\n",
+    "        intervention.name == evidence.name and intervention.star != evidence.star\n",
+    "        for intervention in get_cf_interventions(r_cf_graph.subgraph(nodes))\n",
+    "        for evidence in get_evidence(r_new_event)\n",
+    "    ), \"ID* line 8 found inconsistencies, return Unidentifiable\"\n",
+    "    print(\"Passed ID* line 8\")\n",
+    "\n",
+    "    # We have reached line 9, return the probability.\n",
+    "    if len(get_cf_interventions(r_cf_graph.subgraph(nodes))) > 0:\n",
+    "        print(\n",
+    "            \"line 9 returns \",\n",
+    "            P[get_cf_interventions(r_cf_graph.subgraph(nodes))](node.get_base() for node in nodes),\n",
+    "        )\n",
+    "    else:\n",
+    "        print(\"line 9 returns \", P(node.get_base() for node in nodes))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{W} P(D) P({W}_{X}) P({X}_{W, Z}, {Y}_{W, Z}) P({Z}_{D})$"
+      ],
+      "text/plain": [
+       "Sum[W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D))"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "actual = canonicalize(id_star(figure_9a.graph, event))\n",
+    "actual"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Sum[W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D))\n",
+      "Sum[W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D))\n",
+      "actual is equal to expected!!\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(expected)\n",
+    "print(actual)\n",
+    "assert expected == actual, \"expected was not equal to actual\"\n",
+    "print(\"actual is equal to expected!!\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# IDC* algorithm\n",
+    "\n",
+    "The **IDC***, like its counterpart **IDC**, is shorter. \n",
+    "\n",
+    "\n",
+    "The first line fails if $\\gamma$ is inconsistent. **IDC** did not have an equivalent line, since we can assume $P(\\mathbf{v})$ is positive. The problem with counterfactual distributions is there is no simple way to prevent non-positive distributions spanning multiple worlds from arising, even if the original P(v) was positive—hence the explicit check. \n",
+    "\n",
+    "1. if $\\mathbf{ID*}(G,\\delta)=0$, return **UNDEFINED**\n",
+    "\n",
+    "The second line constructs the counterfactual graph, except since make-cg can only take conjunctions, we provide it with a joint counterfactual γ ^ δ. \n",
+    "\n",
+    "2. $(G',\\gamma'\\wedge\\delta')=\\mathbf{make-cg}(G,\\gamma\\wedge\\delta)$\n",
+    "\n",
+    "Line 3 returns 0 if an inconsistency was detected. \n",
+    "\n",
+    "3. if $\\gamma'\\wedge\\delta' =$  **INCONSISTENT**, return $0$\n",
+    "\n",
+    "\n",
+    "Line 4 of **IDC*** is the central line of the algorithm and is analogous to line 1 of **IDC**. In **IDC**, we moved value assignment $Z = z$ from being observed to being fixed if there were no back-door paths from $Z$ to the outcome variables $\\mathbf{Y}$ given the context of the effect of $do(\\mathbf{x})$. Here in **IDC***, we move a counterfactual value assignment $Y_\\mathbf{x} = y$ from being observed (that is being a part of $\\delta$), to being fixed (that is appearing in every subscript of $\\gamma'$) if there are no back-door paths from $Y_\\mathbf{x}$ to the counterfactual of interest $\\gamma'$.\n",
+    "\n",
+    "$$\\newcommand\\ci{\\perp\\!\\!\\!\\perp}$$\n",
+    "$$\\newcommand{\\ubar}[1]{\\underset{\\bar{}}{#1}}\n",
+    "\\newcommand{\\obar}[1]{\\overset{\\bar{}}{#1}}$$\n",
+    "\n",
+    "4. if $(\\exists y_\\mathbf{x}\\in\\delta')$ s.t. $(Y_\\mathbf{x} \\ci \\gamma')_{G'_{\\ubar{y_\\mathbf{x}}}}$, return $\\mathbf{IDC^*}(G, \\gamma'_{y_\\mathbf{X}},\\delta'\\backslash\\{y_{\\mathbf{X}}\\})$\n",
+    "\n",
+    "Finally, line 5 of **IDC*** is the analogue of line 2 of **IDC**, we attempt to identify a joint counterfactual probability, and then obtain a conditional counterfactual probability from the result.\n",
+    "\n",
+    "5. else, let $P'=\\mathbf{ID^*}(G,\\gamma'\\wedge\\delta')$. return $\\frac{P'}{P'(\\delta)}$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "({Y @ -Z: +Y}, {Y @ -X: -Y})"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "old_condition = {Y @ -x: -y, Y @ -z: +y}\n",
+    "new_condition = {Y: -y, Y @ -z: +y}\n",
+    "old_outcome = {Y @ -w: -y}\n",
+    "new_outcome = {Y: -y}\n",
+    "# P(Y: +y | +y)\n",
+    "new_outcome = {Y: -y}\n",
+    "remain_condition, missing_condition = get_remaining_and_missing_events(new_condition, old_condition)\n",
+    "remain_condition, missing_condition"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "expected_new_outcomes_and_conditions = {Y: -y}, {Y: -y, Y @ -z: +y}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "({Y: -Y}, {Y @ -Z: +Y, Y: -Y})"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "get_new_outcomes_and_conditions(\n",
+    "    new_event=new_outcome | new_condition, outcomes=old_outcome, conditions=old_condition\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:38.653842</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 64.656 \n",
+       "Q 185.760943 64.656 262.616893 64.656 \n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.616893 60.656 \n",
+       "L 262.616893 64.656 \n",
+       "L 254.616893 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 84.305455 87.012079 \n",
+       "Q 84.305455 140.253385 84.305455 191.258623 \n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 88.305455 183.258623 \n",
+       "L 84.305455 191.258623 \n",
+       "L 80.305455 183.258623 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 269.284758 78.016583 \n",
+       "Q 185.760969 140.255278 104.03019 201.157891 \n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 112.835113 199.585214 \n",
+       "L 104.03019 201.157891 \n",
+       "L 108.055002 193.170345 \n",
+       "z\n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 103.962892 75.307838 \n",
+       "Q 185.758683 114.876253 267.554475 75.309112 \n",
+       "\" clip-path=\"url(#pe325aba0ec)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"mbfcf5d9063\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pe325aba0ec)\">\n",
+       "     <use xlink:href=\"#mbfcf5d9063\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mbfcf5d9063\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#mbfcf5d9063\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pe325aba0ec)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(77.405455 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pe325aba0ec)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(280.314545 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pe325aba0ec)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(78.105455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pe325aba0ec\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "input_graph = tikka_figure_2.graph\n",
+    "input_graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 35,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$P({Y}_{X, Z})$"
+      ],
+      "text/plain": [
+       "P(Y @ (-X, -Z))"
+      ]
+     },
+     "execution_count": 35,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "input_outcome = {Y @ -x: -y}\n",
+    "input_condition = {X: +x, Z @ -x: -z}\n",
+    "idc_star(input_graph, input_outcome, input_condition)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{frozenset({-D})}"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "variables = {Z @ -d}\n",
+    "\n",
+    "variable = Z @ -d\n",
+    "isinstance(variable, CounterfactualVariable)\n",
+    "set(\n",
+    "    World(variable.interventions)\n",
+    "    for variable in variables\n",
+    "    if isinstance(variable, CounterfactualVariable)\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{frozenset({-D})}"
+      ]
+     },
+     "execution_count": 37,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "set(\n",
+    "    World(variable.interventions)\n",
+    "    for variable in variables\n",
+    "    if isinstance(variable, CounterfactualVariable)\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:39.122761</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 170.684425 92.695307 \n",
+       "Q 170.684425 89.856121 170.684425 89.253004 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 166.684425 97.253004 \n",
+       "L 170.684425 89.253004 \n",
+       "L 174.684425 97.253004 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 266.691617 106.179706 \n",
+       "Q 228.95002 89.856231 193.260759 74.420404 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 199.015545 81.267479 \n",
+       "L 193.260759 74.420404 \n",
+       "L 202.191291 73.924821 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 171.13778 143.095307 \n",
+       "Q 171.091875 140.256121 171.082119 139.652712 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 167.211973 147.716332 \n",
+       "L 171.082119 139.652712 \n",
+       "L 175.210928 147.587001 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 84.305455 193.495307 \n",
+       "Q 84.305455 190.656121 84.305455 190.053004 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 80.305455 198.053004 \n",
+       "L 84.305455 190.053004 \n",
+       "L 88.305455 198.053004 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 287.214545 143.095307 \n",
+       "Q 287.214545 140.256121 287.214545 139.653004 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 283.214545 147.653004 \n",
+       "L 287.214545 139.653004 \n",
+       "L 291.214545 147.653004 \n",
+       "z\n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 148.399977 66.475214 \n",
+       "Q 117.244599 72.284898 96.856445 96.548188 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 148.399977 116.875214 \n",
+       "Q 117.244599 122.684898 96.856445 146.948188 \n",
+       "\" clip-path=\"url(#pd7df21498f)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m9d18cfe6ec\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"170.684425\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"84.305455\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"170.684425\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"84.305455\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"287.214545\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"171.499321\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m9d18cfe6ec\" x=\"287.214545\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- ${Y}_{D, X}$ -->\n",
+       "     <g transform=\"translate(150.484425 69.456) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-2c\" d=\"M 750 794 \n",
+       "L 1409 794 \n",
+       "L 1409 256 \n",
+       "L 897 -744 \n",
+       "L 494 -744 \n",
+       "L 750 256 \n",
+       "L 750 794 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(114.985352 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(150.874023 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(77.405455 120.57475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- ${Z}_{D, X}$ -->\n",
+       "     <g transform=\"translate(149.784425 119.856) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(122.407227 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(158.295898 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(77.405455 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- ${W}_{D, X}$ -->\n",
+       "     <g transform=\"translate(263.214545 119.856) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(152.77832 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(188.666992 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- ${D}_{D, X}$ -->\n",
+       "     <g transform=\"translate(149.699321 170.256) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(130.90332 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(166.791992 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#pd7df21498f)\">\n",
+       "     <!-- ${X}_{D, X}$ -->\n",
+       "     <g transform=\"translate(266.314545 170.256) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(122.407227 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(158.295898 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pd7df21498f\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "input_event5 = {Y @ (-D, -X): -Y, X: +X, Z: -Z}\n",
+    "graph5 = NxMixedGraph.from_edges(\n",
+    "    nodes=[Y @ (-D, -X), X, Z @ (-D, -X), Z, W @ (-D, -X), D @ (-D, -X), D, X @ (-D, -X)],\n",
+    "    directed=[\n",
+    "        (Z @ (-D, -X), Y @ (-D, -X)),\n",
+    "        (W @ (-D, -X), Y @ (-D, -X)),\n",
+    "        (D @ (-D, -X), Z @ (-D, -X)),\n",
+    "        (D, Z),\n",
+    "        (X @ (-D, -X), W @ (-D, -X)),\n",
+    "    ],\n",
+    "    undirected=[(Y @ (-D, -X), X), (Z @ (-D, -X), Z)],\n",
+    ")\n",
+    "district5 = {Z, Z @ (-D, -X)}\n",
+    "graph5.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:39.615000</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 164.941744 64.656 \n",
+       "Q 136.18534 64.656 109.665003 64.656 \n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 117.665003 68.656 \n",
+       "L 109.665003 64.656 \n",
+       "L 117.665003 60.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 107.426168 64.656 \n",
+       "Q 186.139822 64.656 262.617408 64.656 \n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.617408 60.656 \n",
+       "L 262.617408 64.656 \n",
+       "L 254.617408 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 106.664202 215.856 \n",
+       "Q 135.73334 215.856 162.56641 215.856 \n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 154.56641 211.856 \n",
+       "L 162.56641 215.856 \n",
+       "L 154.56641 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 199.502684 197.207477 \n",
+       "Q 237.190036 140.253787 273.643435 85.164865 \n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.892912 89.6291 \n",
+       "L 273.643435 85.164865 \n",
+       "L 272.56451 94.043824 \n",
+       "z\n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 276.938395 84.517738 \n",
+       "Q 252.424731 140.366682 277.285419 196.062953 \n",
+       "\" clip-path=\"url(#p625b5d550e)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m0f42aff54e\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"187.302857\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"85.066364\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"187.162597\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m0f42aff54e\" x=\"287.682078\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(175.302857 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(70.066364 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- ${Y}_{X}$ -->\n",
+       "     <g transform=\"translate(276.014545 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(180.262597 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p625b5d550e)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(280.782078 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p625b5d550e\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "figure_9c.graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:40.148080</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 202.021423 79.498529 \n",
+       "Q 196.187008 84.677265 192.024905 88.371624 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 200.663284 86.052484 \n",
+       "L 192.024905 88.371624 \n",
+       "L 195.35262 80.069437 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 170.750542 100.611835 \n",
+       "Q 167.39097 102.455264 165.991744 103.223033 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 174.929489 102.881406 \n",
+       "L 165.991744 103.223033 \n",
+       "L 171.081089 95.867861 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 95.279423 134.537396 \n",
+       "Q 96.890082 137.396698 97.403292 138.307768 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 96.962043 129.374387 \n",
+       "L 97.403292 138.307768 \n",
+       "L 89.991838 133.300739 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 118.102792 129.500165 \n",
+       "Q 121.462363 127.656736 122.861589 126.888967 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 113.923844 127.230594 \n",
+       "L 122.861589 126.888967 \n",
+       "L 117.772244 134.244139 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 228.539272 151.319452 \n",
+       "Q 225.840552 152.856146 225.084965 153.286389 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 234.016209 152.803814 \n",
+       "L 225.084965 153.286389 \n",
+       "L 230.057651 145.851849 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_7\">\n",
+       "    <path d=\"M 203.712862 187.816693 \n",
+       "Q 203.712862 189.236347 203.712862 188.419932 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 207.712862 180.419932 \n",
+       "L 203.712862 188.419932 \n",
+       "L 199.712862 180.419932 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_8\">\n",
+       "    <path d=\"M 265.806536 197.11673 \n",
+       "Q 245.464264 203.255831 227.262698 208.748887 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 236.077204 210.266941 \n",
+       "L 227.262698 208.748887 \n",
+       "L 233.765844 202.608115 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_9\">\n",
+       "    <path d=\"M 203.712862 193.495307 \n",
+       "Q 203.712862 192.075653 203.712862 192.892068 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 199.712862 200.892068 \n",
+       "L 203.712862 192.892068 \n",
+       "L 207.712862 200.892068 \n",
+       "z\n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_10\">\n",
+       "    <path d=\"M 206.36048 83.275237 \n",
+       "Q 183.447457 124.341382 196.057002 169.644948 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_11\">\n",
+       "    <path d=\"M 217.555677 86.985438 \n",
+       "Q 219.218797 107.919845 232.068784 124.529612 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_12\">\n",
+       "    <path d=\"M 196.670605 68.242938 \n",
+       "Q 171.749844 75.35819 155.921316 95.880246 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_13\">\n",
+       "    <path d=\"M 227.897044 150.116565 \n",
+       "Q 217.164378 157.838502 210.895021 169.47964 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_14\">\n",
+       "    <path d=\"M 149.363344 136.867762 \n",
+       "Q 158.924101 164.732288 183.70542 180.660714 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_15\">\n",
+       "    <path d=\"M 161.649379 129.321511 \n",
+       "Q 190.954716 149.209697 226.122336 145.010855 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_16\">\n",
+       "    <path d=\"M 185.045917 111.573597 \n",
+       "Q 183.220636 130.095129 191.282496 146.869375 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_17\">\n",
+       "    <path d=\"M 108.786354 160.110962 \n",
+       "Q 134.332672 201.398431 181.611647 212.440675 \n",
+       "\" clip-path=\"url(#p8e942fd93b)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m13b68ab8e5\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"218.743165\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"190.352593\" y=\"89.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"144.426667\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"84.305455\" y=\"115.056\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"98.500741\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"247.968754\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"203.712862\" y=\"165.456\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"203.712862\" y=\"190.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"287.214545\" y=\"190.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m13b68ab8e5\" x=\"203.712862\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(211.843165 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(180.452593 95.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(138.226667 120.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 120.57475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(91.600741 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_6\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- ${X}_{D}$ -->\n",
+       "     <g transform=\"translate(235.368754 145.77475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_7\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- ${W}_{D}$ -->\n",
+       "     <g transform=\"translate(188.112862 170.97475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_8\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- ${Y}_{D}$ -->\n",
+       "     <g transform=\"translate(191.912862 196.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_9\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- ${D}_{D}$ -->\n",
+       "     <g transform=\"translate(273.814545 196.17475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_10\">\n",
+       "    <g clip-path=\"url(#p8e942fd93b)\">\n",
+       "     <!-- ${Z}_{D}$ -->\n",
+       "     <g transform=\"translate(191.112862 221.37475) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p8e942fd93b\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "graph = figure_9a.graph\n",
+    "event = {X: +x, D: -d, Z @ -d: -z}\n",
+    "worlds = extract_interventions(event)\n",
+    "pw_graph = make_parallel_worlds_graph(graph, worlds)\n",
+    "new_event = dict(event)\n",
+    "cf_graph = NxMixedGraph.from_edges(\n",
+    "    nodes=pw_graph.nodes(),\n",
+    "    directed=pw_graph.directed.edges(),\n",
+    "    undirected=pw_graph.undirected.edges(),\n",
+    ")\n",
+    "pw_graph.draw()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{frozenset({-D})}"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "worlds"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(NxMixedGraph(directed=<networkx.classes.digraph.DiGraph object at 0x12645d590>, undirected=<networkx.classes.graph.Graph object at 0x126593590>),\n",
+       " {X: +X, D: -D, Z: -Z})"
+      ]
+     },
+     "execution_count": 42,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "make_counterfactual_graph(figure_9a.graph, {X: +x, D: -d, Z @ -d: -z})"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{W} P(D) P({X}_{W, Z}, {Y}_{W, Z}) P({W}_{X}) P({Z}_{D})$"
+      ],
+      "text/plain": [
+       "Sum[W](P(D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(Z @ -D))"
+      ]
+     },
+     "execution_count": 43,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "id_star(figure_9a.graph, {Y @ -x: -y} | {X: +x, D: -d, Z @ -d: -z})"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 44,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\frac{\\sum_{D, W} P(D) P({W}_{X}) P({X}_{W, Z}, {Y}_{W, Z}) P({Z}_{D})}{\\sum_{D, W, Y} \\sum_{D, W} P(D) P({W}_{X}) P({X}_{W, Z}, {Y}_{W, Z}) P({Z}_{D})}$"
+      ],
+      "text/plain": [
+       "((Sum[D, W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D)) / Sum[D, W, Y](Sum[D, W](P(D) * P(W @ -X) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D)))))"
+      ]
+     },
+     "execution_count": 44,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "idc_star(figure_9a.graph, {Y @ -x: -y}, {X: +x, D: -d, Z @ -d: -z})"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 45,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "${Z}_{D}$"
+      ],
+      "text/plain": [
+       "Z @ -D"
+      ]
+     },
+     "execution_count": 45,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "Z.intervene([D, D @ (-d, -x)])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 46,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(D, D @ (-D, -X))"
+      ]
+     },
+     "execution_count": 46,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "_upgrade_ordering([D, D @ (-d, -x)])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 47,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(-D, -D)"
+      ]
+     },
+     "execution_count": 47,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "_to_interventions((D @ (-D, -X), D))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Examples of Notation\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "${W}_{X}$"
+      ],
+      "text/plain": [
+       "W @ -X"
+      ]
+     },
+     "execution_count": 48,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "W @ X"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 49,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$W^*$"
+      ],
+      "text/plain": [
+       "+W"
+      ]
+     },
+     "execution_count": 49,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "~W"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$P({Y}_{X} | D, X^*, {Z}_{D})$"
+      ],
+      "text/plain": [
+       "P(Y @ -X | D, +X, Z @ -D)"
+      ]
+     },
+     "execution_count": 50,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "P(Y @ X | ~X, Z @ D, D)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
        "({Y @ -X: -Y}, {Y @ -X: +Y})"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 51,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -567,7 +6812,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 52,
    "metadata": {},
    "outputs": [
     {
@@ -579,7 +6824,7 @@
        "P(+Y @ +X)"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 52,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -590,7 +6835,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 53,
    "metadata": {},
    "outputs": [
     {
@@ -602,7 +6847,7 @@
        "P(Y @ +X)"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 53,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -610,6 +6855,975 @@
    "source": [
     "P({Y @ +x: y})"
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Examples of `make_counterfactual_graph`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:40.588179</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.950166 64.656 \n",
+       "Q 180.271043 64.656 251.355851 64.656 \n",
+       "\" clip-path=\"url(#pa54d2e14a4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 243.355851 60.656 \n",
+       "L 251.355851 64.656 \n",
+       "L 243.355851 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#pa54d2e14a4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 101.34354 202.029376 \n",
+       "Q 179.862391 140.254747 256.623864 79.862733 \n",
+       "\" clip-path=\"url(#pa54d2e14a4)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 247.863182 81.665635 \n",
+       "L 256.623864 79.862733 \n",
+       "L 252.809776 87.95302 \n",
+       "z\n",
+       "\" clip-path=\"url(#pa54d2e14a4)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 286.16196 196.036295 \n",
+       "Q 310.902397 140.287726 286.268483 84.491071 \n",
+       "\" clip-path=\"url(#pa54d2e14a4)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m263aa2fed3\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pa54d2e14a4)\">\n",
+       "     <use xlink:href=\"#m263aa2fed3\" x=\"84.59231\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m263aa2fed3\" x=\"275.80518\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m263aa2fed3\" x=\"275.952434\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m263aa2fed3\" x=\"83.769164\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pa54d2e14a4)\">\n",
+       "     <!-- ${W}_{W, Z}$ -->\n",
+       "     <g transform=\"translate(59.09231 69.456) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-2c\" d=\"M 750 794 \n",
+       "L 1409 794 \n",
+       "L 1409 256 \n",
+       "L 897 -744 \n",
+       "L 494 -744 \n",
+       "L 750 256 \n",
+       "L 750 794 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(168.09082 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(203.979492 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#pa54d2e14a4)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(268.90518 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#pa54d2e14a4)\">\n",
+       "     <!-- ${Y}_{W, Z}$ -->\n",
+       "     <g transform=\"translate(254.252434 69.456) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(61.083984 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(130.297852 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(166.186523 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#pa54d2e14a4)\">\n",
+       "     <!-- ${Z}_{W, Z}$ -->\n",
+       "     <g transform=\"translate(61.269164 220.656) scale(0.2 -0.2)\">\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-2c\" transform=\"translate(137.719727 -16.3125) scale(0.7)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(173.608398 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pa54d2e14a4\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:40.874931</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 140.256 \n",
+       "Q 185.760943 140.256 262.616893 140.256 \n",
+       "\" clip-path=\"url(#p4d7285238c)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.616893 136.256 \n",
+       "L 262.616893 140.256 \n",
+       "L 254.616893 144.256 \n",
+       "z\n",
+       "\" clip-path=\"url(#p4d7285238c)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"md5827119d0\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p4d7285238c)\">\n",
+       "     <use xlink:href=\"#md5827119d0\" x=\"84.305455\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#md5827119d0\" x=\"287.214545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p4d7285238c)\">\n",
+       "     <!-- ${D}_{D}$ -->\n",
+       "     <g transform=\"translate(70.905455 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(77.001953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p4d7285238c)\">\n",
+       "     <!-- ${Z}_{D}$ -->\n",
+       "     <g transform=\"translate(274.614545 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p4d7285238c\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:41.093719</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 264.851076 140.256 \n",
+       "Q 185.759057 140.256 108.903107 140.256 \n",
+       "\" clip-path=\"url(#p0cfb41d65a)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 116.903107 144.256 \n",
+       "L 108.903107 140.256 \n",
+       "L 116.903107 136.256 \n",
+       "z\n",
+       "\" clip-path=\"url(#p0cfb41d65a)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m178e02cbeb\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p0cfb41d65a)\">\n",
+       "     <use xlink:href=\"#m178e02cbeb\" x=\"287.214545\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m178e02cbeb\" x=\"84.305455\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p0cfb41d65a)\">\n",
+       "     <!-- ${X}_{X}$ -->\n",
+       "     <g transform=\"translate(275.214545 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(68.505859 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p0cfb41d65a)\">\n",
+       "     <!-- ${W}_{X}$ -->\n",
+       "     <g transform=\"translate(69.305455 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(98.876953 -16.3125) scale(0.7)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p0cfb41d65a\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:41.307600</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"me8c8aa730d\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#pc72adefac2)\">\n",
+       "     <use xlink:href=\"#me8c8aa730d\" x=\"185.76\" y=\"140.256\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#pc72adefac2)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(177.96 145.77475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"pc72adefac2\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "input_events = [{Y @ (-w, -z): -y, X @ (-w, -z): -x}, {Z @ -d: -z}, {W @ -x: -w}, {D: -d}]\n",
+    "for input_event in input_events:\n",
+    "    actual_graph, actual_event = make_counterfactual_graph(figure_9a.graph, input_event)\n",
+    "    actual_graph.draw()\n",
+    "    plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{W} P({X}_{W, Z}, {Y}_{W, Z}) P({Z}_{D}) P({W}_{X}) P(D)$"
+      ],
+      "text/plain": [
+       "Sum[W](P(X @ (-W, -Z), Y @ (-W, -Z)) * P(Z @ -D) * P(W @ -X) * P(D))"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/latex": [
+       "$\\sum_{W, Z} P(D) P({X}_{W, Z}, {Y}_{W, Z}) P({W}_{X}) P({Z}_{D})$"
+      ],
+      "text/plain": [
+       "Sum[W, Z](P(D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(Z @ -D))"
+      ]
+     },
+     "execution_count": 55,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "input_graph2 = figure_9a.graph\n",
+    "input_event2 = {Y @ -x: -y, X: +x, Z @ -d: -d, D: -d}\n",
+    "expected2 = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(Z @ -d) * P(W @ -x) * P(D))\n",
+    "display(expected2)\n",
+    "id_star(input_graph2, input_event2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$P(Y^* | Y)$"
+      ],
+      "text/plain": [
+       "P(+Y | -Y)"
+      ]
+     },
+     "execution_count": 56,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "P(+Y | -y)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 57,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$P({Y}_{X, Z})$"
+      ],
+      "text/plain": [
+       "P(Y @ (-X, -Z))"
+      ]
+     },
+     "execution_count": 57,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "idc_star(tikka_figure_2.graph, outcomes={Y @ -x: -y}, conditions={Z @ -x: -z, X: +x})"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 58,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/latex": [
+       "$\\frac{P(X, Y)}{\\sum_{X, Y} P(X, Y)}$"
+      ],
+      "text/plain": [
+       "((P(X, Y) / Sum[X, Y](P(X, Y))))"
+      ]
+     },
+     "execution_count": 58,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "P(X, Y).conditional([])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 59,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[X, W, Y, D, Z]\n",
+      "DiGraph with 5 nodes and 4 edges\n",
+      "MultiGraph with 5 nodes and 5 edges\n"
+     ]
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
+       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
+       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
+       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"371.52pt\" height=\"280.512pt\" viewBox=\"0 0 371.52 280.512\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
+       " <metadata>\n",
+       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
+       "   <cc:Work>\n",
+       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
+       "    <dc:date>2023-06-26T23:30:41.695829</dc:date>\n",
+       "    <dc:format>image/svg+xml</dc:format>\n",
+       "    <dc:creator>\n",
+       "     <cc:Agent>\n",
+       "      <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>\n",
+       "     </cc:Agent>\n",
+       "    </dc:creator>\n",
+       "   </cc:Work>\n",
+       "  </rdf:RDF>\n",
+       " </metadata>\n",
+       " <defs>\n",
+       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
+       " </defs>\n",
+       " <g id=\"figure_1\">\n",
+       "  <g id=\"patch_1\">\n",
+       "   <path d=\"M 0 280.512 \n",
+       "L 371.52 280.512 \n",
+       "L 371.52 0 \n",
+       "L 0 0 \n",
+       "z\n",
+       "\" style=\"fill: #ffffff\"/>\n",
+       "  </g>\n",
+       "  <g id=\"axes_1\">\n",
+       "   <g id=\"patch_2\">\n",
+       "    <path d=\"M 106.668924 64.656 \n",
+       "Q 135.031938 64.656 161.158884 64.656 \n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 153.158884 60.656 \n",
+       "L 161.158884 64.656 \n",
+       "L 153.158884 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_3\">\n",
+       "    <path d=\"M 208.12347 64.656 \n",
+       "Q 236.486483 64.656 262.613429 64.656 \n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 254.613429 60.656 \n",
+       "L 262.613429 64.656 \n",
+       "L 254.613429 68.656 \n",
+       "z\n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_4\">\n",
+       "    <path d=\"M 106.668924 215.856 \n",
+       "Q 135.031938 215.856 161.158884 215.856 \n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 153.158884 211.856 \n",
+       "L 161.158884 215.856 \n",
+       "L 153.158884 219.856 \n",
+       "z\n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_5\">\n",
+       "    <path d=\"M 198.220444 197.285919 \n",
+       "Q 236.488614 140.254002 273.510877 85.078887 \n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "    <path d=\"M 265.731836 89.493241 \n",
+       "L 273.510877 85.078887 \n",
+       "L 272.374936 93.950732 \n",
+       "z\n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"stroke: #000000; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"patch_6\">\n",
+       "    <path d=\"M 103.962892 75.307838 \n",
+       "Q 185.758683 114.876253 267.554475 75.309112 \n",
+       "\" clip-path=\"url(#p019234568e)\" style=\"fill: none; stroke-dasharray: 2,3.3; stroke-dashoffset: 0; stroke: #808080; stroke-width: 2; stroke-linecap: round\"/>\n",
+       "   </g>\n",
+       "   <g id=\"PathCollection_1\">\n",
+       "    <defs>\n",
+       "     <path id=\"m8de07ef115\" d=\"M 0 19.364917 \n",
+       "C 5.135636 19.364917 10.061621 17.324507 13.693064 13.693064 \n",
+       "C 17.324507 10.061621 19.364917 5.135636 19.364917 0 \n",
+       "C 19.364917 -5.135636 17.324507 -10.061621 13.693064 -13.693064 \n",
+       "C 10.061621 -17.324507 5.135636 -19.364917 0 -19.364917 \n",
+       "C -5.135636 -19.364917 -10.061621 -17.324507 -13.693064 -13.693064 \n",
+       "C -17.324507 -10.061621 -19.364917 -5.135636 -19.364917 0 \n",
+       "C -19.364917 5.135636 -17.324507 10.061621 -13.693064 13.693064 \n",
+       "C -10.061621 17.324507 -5.135636 19.364917 0 19.364917 \n",
+       "z\n",
+       "\" style=\"stroke: #000000; stroke-width: 2\"/>\n",
+       "    </defs>\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <use xlink:href=\"#m8de07ef115\" x=\"84.305455\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8de07ef115\" x=\"185.76\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8de07ef115\" x=\"287.214545\" y=\"64.656\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8de07ef115\" x=\"84.305455\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "     <use xlink:href=\"#m8de07ef115\" x=\"185.76\" y=\"215.856\" style=\"fill: #ffffff; stroke: #000000; stroke-width: 2\"/>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_1\">\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <!-- $X$ -->\n",
+       "     <g transform=\"translate(77.405455 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-58\" d=\"M 878 4666 \n",
+       "L 1516 4666 \n",
+       "L 2316 2981 \n",
+       "L 3763 4666 \n",
+       "L 4500 4666 \n",
+       "L 2578 2438 \n",
+       "L 3738 0 \n",
+       "L 3103 0 \n",
+       "L 2163 1966 \n",
+       "L 459 0 \n",
+       "L -275 0 \n",
+       "L 1906 2509 \n",
+       "L 878 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-58\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_2\">\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <!-- $W$ -->\n",
+       "     <g transform=\"translate(175.86 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-57\" d=\"M 616 4666 \n",
+       "L 1228 4666 \n",
+       "L 1453 697 \n",
+       "L 3213 4666 \n",
+       "L 3916 4666 \n",
+       "L 4147 697 \n",
+       "L 5888 4666 \n",
+       "L 6528 4666 \n",
+       "L 4453 0 \n",
+       "L 3659 0 \n",
+       "L 3444 3891 \n",
+       "L 1697 0 \n",
+       "L 903 0 \n",
+       "L 616 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-57\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_3\">\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <!-- $Y$ -->\n",
+       "     <g transform=\"translate(281.014545 70.17475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-59\" d=\"M 403 4666 \n",
+       "L 1081 4666 \n",
+       "L 1953 2747 \n",
+       "L 3616 4666 \n",
+       "L 4325 4666 \n",
+       "L 2209 2222 \n",
+       "L 1778 0 \n",
+       "L 1147 0 \n",
+       "L 1575 2222 \n",
+       "L 403 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-59\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_4\">\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <!-- $D$ -->\n",
+       "     <g transform=\"translate(76.505455 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-44\" d=\"M 1081 4666 \n",
+       "L 2438 4666 \n",
+       "Q 3519 4666 4070 4208 \n",
+       "Q 4622 3750 4622 2847 \n",
+       "Q 4622 2250 4412 1698 \n",
+       "Q 4203 1147 3834 769 \n",
+       "Q 3463 381 2891 190 \n",
+       "Q 2319 0 1538 0 \n",
+       "L 172 0 \n",
+       "L 1081 4666 \n",
+       "z\n",
+       "M 1613 4147 \n",
+       "L 909 519 \n",
+       "L 1734 519 \n",
+       "Q 2794 519 3375 1128 \n",
+       "Q 3956 1738 3956 2847 \n",
+       "Q 3956 3519 3581 3833 \n",
+       "Q 3206 4147 2406 4147 \n",
+       "L 1613 4147 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-44\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "   <g id=\"text_5\">\n",
+       "    <g clip-path=\"url(#p019234568e)\">\n",
+       "     <!-- $Z$ -->\n",
+       "     <g transform=\"translate(178.86 221.37475) scale(0.2 -0.2)\">\n",
+       "      <defs>\n",
+       "       <path id=\"DejaVuSans-Oblique-5a\" d=\"M 838 4666 \n",
+       "L 4500 4666 \n",
+       "L 4409 4184 \n",
+       "L 794 531 \n",
+       "L 3769 531 \n",
+       "L 3669 0 \n",
+       "L -141 0 \n",
+       "L -50 481 \n",
+       "L 3566 4134 \n",
+       "L 738 4134 \n",
+       "L 838 4666 \n",
+       "z\n",
+       "\" transform=\"scale(0.015625)\"/>\n",
+       "      </defs>\n",
+       "      <use xlink:href=\"#DejaVuSans-Oblique-5a\" transform=\"translate(0 0.09375)\"/>\n",
+       "     </g>\n",
+       "    </g>\n",
+       "   </g>\n",
+       "  </g>\n",
+       " </g>\n",
+       " <defs>\n",
+       "  <clipPath id=\"p019234568e\">\n",
+       "   <rect x=\"7.2\" y=\"7.2\" width=\"357.12\" height=\"266.112\"/>\n",
+       "  </clipPath>\n",
+       " </defs>\n",
+       "</svg>\n"
+      ],
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "print(figure_9a.graph.nodes())\n",
+    "print(figure_9a.graph.directed)\n",
+    "print(figure_9a.graph.joint())\n",
+    "figure_9a.graph.draw()"
+   ]
   }
  ],
  "metadata": {
@@ -659,7 +7873,9 @@
    "toc_position": {},
    "toc_section_display": true,
    "toc_window_display": true
-  }
+  },
+  "toc-autonumbering": true,
+  "toc-showmarkdowntxt": false
  },
  "nbformat": 4,
  "nbformat_minor": 4
diff --git a/setup.cfg b/setup.cfg
index 4659e74..1161be3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -115,6 +115,7 @@ source = y0
 omit =
     tests/*
     docs/*
+    src/y0/algorithm/identify/_extras.py
 
 [coverage:paths]
 source =
diff --git a/src/y0/algorithm/identify/__init__.py b/src/y0/algorithm/identify/__init__.py
index fb131bd..647de5e 100644
--- a/src/y0/algorithm/identify/__init__.py
+++ b/src/y0/algorithm/identify/__init__.py
@@ -3,13 +3,17 @@
 """Identification algorithms."""
 
 from .id_c import idc
+from .id_star import id_star
 from .id_std import identify
+from .idc_star import idc_star
 from .utils import Identification, Query, Unidentifiable
 
 __all__ = [
     # Algorithms
     "identify",
+    "id_star",
     "idc",
+    "idc_star",
     # Data Structures
     "Query",
     # Exceptions
diff --git a/src/y0/algorithm/identify/_extras.py b/src/y0/algorithm/identify/_extras.py
new file mode 100644
index 0000000..30078b8
--- /dev/null
+++ b/src/y0/algorithm/identify/_extras.py
@@ -0,0 +1,188 @@
+"""This file contains code that implements the original ID* algorithm.
+
+The algorithm is described in the paper "Complete Identification Methods for the Causal Hierarchy"
+but the algorithm itself is not complete, as there are identifiable queries that cannot be
+identified with this algorithm.
+"""
+
+import logging
+from typing import Collection, Set, Tuple, cast
+
+from y0.algorithm.identify.cg import is_not_self_intervened, make_counterfactual_graph
+from y0.algorithm.identify.id_star import (
+    ConflictUnidentifiable,
+    District,
+    DistrictInterventions,
+    get_conflicts,
+    get_free_variables,
+    id_star_line_9,
+    remove_event_tautologies,
+    violates_axiom_of_effectiveness,
+)
+from y0.dsl import Event, Expression, Intervention, One, Product, Sum, Variable, Zero
+from y0.graph import NxMixedGraph
+
+logger = logging.getLogger(__name__)
+
+
+def original_id_star_line_6(
+    graph: NxMixedGraph, event: Event
+) -> Tuple[Collection[Variable], DistrictInterventions]:
+    r"""Run line 6 of the ID* algorithm.
+
+    Line 6 is analogous to Line 4 in the ID algorithm, it decomposes
+    the problem into a set of subproblems, one for each C-component in
+    the counterfactual graph. In the ID algorithm, the term
+    corresponding to a given C-component :math:`S_i` of the causal
+    diagram was the effect of all variables not in :math:`S_i` on
+    variables in :math:`S_i` , in other words
+    :math:`P_{\mathbf{v}\backslash s_i} (s_i )`, and the outermost
+    summation on line 4 was over values of variables not in
+    :math:`\mathbf{Y},\mathbf{X}`. Here, the term corresponding to a
+    given C-component :math:`S^i` of the counterfactual graph
+    :math:`G'` is the conjunction of counterfactual variables where
+    each variable contains in its subscript all variables not in the
+    C-component :math:`S^i` , in other words :math:`\mathbf{v}(G'
+    )\backslash s^i` , and the outermost summation is over observable
+    variables not in :math:`\event'` , that is over
+    :math:`\mathbf{v}(G' ) \backslash \event'` , where we interpret
+    :math:`\event'` as a set of counterfactuals, rather than a
+    conjunction.
+
+    Unfortunately, the conjunction of all counterfactual variables in
+    the C-component where each variable contains its subscript over
+    all variables not in the C-component results in a problem.  The
+    problem is that the query contains redundant interventions that
+    must be removed for the query to be identifiable.  The removal of
+    redundant interventions is not specified as part of the algorithm
+    itself.  Instead, it must be specified outside the algorithm.  The
+    algorithm is not complete without this step.  Tikka et al. (2022)
+    address this problem by removing the rudundant interventions in
+    step 7 of the algorithm after running ID* on each C-component.
+    However, it is simpler to not include redundant interventions in
+    the first place.  Instead of intervening on every variable not in
+    the C-component, we intervene on every variable that is a parent
+    of the C-component.  This is also known as the Markov pillow. Zucker
+    suggested this approach in an email to Shpitser on May 20, 2022. In
+    this function we demonstrate what happens when we intervene on
+    every variable not in the C-component.
+
+    :param graph: an NxMixedGraph
+    :param event: a conjunction of counterfactual variables
+    :return: a set of Variables in summand, a dictionary of districts and events
+    """
+    # First we get the summand, then we intervene on each district
+    summand = get_free_variables(graph, event)
+    interventions_of_each_district = get_district_interventions(graph, event)
+    return summand, interventions_of_each_district
+
+
+def get_district_interventions(graph: NxMixedGraph, event: Event) -> DistrictInterventions:
+    """For each district, intervene on the variables not in the district.
+
+    Self-interventions are not considered part of the district
+
+    :param graph: an NxMixedGraph
+    :param event: a conjunction of counterfactual variables
+    :return: a dictionary of districts and interventions of districts
+
+    """
+    nodes = set(node for node in graph.nodes() if is_not_self_intervened(node))
+    return {
+        district: intervene_on_district(district, nodes - district, event)
+        for district in graph.subgraph(nodes).get_c_components()
+    }
+
+
+def intervene_on_district(district: District, interventions: Set[Variable], event: Event) -> Event:
+    """Intervene on the variables not in the district.
+
+    Each variable in the district takes its value in the event if it has one.
+    Otherwise, we set the value to ``-variable.get_base()``.
+
+    :param district: a district of the graph
+    :param event: a conjunction of counterfactual values
+    :param interventions: a set of Variables to act as interventions
+    :returns: A new event
+    """
+    interventions = {-i.get_base() for i in interventions}
+    return {
+        variable.intervene(interventions): (
+            event[variable] if variable in event else cast(Intervention, -variable.get_base())
+        )
+        for variable in district
+    }
+
+
+def original_id_star(
+    graph: NxMixedGraph, event: Event, *, _number_recursions: int = 0
+) -> Expression:
+    """Apply the ``ID*`` algorithm to the graph."""
+    logger.debug(
+        "[%d]: Calling ID* algorithm with graph G with\n\t nodes: %s\n"
+        "\t directed: %s\n\t undirected %s\n"
+        "\t outcome event: %s",
+        _number_recursions,
+        graph.nodes(),
+        graph.directed.edges(),
+        graph.undirected.edges(),
+        event,
+    )
+    # Line 1: There's nothing in the counterfactual event (i.e., an empty conjunction),
+    # then its probability is 1, by convention.
+    if not event:
+        return One()
+    # Line 2: This violates the Axiom of Effectiveness
+    if violates_axiom_of_effectiveness(event):
+        return Zero()
+    # Line 3: This is a tautological event and can be removed without affecting the probability
+    reduced_event = remove_event_tautologies(event)
+    if reduced_event != event:
+        logger.debug("[%d] recurring on reduced event %s", _number_recursions, reduced_event)
+        return original_id_star(graph, reduced_event, _number_recursions=_number_recursions + 1)
+    # Line 4: invokes make-cg to construct a counterfactual graph :math:`G'` , and the
+    # corresponding relabeled counterfactual event.
+    cf_graph, new_event = make_counterfactual_graph(graph, event)
+    logger.debug(
+        "[%d] ID* Returned from make_counterfactual_graph(). New event: %s\n"
+        "\tcounterfactual graph:\n"
+        "\t nodes: %s\n"
+        "\t directed: %s\n"
+        "\t undirected: %s",
+        _number_recursions,
+        new_event,
+        cf_graph.nodes(),
+        cf_graph.directed.edges(),
+        cf_graph.undirected.edges(),
+    )
+    # Line 5:
+    if new_event is None:
+        return Zero()
+
+    # Line 6:
+    nodes = set(node for node in cf_graph.nodes() if is_not_self_intervened(node))
+    cf_subgraph = cf_graph.subgraph(nodes)
+    if not cf_subgraph.is_connected():
+        summand, events_of_each_district = original_id_star_line_6(cf_graph, new_event)
+        logger.debug("[%d] summand: %s", _number_recursions, summand)
+        assert 1 < len(events_of_each_district)
+        logger.debug(
+            "[%d] recurring on each district: %s ", _number_recursions, events_of_each_district
+        )
+        return Sum.safe(
+            Product.safe(
+                original_id_star(
+                    graph, events_of_district, _number_recursions=_number_recursions + 1
+                )
+                for events_of_district in events_of_each_district.values()
+            ),
+            summand,
+        )
+
+    # Line 7:
+    conflicts = get_conflicts(cf_subgraph, new_event)
+    if conflicts:
+        raise ConflictUnidentifiable(cf_subgraph, new_event, conflicts)
+
+    # Line 9
+    return id_star_line_9(cf_subgraph)
diff --git a/src/y0/algorithm/identify/cg.py b/src/y0/algorithm/identify/cg.py
index 8ab2322..5486aa2 100644
--- a/src/y0/algorithm/identify/cg.py
+++ b/src/y0/algorithm/identify/cg.py
@@ -3,7 +3,7 @@
 """Utilities for parallel world graphs and counterfactual graphs."""
 
 from itertools import combinations
-from typing import FrozenSet, Iterable, Optional, Set, Tuple
+from typing import FrozenSet, Iterable, Optional, Set, Tuple, cast
 
 from y0.dsl import CounterfactualVariable, Event, Intervention, Variable
 from y0.graph import NxMixedGraph
@@ -33,23 +33,11 @@ class World(FrozenSet[Intervention]):
 Worlds = Set[World]
 
 
-def has_same_directed_parents(graph: NxMixedGraph, a: Variable, b: Variable) -> bool:
-    """Check if all parents of the two nodes are the same.
-
-    :param graph: An ADMG
-    :param a: A variable in the ADMG
-    :param b: Another variable in the ADMG
-    :returns:
-        True if the set of directed parents attain the same values and either there
-        exists a bidirected edge between the two nodes or there exists no bidirected
-        edges for either node.
-    """
-    return set(graph.directed.predecessors(a)) == set(graph.directed.predecessors(b))
-
-
 def has_same_confounders(graph: NxMixedGraph, a: Variable, b: Variable) -> bool:
     """Check if all confounders of the two nodes are the same."""
-    no_undirected_edges = 0 == len(graph.undirected.edges(a)) == len(graph.undirected.edges(b))
+    no_undirected_edges = (
+        0 == len(list(graph.undirected.edges(a))) == len(list(graph.undirected.edges(b)))
+    )
     return graph.undirected.has_edge(a, b) or no_undirected_edges
 
 
@@ -159,11 +147,43 @@ def is_pw_equivalent(graph: NxMixedGraph, event: Event, node1: Variable, node2:
     """
     # Rather than all n choose 2 combinations, we can restrict ourselves to the original
     # graph variables and their counterfactual versions
-    return has_same_function(node1, node2) and parents_attain_same_values(
-        graph, event, node1, node2
+    assert (node1 in graph.nodes()) and (node2 in graph.nodes()), "Nodes must be in the graph"
+    return (
+        has_same_function(node1, node2)
+        and parents_attain_same_values(graph, event, node1, node2)
+        and nodes_have_same_domain_of_values(graph, event, node1, node2)
     )
 
 
+def nodes_have_same_domain_of_values(
+    graph: NxMixedGraph, event: Event, a: Variable, b: Variable
+) -> bool:
+    """Check if the nodes have the same domain of values."""
+    if not has_same_confounders(graph, a, b):
+        return False
+    if a.get_base() != b.get_base():
+        return False
+    if is_not_self_intervened(a) and is_not_self_intervened(b):
+        return True
+    if is_not_self_intervened(a) or is_not_self_intervened(b):
+        return False
+    if value_of_self_intervention(a) == value_of_self_intervention(b):
+        return True
+    return False
+
+
+def value_of_self_intervention(a: Variable) -> Optional[Intervention]:
+    """Get the value of the self-intervention."""
+    if not isinstance(a, CounterfactualVariable):
+        return None
+    base = a.get_base()
+    if +base in a.interventions:
+        return cast(Intervention, +base)
+    elif -base in a.interventions:
+        return cast(Intervention, -base)
+    return None
+
+
 def merge_pw(
     graph: NxMixedGraph, node1: Variable, node2: Variable
 ) -> Tuple[NxMixedGraph, Variable, Variable]:
@@ -293,7 +313,6 @@ def make_counterfactual_graph(
                     cf_graph, node, node_at_interventions
                 )
                 if is_inconsistent(new_event, preferred_node, eliminated_node):
-                    # TODO needs test case
                     return cf_graph, None
                 new_event = update_event(new_event, preferred_node, eliminated_node)
         if len(worlds) > 1:
@@ -308,16 +327,11 @@ def make_counterfactual_graph(
                         cf_graph, node_at_intervention1, node_at_intervention2
                     )
                     if is_inconsistent(new_event, node_at_intervention1, node_at_intervention2):
-                        # TODO needs test case
                         return cf_graph, None
                     new_event = update_event(new_event, preferred_node, eliminated_node)
 
     ancestors = cf_graph.ancestors_inclusive(new_event)
     rv_graph = cf_graph.subgraph(ancestors)
-    # rv_graph = rv_graph.remove_nodes_from(
-    #    node for node in rv_graph.nodes() if is_self_intervened(node)
-    # )
-    # rv_graph = remove_redundant_interventions(rv_graph)
     return rv_graph, new_event
 
 
diff --git a/src/y0/algorithm/identify/id_c.py b/src/y0/algorithm/identify/id_c.py
index c2b4518..d9efff8 100644
--- a/src/y0/algorithm/identify/id_c.py
+++ b/src/y0/algorithm/identify/id_c.py
@@ -49,11 +49,8 @@ def rule_2_of_do_calculus_applies(identification: Identification, condition: Var
     graph = identification.graph
     treatments = identification.treatments
     conditions = treatments | (identification.conditions - {condition})
-
     graph_mod = graph.remove_in_edges(treatments).remove_out_edges(condition)
-
-    judgements = [
+    return all(
         are_d_separated(graph_mod, outcome, condition, conditions=conditions)
         for outcome in identification.outcomes
-    ]
-    return all(judgement.separated for judgement in judgements)
+    )
diff --git a/src/y0/algorithm/identify/id_star.py b/src/y0/algorithm/identify/id_star.py
new file mode 100644
index 0000000..14adb80
--- /dev/null
+++ b/src/y0/algorithm/identify/id_star.py
@@ -0,0 +1,315 @@
+# -*- coding: utf-8 -*-
+
+"""Implementation of the ID* algorithm."""
+
+import itertools as itt
+import logging
+from typing import Collection, FrozenSet, Iterable, Mapping, Set, Tuple, cast
+
+from .cg import is_not_self_intervened, make_counterfactual_graph
+from .utils import Unidentifiable
+from ...dsl import (
+    CounterfactualVariable,
+    Event,
+    Expression,
+    Intervention,
+    One,
+    P,
+    Probability,
+    Product,
+    Sum,
+    Variable,
+    Zero,
+)
+from ...graph import NxMixedGraph
+
+__all__ = [
+    "id_star",
+]
+
+District = FrozenSet[Variable]
+DistrictInterventions = Mapping[District, Event]
+
+logger = logging.getLogger(__name__)
+
+
+def id_star(graph: NxMixedGraph, event: Event, *, _number_recursions: int = 0) -> Expression:
+    """Apply the ``ID*`` algorithm to the graph."""
+    logger.debug(
+        "[%d]: Calling ID* algorithm with graph G with\n\t nodes: %s\n"
+        "\t directed: %s\n\t undirected %s\n"
+        "\t outcome event: %s",
+        _number_recursions,
+        graph.nodes(),
+        graph.directed.edges(),
+        graph.undirected.edges(),
+        event,
+    )
+    # Line 1: There's nothing in the counterfactual event (i.e., an empty conjunction),
+    # then its probability is 1, by convention.
+    if not event:
+        return One()
+    # Line 2: This violates the Axiom of Effectiveness
+    if violates_axiom_of_effectiveness(event):
+        return Zero()
+    # Line 3: This is a tautological event and can be removed without affecting the probability
+    reduced_event = remove_event_tautologies(event)
+    if reduced_event != event:
+        logger.debug("[%d] recurring on reduced event %s", _number_recursions, reduced_event)
+        return id_star(graph, reduced_event, _number_recursions=_number_recursions + 1)
+    # Line 4: invokes make-cg to construct a counterfactual graph :math:`G'` , and the
+    # corresponding relabeled counterfactual event.
+    cf_graph, new_event = make_counterfactual_graph(graph, event)
+    logger.debug(
+        "[%d] ID* Returned from make_counterfactual_graph(). New event: %s\n"
+        "\tcounterfactual graph:\n"
+        "\t nodes: %s\n"
+        "\t directed: %s\n"
+        "\t undirected: %s",
+        _number_recursions,
+        new_event,
+        cf_graph.nodes(),
+        cf_graph.directed.edges(),
+        cf_graph.undirected.edges(),
+    )
+    # Line 5:
+    if new_event is None:
+        return Zero()
+
+    # Line 6:
+    nodes = set(node for node in cf_graph.nodes() if is_not_self_intervened(node))
+    cf_subgraph = cf_graph.subgraph(nodes)
+    if not cf_subgraph.is_connected():
+        summand, events_of_each_district = id_star_line_6(cf_graph, new_event)
+        logger.debug("[%d] summand: %s", _number_recursions, summand)
+        assert 1 < len(events_of_each_district)
+        logger.debug(
+            "[%d] recurring on each district: %s ", _number_recursions, events_of_each_district
+        )
+        return Sum.safe(
+            Product.safe(
+                id_star(graph, events_of_district, _number_recursions=_number_recursions + 1)
+                for events_of_district in events_of_each_district.values()
+            ),
+            summand,
+        )
+
+    # Line 7:
+    conflicts = get_conflicts(cf_subgraph, new_event)
+    if conflicts:
+        raise ConflictUnidentifiable(cf_subgraph, new_event, conflicts)
+
+    # Line 9
+    return id_star_line_9(cf_subgraph)
+
+
+class ConflictUnidentifiable(Unidentifiable):  # noqa:N818
+    """An exception raised when line 8 of the ID* algorithm determines that the query is not identifiable.
+
+    This happens because the event contains a conflict, i.e., an inconsistent value
+    assignment where at least one value is in the subscript.
+    """
+
+    def __init__(
+        self,
+        cf_graph: NxMixedGraph,
+        event: Event,
+        conflicts: list[tuple[Intervention, Intervention]],
+    ):
+        """Instantiate the exception."""
+        self.cf_graph = cf_graph
+        self.event = event
+        self.conflicts = conflicts
+
+
+def get_free_variables(cf_graph: NxMixedGraph, event: Event) -> Set[Variable]:
+    """Get the possible values of the counterfactual variables in the graph that are "free".
+
+    i.e. that don't have values fixed by the event or a self-intervention.
+
+    :param cf_graph: A counterfactual graph
+    :param event: a conjunction of counterfactual variables
+    :returns: The set of free variables
+    """
+    free_variables = {variable for variable in cf_graph.nodes() if is_not_self_intervened(variable)}
+    return {v.get_base() for v in free_variables} - {e.get_base() for e in event}
+
+
+def violates_axiom_of_effectiveness(event: Event) -> bool:
+    r"""Run line 2 of the ID* algorithm.
+
+    The second line states that if :math:`\event` contains a counterfactual
+    which violates the Axiom of Effectiveness (Pearl, 2000), then :math:`\event`
+    is inconsistent, and we return probability 0.
+
+    :param event: a conjunction of counterfactual variables
+    :returns: True if violates axiom of effectiveness
+    """
+    return any(
+        intervention.get_base() == value.get_base() and value.star != intervention.star
+        for counterfactual, value in event.items()
+        if isinstance(counterfactual, CounterfactualVariable)
+        for intervention in counterfactual.interventions
+    )
+
+
+def remove_event_tautologies(event: Event) -> Event:
+    r"""Run line 3 of the ID* algorithm.
+
+    The third line states that if a counterfactual contains its own value in the subscript,
+    then it is a tautological event, and it can be removed from :math:`\event` without
+    affecting its probability.
+
+    :param event: a conjunction of counterfactual variables
+    :return: updated event or None
+    """
+    return {
+        variable: value
+        for variable, value in event.items()
+        if not is_redundant_counterfactual(variable, value)
+    }
+
+
+def is_redundant_counterfactual(variable: Variable, value: Intervention) -> bool:
+    """Check if a counterfactual variable is intervened on itself and has the same value as the intervention."""
+    if not isinstance(variable, CounterfactualVariable):
+        return False
+    return any(
+        intervention.get_base() == value.get_base() and value.star == intervention.star
+        for intervention in variable.interventions
+    )
+
+
+def id_star_line_6(
+    cf_graph: NxMixedGraph, event: Event
+) -> Tuple[Collection[Variable], DistrictInterventions]:
+    r"""Run line 6 of the ID* algorithm.
+
+    Line 6 is analogous to Line 4 in the ID algorithm, it decomposes the problem into a
+    set of subproblems, one for each C-component in the counterfactual graph. In the ID
+    algorithm, the term corresponding to a given C-component :math:`S_i` of the causal
+    diagram was the effect of all variables not in :math:`S_i` on variables in :math:`S_i` ,
+    in other words :math:`P_{\mathbf{v}\backslash s_i} (s_i )`, and the outermost summation
+    on line 4 was over values of variables not in :math:`\mathbf{Y},\mathbf{X}`. Here, the
+    term corresponding to a given C-component :math:`S^i` of the counterfactual graph :math:`G'`
+    is the conjunction of counterfactual variables where each variable contains in its
+    subscript all variables not in the C-component :math:`S^i` , in other words
+    :math:`\mathbf{v}(G' )\backslash s^i` , and the outermost summation is over observable
+    variables not in :math:`\event'` , that is over :math:`\mathbf{v}(G' ) \backslash \event'` ,
+    where we interpret :math:`\event'` as a set of counterfactuals, rather than a conjunction.
+
+    :param cf_graph: an NxMixedGraph
+    :param event: a conjunction of counterfactual variables
+    :return: a set of Variables in summand, a dictionary of districts and events
+    """
+    # Then we intervene on the Markov pillow of each district
+    summand = get_free_variables(cf_graph, event)
+    events_of_each_district = get_events_of_each_district(cf_graph, event)
+    return summand, events_of_each_district
+
+
+def get_events_of_each_district(graph: NxMixedGraph, event: Event) -> DistrictInterventions:
+    """For each district, intervene each node in the Markov pillow of the district.
+
+    Self-interventions are not considered part of the district
+
+    :param graph: an NxMixedGraph
+    :param event: a conjunction of counterfactual variables
+    :return: a dictionary of districts and interventions of districts
+    """
+    nodes = {node for node in graph.nodes() if is_not_self_intervened(node)}
+    subgraph = graph.subgraph(nodes)
+    return {
+        district: get_events_of_district(graph, district, event)
+        for district in subgraph.get_c_components()
+    }
+
+
+def get_events_of_district(graph, district, event) -> Event:
+    """Create new events by intervening each node on the Markov pillow of the district.
+
+    If the node in in the original event, then the value of the new event is the same as the original event.
+
+    :param graph: an NxMixedGraph
+    :param district: a district of the graph
+    :param event: a conjunction of counterfactual variables
+    :return: the events of the district
+    """
+    markov_pillow = graph.get_markov_pillow(district)
+    if not markov_pillow:
+        return {node.get_base(): _get_node_event(node, event) for node in district}
+    return {
+        node.get_base().intervene(markov_pillow): _get_node_event(node, event) for node in district
+    }
+
+
+def _get_node_event(node: Variable, event: Event) -> Intervention:
+    if node in event:
+        return event[node]
+    return cast(Intervention, -node.get_base())
+
+
+def get_conflicts(cf_graph: NxMixedGraph, event: Event) -> list[tuple[Intervention, Intervention]]:
+    r"""Identify conflicts between interventions int the graph and value assignments in the event.
+
+    .. note:: This is part of line 8 of the ID* algorithm
+
+    :param cf_graph: an NxMixedGraph
+    :param event: a joint distribution over counterfactual variables
+    :return: A list of pairs of conflicts. The same intervention or value assignment may appear in multiple conflicts
+    """
+    interventions = get_cf_interventions(cf_graph.nodes())
+    evidence = get_evidence(event)
+    return [
+        (intervention, ev)
+        for intervention, ev in itt.product(interventions, evidence)
+        if intervention.name == ev.name and intervention.star != ev.star
+    ]
+
+
+def get_cf_interventions(nodes: Iterable[Variable]) -> Set[Intervention]:
+    """For the graph, get the set of interventions in each counterfactual variable (all the subscripts).
+
+    .. note:: This was called ``sub()`` in the paper
+
+    :param nodes: An iterable of Variables, potentially containing CounterfactualVariables
+    :returns: The set of interventions over all counterfactual variables
+    """
+    return {
+        intervention
+        for node in nodes
+        if isinstance(node, CounterfactualVariable)
+        for intervention in node.interventions
+    }
+
+
+def get_evidence(event: Event) -> Set[Intervention]:
+    """Get the evidence (interventions and values) of the counterfactual conjunction.
+
+    The evidence (either set or observed) appearing in a given counterfactual conjunction
+    (or set of counterfactual events)
+
+    .. note:: This was called ``ev()`` in the paper
+
+    :param event: a conjunction of counterfactual variables
+    :returns: The set of values and interventions in the given counterfactual conjuction
+    """
+    return set(event.values()) | get_cf_interventions(event)
+
+
+def id_star_line_9(cf_graph: NxMixedGraph) -> Probability:
+    r"""Run line 9 of the ID* algorithm.
+
+    Line 9 says if there are no conflicts, then it's safe to take the union of all
+    subscripts in :math:`\event'` , and return the effect of the subscripts in :math:`\event'`
+    on the variables in :math:`\event'`.
+
+    :param cf_graph: A counterfactual graph
+    :return: An interventional distribution.
+    """
+    interventions = get_cf_interventions(cf_graph.nodes())
+    bases = [node.get_base() for node in cf_graph.nodes()]
+    if len(interventions) > 0:
+        return P[interventions](bases)
+    else:
+        return P(bases)
diff --git a/src/y0/algorithm/identify/idc_star.py b/src/y0/algorithm/identify/idc_star.py
new file mode 100644
index 0000000..820d68e
--- /dev/null
+++ b/src/y0/algorithm/identify/idc_star.py
@@ -0,0 +1,198 @@
+# -*- coding: utf-8 -*-
+
+"""Implementation of the IDC* algorithm."""
+
+import logging
+from typing import Iterable, Tuple
+
+from .cg import is_not_self_intervened, make_counterfactual_graph
+from .id_star import id_star
+from .utils import Unidentifiable
+from ..conditional_independencies import are_d_separated
+from ...dsl import Event, Expression, Variable, Zero
+from ...graph import NxMixedGraph
+
+__all__ = [
+    "idc_star",
+]
+
+logger = logging.getLogger(__name__)
+
+
+def get_new_outcomes_and_conditions(
+    new_event: Event, outcomes: Event, conditions: Event
+) -> Tuple[Event, Event]:
+    """Get the new outcomes and conditions."""
+    remaining_outcomes, missing_outcomes = get_remaining_and_missing_events(new_event, outcomes)
+    remaining_conditions, missing_conditions = get_remaining_and_missing_events(
+        new_event, conditions
+    )
+    new_event_keys = set(new_event) - set(outcomes) - set(conditions)
+    if len(missing_outcomes) > 0 and len(missing_conditions) > 0:
+        for outcome in new_event_keys:
+            if outcome.get_base() in {missing.get_base() for missing in missing_outcomes}:
+                remaining_outcomes[outcome] = new_event[outcome]
+        for condition in new_event_keys:
+            if condition.get_base() in {missing.get_base() for missing in missing_conditions}:
+                remaining_conditions[condition] = new_event[condition]
+        return remaining_outcomes, remaining_conditions
+    elif len(missing_outcomes) > 0:
+        for outcome in new_event_keys:
+            remaining_outcomes[outcome] = new_event[outcome]
+        return remaining_outcomes, remaining_conditions
+    elif len(missing_conditions) > 0:
+        for condition in new_event_keys:
+            remaining_conditions[condition] = new_event[condition]
+        return remaining_outcomes, remaining_conditions
+    else:
+        return remaining_outcomes, remaining_conditions
+
+
+def get_remaining_and_missing_events(new_event: Event, old_event: Event) -> Tuple[Event, Event]:
+    """Get the outcome from the event."""
+    remaining = {k: v for k, v in old_event.items() if k in new_event}
+    missing = {k: v for k, v in old_event.items() if k not in new_event}
+    return remaining, missing
+
+
+def idc_star(
+    graph: NxMixedGraph, outcomes: Event, conditions: Event, *, _number_recursions: int = 0
+) -> Expression:
+    r"""Run the IDC* algorithm.
+
+    :param graph: The causal graph
+    :param outcomes: The outcome events corresponds to :math:`\gamma`
+    :param conditions: The condition events corresponds to :math:`\delta`
+    :param _number_recursions: The number of times the algorithm has recurred
+    :returns: An expression created by the :func:`idc_star` algorithm after simplifying the original query
+    :raises ValueError: If ID* returns zero
+    """
+    logger.debug(
+        f"[{_number_recursions}]: Calling IDC* algorithm with graph G with\n\t nodes: {graph.nodes()}\n\t directed: "
+        f"{graph.directed.edges()}\n\t undirected {graph.undirected.edges()}\n\t outcomes: {outcomes}\n\t "
+        f"and conditions: {conditions}"
+    )
+    try:
+        logger.debug(
+            "[%d]: line 1 IDC* algorithm: call ID* algorithm with events %s",
+            _number_recursions,
+            conditions,
+        )
+        if isinstance(id_star(graph, conditions), Zero):
+            raise ValueError("The ID* algorithm returned 0, so IDC* cannot be applied.")
+        else:
+            logger.debug(
+                "[%d]: line 1 IDC* algorithm: ID* algorithm is not inconsistent", _number_recursions
+            )
+    except Unidentifiable:
+        logger.debug(
+            "[%d]: line 1 IDC* algorithm: ID* algorithm is not identifiable, but is also not inconsistent.",
+            _number_recursions,
+        )
+
+    _events = outcomes | conditions
+    logger.debug(
+        "[%d]: line 2 IDC* algorithm: make counterfactual graph. Events: %s",
+        _number_recursions,
+        _events,
+    )
+    cf_graph, new_events = make_counterfactual_graph(graph, _events)
+    logger.debug(
+        f"[{_number_recursions}]: IDC* returned from make_counterfactual_graph with New events: {new_events}\n"
+        "\tcounterfactual graph:\n"
+        f"\t nodes: {cf_graph.nodes()}\n"
+        f"\t directed: {cf_graph.directed.edges()}\n"
+        f"\t undirected: {cf_graph.undirected.edges()}"
+    )
+    if new_events is None:
+        logger.debug(
+            f"[{_number_recursions}]: line 3 IDC* algorithm: make_counterfactual_graph is inconsistent. Returning Zero."
+        )
+        return Zero()
+
+    new_outcomes, new_conditions = get_new_outcomes_and_conditions(new_events, outcomes, conditions)
+    logger.debug(
+        f"[{_number_recursions}]: line 3 IDC* algorithm: make_counterfactual_graph is not inconsistent.\n"
+        f"\tNew outcomes: {outcomes}\tNew conditions: {conditions}\n"
+    )
+    for condition in new_conditions:
+        logger.debug(
+            f"[{_number_recursions}]: line 4 IDC* algorithm: for each condition, check if rule 2 of do calculus applies"
+        )
+        if cf_rule_2_of_do_calculus_applies(cf_graph, new_outcomes, condition):
+            logger.debug(
+                f"\t[{_number_recursions}]: line 4 IDC* algorithm: rule 2 of do calculus applies:\n\t\t{outcomes} "
+                f"""is D-separated from {condition} in G{"'"*(_number_recursions + 1)} ({condition}_bar)"""
+            )
+            new_outcomes = {
+                outcome.intervene(condition)
+                if condition in cf_graph.ancestors_inclusive(outcome)
+                else outcome: value
+                for outcome, value in new_outcomes.items()
+            }
+            new_conditions = {k: v for k, v in new_conditions.items() if k != condition}
+            logger.debug(
+                f"\t[{_number_recursions}]: line 4 IDC* algorithm: call IDC* algorithm on new outcomes {new_outcomes} "
+                f"and new conditions {new_conditions}"
+            )
+            return idc_star(
+                graph, new_outcomes, new_conditions, _number_recursions=_number_recursions + 1
+            )
+        else:
+            logger.debug(
+                f"\t[{_number_recursions}]: line 4 IDC* algorithm: rule 2 of do calculus "
+                f"does not apply to condition {condition}"
+            )
+    logger.debug(
+        f"[{_number_recursions}]: line 5 IDC* algorithm: Call ID* algorithm on new events {new_outcomes} "
+        f"| {new_conditions} and old graph:\n"
+        f"\t nodes: {graph.nodes()}\n"
+        f"\t directed: {graph.directed.edges()}\n"
+        f"\t undirected: {graph.undirected.edges()}"
+    )
+    id_star_estimand = id_star(
+        graph, new_outcomes | new_conditions, _number_recursions=_number_recursions + 1
+    )
+    logger.debug(f"[{_number_recursions}]: Returned from ID* with estimand {id_star_estimand}")
+    if len(conditions) == 0:
+        return id_star_estimand
+
+    idc_star_estimand = id_star_estimand.conditional([c.get_base() for c in conditions])
+    logger.debug(f"[{_number_recursions}]: Returning from IDC* with estimand {idc_star_estimand}")
+    return idc_star_estimand
+
+
+def cf_rule_2_of_do_calculus_applies(
+    cf_graph: NxMixedGraph, outcomes: Iterable[Variable], condition: Variable
+) -> bool:
+    r"""Check if Rule 2 of the Do-Calculus applies to the conditioned variable.
+
+    Rule 2 is about Observations that are interchangeable with Interventions.
+    This occurs when there is no backdoor path from the conditioned variable to the outcomes.
+    Rule 2 operationalizes this criterion to say that if we remove the outgoing edge from
+    the conditioned variable, then if the intervened node is D-separated from all outcomes,
+    then the backdoor criterion has been satisfied.
+
+    :param cf_graph: an NxMixedGraph
+    :param outcomes: The outcomes to check
+    :param condition: The condition to check
+    :returns: If rule 2 applies, see below.
+
+    If Rule 2 of the do calculus applies to the conditioned variable, then it can be converted to a do variable.
+
+    .. math::
+
+        \newcommand\ci{\perp\!\!\!\perp}
+        \newcommand{\ubar}[1]{\underset{\bar{}}{#1}}
+        \newcommand{\obar}[1]{\overset{\bar{}}{#1}}
+        \text{if } (\exists Z \in \mathbf{Z})(\mathbf{Y} \ci Z | \mathbf{X}, \mathbf{Z}
+        - \{Z\})_{G_{\bar{\mathbf{X}}\ubar{Z}}} \\
+        \text{then } P(\mathbf{Y}|do(\mathbf{X}),\mathbf{Z}) = P(\mathbf Y|do(\mathbf X), do(Z), \mathbf{Z} - \{Z\})
+    """
+    #: also called "blocked nodes"
+    conditions = {n for n in cf_graph.nodes() if not is_not_self_intervened(n)}
+    graph_mod = cf_graph.remove_out_edges(condition)
+    return all(
+        are_d_separated(graph_mod, outcome, condition, conditions=conditions)
+        for outcome in outcomes
+    )
diff --git a/src/y0/dsl.py b/src/y0/dsl.py
index 95b969b..ea5466c 100644
--- a/src/y0/dsl.py
+++ b/src/y0/dsl.py
@@ -207,10 +207,12 @@ class Variable(Element):
 
         .. note:: This function can be accessed with the matmult @ operator.
         """
+        interventions = _to_interventions(_upgrade_variables(variables))
+        interventions = tuple(sorted(set(interventions), key=lambda i: (i.name, i.star)))
         return CounterfactualVariable(
             name=self.name,
             star=self.star,
-            interventions=_to_interventions(_upgrade_ordering(variables)),
+            interventions=interventions,
         )
 
     def __matmul__(self, variables: VariableHint) -> CounterfactualVariable:
@@ -405,7 +407,12 @@ class CounterfactualVariable(Variable):
         :param variables: The variable(s) used to extend this counterfactual variable's
             current interventions. Automatically converts variables to interventions.
         :returns: A new counterfactual variable with both this counterfactual variable's interventions
-            and the given intervention(s)
+            and the given intervention(s).
+
+        .. warning::
+
+            Will raise a value error ff the value of a new intervention conflicts
+            with the value of intervention already listed in this counterfactual.
 
         .. note:: This function can be accessed with the matmult @ operator.
         """
@@ -420,10 +427,10 @@ class CounterfactualVariable(Variable):
 
     @staticmethod
     def _raise_for_overlapping_interventions(interventions: Iterable[Intervention]) -> None:
-        """Raise an error if any of the given variables are already listed in interventions in this counterfactual.
+        """Raise an error if there are two values of the same variable in the list of interventions.
 
         :param interventions: Interventions to check for overlap
-        :raises ValueError: If there are overlapping variables given.
+        :raises ValueError: If there are overlapping variables given
         """
         overlaps = {
             (old, new)
@@ -646,8 +653,8 @@ class Expression(Element, ABC):
         >>> assert P(A, B).conditional(A) == P(A, B) / Sum[B](P(A, B))
         >>> assert P(A, B, C).conditional([A, B]) == P(A, B, C) / Sum[C](P(A, B, C))
         """
-        ranges = _upgrade_ordering(ranges)
-        ranges_complement = set(self._iter_variables()) - set(ranges)
+        ranges = _upgrade_ordering([r.get_base() for r in _upgrade_variables(ranges)])
+        ranges_complement = set([c.get_base() for c in self._iter_variables()]) - set(ranges)
         return self.normalize_marginalize(ranges_complement)
 
     def normalize_marginalize(self, ranges: VariableHint) -> Expression:
@@ -664,7 +671,10 @@ class Expression(Element, ABC):
         >>> assert P(A, B).marginalize(A) == Sum[A](P(A, B))
         >>> assert P(A, B, C).marginalize([A, B]) == Sum[A, B](P(A, B, C))
         """
-        return Sum(expression=self, ranges=_upgrade_ordering(ranges))
+        return Sum(
+            expression=self,
+            ranges=_upgrade_ordering([r.get_base() for r in _upgrade_variables(ranges)]),
+        )
 
 
 @dataclass(frozen=True, repr=False)
@@ -1366,7 +1376,7 @@ def _upgrade_variables(variables: VariableHint) -> Tuple[Variable, ...]:
 
 
 def _upgrade_ordering(variables: VariableHint) -> Tuple[Variable, ...]:
-    return _sorted_variables(_upgrade_variables(variables))
+    return _sorted_variables(set(_upgrade_variables(variables)))
 
 
 OrderingHint = Optional[Iterable[Union[str, Variable]]]
diff --git a/src/y0/examples.py b/src/y0/examples.py
index 7d1b16f..951e6e2 100644
--- a/src/y0/examples.py
+++ b/src/y0/examples.py
@@ -44,6 +44,8 @@ from .graph import NxMixedGraph
 from .resources import ASIA_PATH
 from .struct import DSeparationJudgement, VermaConstraint
 
+x, y, z, w = -X, -Y, -Z, -W
+
 
 @dataclass
 class Example:
@@ -362,7 +364,27 @@ line_6_example = Example(
                     ),
                 )
             ],
-        )
+        ),
+        dict(
+            id_in=[
+                Identification.from_expression(
+                    query=P(Y @ X),
+                    estimand=P(X, Y),
+                    graph=NxMixedGraph.from_edges(
+                        directed=[(X, Y)],
+                    ),
+                )
+            ],
+            id_out=[
+                Identification.from_expression(
+                    query=P(Y @ X),
+                    estimand=P(Y | X),
+                    graph=NxMixedGraph.from_edges(
+                        directed=[(X, Y)],
+                    ),
+                )
+            ],
+        ),
     ],
 )
 
@@ -418,6 +440,24 @@ figure_6a = Example(
     ],
 )
 
+tikka_unidentifiable_graph = Example(
+    name="Tikka's unidentifiable example",
+    reference="Tikka, S. (2020). Identifying Counterfactual Queries with the R Package cfid",
+    graph=NxMixedGraph.from_edges(
+        directed=[(X, W), (W, Y), (D, Z), (Z, Y), (X, Y)], undirected=[(X, Y)]
+    ),
+)
+
+tikka_unidentifiable_cfgraph = Example(
+    name="Tikka's unidentifiable example",
+    reference="Tikka, S. (2020). Identifying Counterfactual Queries with the R Package cfid",
+    graph=NxMixedGraph.from_edges(
+        directed=[(X @ -x, W @ -x), (W @ -x, Y @ -x), (D, Z), (Z, Y @ -x), (X, Y)],
+        undirected=[(X, Y @ -x)],
+    ),
+)
+
+
 figure_9a = Example(
     name="Original causal diagram",
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
@@ -429,10 +469,10 @@ figure_9b = Example(
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
         directed=[
-            (X @ ~X, W @ ~X),
-            (W @ ~X, Y @ ~X),
-            (D @ ~X, Z @ ~X),
-            (Z @ ~X, Y @ ~X),
+            (X @ -X, W @ -X),
+            (W @ -X, Y @ -X),
+            (D @ -X, Z @ -X),
+            (Z @ -X, Y @ -X),
             (X, W),
             (W, Y),
             (D, Z),
@@ -445,21 +485,21 @@ figure_9b = Example(
         undirected=[
             (X, Y),
             (X @ D, X),
-            (Y @ ~X, Y),
+            (Y @ -X, Y),
             (Y, Y @ D),
-            (Y @ D, Y @ ~X),
-            (X, Y @ ~X),
+            (Y @ D, Y @ -X),
+            (X, Y @ -X),
             (X @ D, Y),
             (X, Y @ D),
-            (X @ D, Y @ ~X),
+            (X @ D, Y @ -X),
             (X @ D, Y @ D),
-            (D @ ~X, D),
-            (W @ ~X, W),
+            (D @ -X, D),
+            (W @ -X, W),
             (W, W @ D),
-            (W @ D, W @ ~X),
-            (Z @ ~X, Z),
+            (W @ D, W @ -X),
+            (Z @ -X, Z),
             (Z, Z @ D),
-            (Z @ ~X, Z @ D),
+            (Z @ -X, Z @ D),
         ],
     ),
 )
@@ -468,8 +508,50 @@ figure_9c = Example(
     name="Counterfactual graph for :math:`P(y_x | x', z_d, d)`",
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
-        directed=[(X @ ~X, W @ ~X), (W @ ~X, Y @ ~X), (D, Z), (Z, Y @ ~X)],
-        undirected=[(X, Y @ ~X)],
+        directed=[(X @ -X, W @ -X), (W @ -X, Y @ -X), (D, Z), (Z, Y @ -X)],
+        undirected=[(X, Y @ -X)],
+    ),
+)
+
+tikka_figure_2 = Example(
+    name=r"Figure 2: A graph for the example on identifiability of a conditional counterfacual "
+    r"query :math:`P(y_x|z_x\wedge x')`",
+    reference="Tikka, S (2022) Identifiying Counterfactual Queries with the R package cfid",
+    graph=NxMixedGraph.from_edges(directed=[(X, Z), (X, Y), (Z, Y)], undirected=[(X, Z)]),
+)
+
+tikka_figure_5 = Example(
+    name=r"Figure 5: Counterfactual graph :math:`G'` for :math:`y_x\wedge x'\wedge z_d\wedge d`",
+    reference="Tikka, S (2022) Identifiying Counterfactual Queries with the R package cfid",
+    graph=NxMixedGraph.from_edges(
+        nodes=(X, Y @ -x, D, Z, X @ -x, W @ -x),
+        directed=[(D, Z), (Z, Y @ -x), (X @ -x, W @ -x), (W @ -x, Y @ -x)],
+        undirected=[(X, Y @ -x)],
+    ),
+)
+
+
+tikka_figure_6a = Example(
+    name=r"Figure 6a: Parallel worlds graph for :math:`y_x\wedge z_x\wedge x'` (the counterfactual graph)",
+    reference="Tikka, S (2022) Identifiying Counterfactual Queries with the R package cfid",
+    graph=NxMixedGraph.from_edges(
+        directed=[(X, Z), (Z, Y), (X, Y), (X @ -x, Z @ -x), (Z @ -x, Y @ -x), (X @ -x, Y @ -x)],
+        undirected=[(X, Z), (X, Z @ -x), (Z, Z @ -x), (Y, Y @ -x)],
+    ),
+)
+
+tikka_figure_6b = Example(
+    name=r"Figure 6b: Parallel worlds graph for :math:`y_{x,z}\wedge x'` (the counterfactual graph)",
+    reference="Tikka, S (2022) Identifiying Counterfactual Queries with the R package cfid",
+    graph=NxMixedGraph.from_edges(
+        directed=[
+            (X, Z),
+            (Z, Y),
+            (X, Y),
+            (Z @ (-x, -z), Y @ (-x, -z)),
+            (X @ (-x, -z), Y @ (-x, -z)),
+        ],
+        undirected=[(X, Z), (Y, Y @ (-x, -z))],
     ),
 )
 
@@ -478,13 +560,13 @@ figure_9d = Example(
     " joint distribution from which :math:`P(y_{x,z}|x')` is derived, namely  :math:`P(y_{x,z}, x')`",
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
-        nodes=(X, X @ (~X, Z), Z @ (+X, -Z), W @ (+X, -Z), Y @ (+X, -Z)),
+        nodes=(X, X @ (-X, -Z), Z @ (-X, -Z), W @ (-X, -Z), Y @ (-X, -Z)),
         directed=[
-            (X @ (+X, -Z), W @ (+X, -Z)),
-            (Z @ (+X, -Z), Y @ (+X, -Z)),
-            (W @ (+X, -Z), Y @ (+X, -Z)),
+            (X @ (-X, -Z), W @ (-X, -Z)),
+            (Z @ (-X, -Z), Y @ (-X, -Z)),
+            (W @ (-X, -Z), Y @ (-X, -Z)),
         ],
-        undirected=[(X, Y @ (+X, -Z))],
+        undirected=[(X, Y @ (-X, -Z))],
     ),
 )
 
@@ -504,10 +586,10 @@ figure_11a = Example(
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
         directed=[
-            (X @ ~X, W @ ~X),
-            (W @ ~X, Y @ ~X),
-            (D, Z @ ~X),
-            (Z @ ~X, Y @ ~X),
+            (X @ -X, W @ -X),
+            (W @ -X, Y @ -X),
+            (D, Z @ -X),
+            (Z @ -X, Y @ -X),
             (X, W),
             (W, Y),
             (D, Z),
@@ -519,17 +601,17 @@ figure_11a = Example(
         ],
         undirected=[
             (X, Y),
-            (Y @ ~X, Y),
+            (Y @ -X, Y),
             (Y, Y @ D),
             (Y @ D, X),
-            (X, Y @ ~X),
-            (Y @ D, Y @ ~X),
-            (W @ ~X, W),
+            (X, Y @ -X),
+            (Y @ D, Y @ -X),
+            (W @ -X, W),
             (W, W @ D),
-            (W @ D, W @ ~X),
-            (Z @ ~X, Z),
+            (W @ D, W @ -X),
+            (Z @ -X, Z),
             (Z, Z @ D),
-            (Z @ ~X, Z @ D),
+            (Z @ -X, Z @ D),
         ],
     ),
 )
@@ -540,10 +622,10 @@ figure_11b = Example(
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
         directed=[
-            (X @ ~X, W @ ~X),
-            (W @ ~X, Y @ ~X),
+            (X @ -X, W @ -X),
+            (W @ -X, Y @ -X),
             (D, Z),
-            (Z, Y @ ~X),
+            (Z, Y @ -X),
             (Z, Y @ D),
             (Z, Y),
             (X, W),
@@ -552,13 +634,13 @@ figure_11b = Example(
         ],
         undirected=[
             (X, Y),
-            (Y @ ~X, Y),
+            (Y @ -X, Y),
             (Y, Y @ D),
             (Y @ D, X),
-            (Y @ D, Y @ ~X),
-            (X, Y @ ~X),
+            (Y @ D, Y @ -X),
+            (X, Y @ -X),
             (X, Y @ D),
-            (W @ ~X, W),
+            (W @ -X, W),
         ],
     ),
 )
@@ -569,19 +651,19 @@ figure_11c = Example(
     reference="Shpitser, I., & Pearl, J. (2008). Complete Identification Methods for the Causal Hierarchy.",
     graph=NxMixedGraph.from_edges(
         directed=[
-            (X @ ~X, W @ ~X),
-            (W @ ~X, Y @ ~X),
+            (X @ -X, W @ -X),
+            (W @ -X, Y @ -X),
             (D, Z),
-            (Z, Y @ ~X),
+            (Z, Y @ -X),
             (Z, Y),
             (X, W),
             (W, Y),
         ],
         undirected=[
             (X, Y),
-            (Y @ ~X, Y),
-            (X, Y @ ~X),
-            (W @ ~X, W),
+            (Y @ -X, Y),
+            (X, Y @ -X),
+            (W @ -X, W),
         ],
     ),
 )
@@ -1099,9 +1181,35 @@ complete_hierarchy_figure_3a_example = Example(
     ),
 )
 
+id_sir_example = Example(
+    name="Identifiable SIR",
+    reference="ASKEM",
+    graph=NxMixedGraph.from_edges(
+        directed=[
+            ("Infected", "Hospitalized"),
+            ("Hospitalized", "Died"),
+        ],
+        undirected=[("Infected", "Died")],
+    ),
+)
+
+nonid_sir_example = Example(
+    name="Non-Identifiable SIR",
+    reference="ASKEM",
+    graph=NxMixedGraph.from_edges(
+        directed=[
+            ("Infected", "Died"),
+        ],
+        undirected=[("Infected", "Died")],
+    ),
+)
+
 igf_example = Example(
     name="IGF Graph",
-    reference="...",  # TODO
+    reference="Jeremy Zucker, Sara Mohammad-Taheri, Kaushal Paneri, Somya Bhargava, Pallavi Kolambkar"
+    ", Craig Bakker, Jeremy Teuton, Charles Tapley Hoyt, Kristie Oxford, Robert Ness, and Olga Vitek. 2021."
+    "Leveraging Structured Biological Knowledge for Counterfactual Inference: a Case Study of Viral Pathogenesis"
+    "- IEEE Journals & Magazine. IEEE Transactions on Big Data (January 2021).",
     graph=NxMixedGraph.from_str_edges(
         nodes=["SOS", "Ras", "Raf", "AKT", "Mek", "Erk", "PI3K"],
         directed=[
@@ -1120,7 +1228,10 @@ igf_example = Example(
 
 sars_example = Example(
     name="SARS-CoV-2 Graph",
-    reference="...",  # TODO
+    reference="Jeremy Zucker, Sara Mohammad-Taheri, Kaushal Paneri, Somya Bhargava, Pallavi Kolambkar"
+    ", Craig Bakker, Jeremy Teuton, Charles Tapley Hoyt, Kristie Oxford, Robert Ness, and Olga Vitek. 2021."
+    "Leveraging Structured Biological Knowledge for Counterfactual Inference: a Case Study of Viral Pathogenesis"
+    "- IEEE Journals & Magazine. IEEE Transactions on Big Data (January 2021).",
     graph=NxMixedGraph.from_str_edges(
         nodes=[
             "SARS_COV2",
diff --git a/src/y0/graph.py b/src/y0/graph.py
index a20a83e..da739d1 100644
--- a/src/y0/graph.py
+++ b/src/y0/graph.py
@@ -212,7 +212,7 @@ class NxMixedGraph:
             else:
                 prog = "osage"
 
-        layout = nx.nx_pydot.graphviz_layout(self.joint(), prog=prog)
+        layout = _layout(self, prog=prog)
         u_proxy = nx.DiGraph(self.undirected.edges)
         labels = None if not latex else {node: _get_latex(node) for node in self.directed}
 
@@ -472,6 +472,13 @@ class NxMixedGraph:
             ],
         )
 
+    def get_markov_pillow(self, nodes: Collection[Variable]) -> Set[Variable]:
+        """For each district, intervene on the domain of each parent not in the district."""
+        parents_of_district: Set[Variable] = set()
+        for node in nodes:
+            parents_of_district |= set(self.directed.predecessors(node))
+        return parents_of_district - set(nodes)
+
 
 def _node_not_an_intervention(node: Variable, interventions: Set[Intervention]) -> bool:
     """Confirm that node is not an intervention."""
@@ -601,12 +608,10 @@ def _layout(self, prog):
         pass
     else:
         return layout
-
     try:
-        # FIXME remove - this is deprecated
-        layout = nx.nx_pydot.graphviz_layout(joint, prog=prog)
+        layout = nx.nx_pydot.pydot_layout(joint, prog=prog)
     except ImportError:
         pass
     else:
         return layout
-    return nx.circular_layout(joint)
+    return nx.spring_layout(joint)
diff --git a/src/y0/struct.py b/src/y0/struct.py
index 9031300..765e97d 100644
--- a/src/y0/struct.py
+++ b/src/y0/struct.py
@@ -70,10 +70,10 @@ class DSeparationJudgement:
         separated: bool = True,
     ) -> DSeparationJudgement:
         """Create a d-separation judgement in canonical form."""
-        left, right = sorted([left, right])
+        left, right = sorted([left, right], key=str)
         if conditions is None:
             conditions = tuple()
-        conditions = tuple(sorted(set(conditions)))
+        conditions = tuple(sorted(set(conditions), key=str))
         return cls(separated, left, right, conditions)
 
     def __bool__(self) -> bool:
@@ -85,7 +85,7 @@ class DSeparationJudgement:
         return (
             self.left < self.right
             and isinstance(self.conditions, tuple)
-            and tuple(sorted(self.conditions)) == (self.conditions)
+            and tuple(sorted(self.conditions, key=str)) == (self.conditions)
         )
 
     def cressie_read(


Test patch:
diff --git a/tests/test_algorithm/test_cg.py b/tests/test_algorithm/test_cg.py
index fc58dd9..e2312e0 100644
--- a/tests/test_algorithm/test_cg.py
+++ b/tests/test_algorithm/test_cg.py
@@ -4,10 +4,12 @@
 
 from tests.test_algorithm import cases
 from y0.algorithm.identify.cg import (
+    World,
     _get_directed_edges,
     extract_interventions,
     has_same_confounders,
     has_same_function,
+    is_inconsistent,
     is_not_self_intervened,
     is_pw_equivalent,
     make_counterfactual_graph,
@@ -15,14 +17,16 @@ from y0.algorithm.identify.cg import (
     merge_pw,
     node_not_an_intervention_in_world,
     nodes_attain_same_value,
+    nodes_have_same_domain_of_values,
     parents_attain_same_values,
     stitch_counterfactual_and_doppleganger_neighbors,
     stitch_counterfactual_and_dopplegangers,
     stitch_counterfactual_and_neighbors,
     stitch_factual_and_doppleganger_neighbors,
     stitch_factual_and_dopplegangers,
+    value_of_self_intervention,
 )
-from y0.dsl import D, Event, W, X, Y, Z
+from y0.dsl import A, B, D, Event, W, X, Y, Z
 from y0.examples import (
     figure_9a,
     figure_9b,
@@ -40,6 +44,21 @@ x, y, z, d, w = -X, -Y, -Z, -D, -W
 class TestCounterfactualGraph(cases.GraphTestCase):
     """Tests parallel worlds and counterfactual graphs."""
 
+    def test_world(self):
+        """Test that a world contains an intervention."""
+        with self.assertRaises(TypeError):
+            input_world1: World = World([-x])
+            3 in input_world1  # noqa
+
+        with self.assertRaises(TypeError):
+            input_world1: World = World([3])
+            3 in input_world1  # noqa
+
+        input_world2 = World([-x])
+        self.assertFalse(+x in input_world2)
+        self.assertFalse(+y in input_world2)
+        self.assertTrue(-x in input_world2)
+
     def assert_uedge_set_equal(self, expected, actual):
         """Assert that two undirected edge sets are equal."""
         return self.assertEqual(
@@ -49,12 +68,12 @@ class TestCounterfactualGraph(cases.GraphTestCase):
     def test_make_parallel_worlds(self):
         """Test that parallel worlds graphs are correct."""
         expected = figure_9b.graph
-        actual = make_parallel_worlds_graph(figure_9a.graph, {frozenset([+x]), frozenset([-d])})
-        expected2 = make_parallel_worlds_graph(figure_9a.graph, {(+x, -z)})
+        actual = make_parallel_worlds_graph(figure_9a.graph, {frozenset([-x]), frozenset([-d])})
+        expected2 = make_parallel_worlds_graph(figure_9a.graph, {(-x, -z)})
         self.assert_graph_equal(expected, actual)
-        self.assert_graph_equal(expected2, make_parallel_worlds_graph(figure_9a.graph, {(+x, -z)}))
-        self.assertTrue(Y @ (-z, +x) in expected2.nodes())
-        self.assertTrue(Y @ (+x, -z) in expected2.nodes())
+        self.assert_graph_equal(expected2, make_parallel_worlds_graph(figure_9a.graph, {(-x, -z)}))
+        self.assertTrue(Y @ (-z, -x) in expected2.nodes())
+        self.assertTrue(Y @ (-x, -z) in expected2.nodes())
 
     def test_has_same_function(self):
         """Test that two variables have the same value."""
@@ -93,40 +112,125 @@ class TestCounterfactualGraph(cases.GraphTestCase):
         self.assertFalse(nodes_attain_same_value(figure_9b.graph, event, X @ -d, D))
         self.assertFalse(nodes_attain_same_value(figure_9b.graph, event, D, X @ -d))
         self.assertFalse(nodes_attain_same_value(figure_9b.graph, event, D @ -d, D))
+        # This should get us onto the return False on line 56
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, event, Y @ -X, X))
+        # This one should trigger the False on line 59
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, {Y @ -X: -Y, Y: +Y}, Y @ -X, Y))
+        # This one will trigger the True on line 61, but I'm not sure if the event really makes sense
+
+        self.assertTrue(nodes_attain_same_value(figure_9b.graph, {Y @ -X: -Y, Y: -Y}, Y @ -X, Y))
+        # I think these two should get the falses on lines 64 and 69
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, {Y @ -X: -Y}, Y @ -X, Y))
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, {Y: +Y}, Y @ -X, Y))
+        # These two should get the False on line 73
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, {}, Y @ -X, Y))
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, {}, Y, Y @ -X))
+        # These two should get the True on line 74
+        self.assertTrue(
+            nodes_attain_same_value(NxMixedGraph.from_edges(undirected=[(+Y, -Y)]), {}, +Y, -Y)
+        )
+        self.assertFalse(nodes_attain_same_value(figure_9b.graph, event, D @ -X, D))
 
     def test_has_same_confounders(self):
         """Check whether two nodes have the same confounding edges."""
         self.assertFalse(has_same_confounders(figure_9b.graph, D, D))
         self.assertFalse(has_same_confounders(figure_9b.graph, D, D @ -d))
         self.assertFalse(has_same_confounders(figure_9b.graph, D @ -d, D))
-        self.assertTrue(has_same_confounders(figure_9b.graph, D @ +x, D))
+        self.assertTrue(has_same_confounders(figure_9b.graph, D @ -x, D))
         self.assertTrue(has_same_confounders(figure_11a.graph, D @ -d, D))
+        self.assertTrue(has_same_confounders(figure_9b.graph, D, D @ -x))
 
     def test_parents_attain_same_values(self):
         """Test that the parents of two nodes attain the same value."""
         graph = figure_9b.graph
-        event: Event = {Y @ +x: +y, D: -d, Z @ -d: -z, X: -x}
+        event: Event = {Y @ -x: -y, D: -d, Z @ -d: -z, X: +x}
         self.assertTrue(parents_attain_same_values(figure_11a.graph, event, Z, Z @ -d))
-        self.assertTrue(parents_attain_same_values(figure_11a.graph, event, Z, Z @ +x))
-        self.assertTrue(parents_attain_same_values(figure_11a.graph, event, Z @ -d, Z @ +x))
+        self.assertTrue(parents_attain_same_values(figure_11a.graph, event, Z, Z @ -x))
+        self.assertTrue(parents_attain_same_values(figure_11a.graph, event, Z @ -d, Z @ -x))
         self.assertTrue(parents_attain_same_values(figure_11a.graph, event, D, D @ -d))
         self.assertFalse(parents_attain_same_values(graph, event, Z, Z @ -d))
         self.assertFalse(parents_attain_same_values(figure_9b.graph, event, D, D @ -d))
-        self.assertFalse(parents_attain_same_values(figure_9b.graph, event, X, X @ +x))
-
-    # def test_has_same_parents(self):
-    #     """Test that all parents of two nodes are the same."""
-    #     self.assertTrue(has_same_parents(figure_9b.graph, D @ ~X, D))
-    #     self.assertTrue(has_same_parents(figure_9b.graph, X @ D, X))
-    #     self.assertFalse(has_same_parents(figure_9b.graph, D @ D, D))
-    #     self.assertFalse(has_same_parents(figure_9b.graph, X, D))
-    #     self.assertFalse(has_same_parents(figure_9b.graph, X @ ~X, W @ ~X))
-    #     self.assertFalse(has_same_parents(figure_9b.graph, X @ ~X, X))
-    #     self.assertFalse(has_same_parents(figure_9b.graph, Z, Z @ ~x))
-    #     self.assertTrue(has_same_parents(figure_11a.graph, Z, Z @ ~x))
-    #     self.assertTrue(has_same_parents(figure_11a.graph, Z @ ~x, Z))
-    #     self.assertFalse(has_same_parents(figure_11a.graph, Z @ ~x, Z @ -d))
-    #     self.assertFalse(has_same_parents(figure_11a.graph, Z @ -d, Z))
+        self.assertFalse(parents_attain_same_values(figure_9b.graph, event, X, X @ -x))
+        self.assertFalse(
+            parents_attain_same_values(
+                NxMixedGraph.from_edges(directed=[(Z, X), (Z, Y), (W, Y)]), event, X, Y
+            )
+        )
+        self.assertFalse(
+            parents_attain_same_values(
+                NxMixedGraph.from_edges(
+                    directed=[(X @ -x, Y @ -x), (X @ +x, Y @ +x)], undirected=[(Y @ -x, Y @ +x)]
+                ),
+                {Y @ -x: -y, Y @ +x: +y},
+                Y @ -x,
+                Y @ +x,
+            )
+        )
+
+    def test_nodes_have_same_domain_of_values(self):
+        """Test that two nodes have the same domain of values."""
+        graph = figure_9b.graph
+        event = {Y @ -x: -y, X: +x, D: -d, Z @ -d: -z}
+        self.assertTrue(nodes_have_same_domain_of_values(graph, event, D, D @ -x))
+        self.assertFalse(nodes_have_same_domain_of_values(graph, event, D, D @ -d))
+        self.assertFalse(
+            nodes_have_same_domain_of_values(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x)], undirected=[(Y, Y @ +x)]
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                X,
+                X @ +x,
+            )
+        )
+        self.assertTrue(nodes_have_same_domain_of_values(figure_9b.graph, event, D @ -X, D))
+        self.assertFalse(nodes_have_same_domain_of_values(figure_9b.graph, event, X, Y))
+        self.assertFalse(
+            nodes_have_same_domain_of_values(
+                NxMixedGraph.from_edges(
+                    directed=[(X @ +x, Y @ +x), (X @ -x, Y @ -x), (X, Y)],
+                    undirected=[(Y @ -x, Y @ +x), (Y @ +x, Y), (Y @ -x, Y)],
+                ),
+                {Y @ -x: -y, Y @ +x: +y},
+                X @ -x,
+                X @ +x,
+            )
+        )
+        self.assertTrue(
+            nodes_have_same_domain_of_values(
+                NxMixedGraph.from_edges(
+                    directed=[(X @ +x, Y @ +x), (X @ -x, Y @ -x), (X, Y)],
+                    undirected=[(Y @ -x, Y @ +x), (Y @ +x, Y), (Y @ -x, Y)],
+                ),
+                {Y @ -x: -y, Y @ +x: +y},
+                X @ +x,
+                X @ +x,
+            )
+        )
+        self.assertTrue(
+            nodes_have_same_domain_of_values(
+                NxMixedGraph.from_edges(
+                    directed=[(X @ +x, Y @ +x), (X @ -x, Y @ -x), (X, Y)],
+                    undirected=[(Y @ -x, Y @ +x), (Y @ +x, Y), (Y @ -x, Y)],
+                ),
+                {Y @ -x: +y, Y @ +x: +y},
+                Y @ -x,
+                Y @ +x,
+            )
+        )
+
+    def test_value_of_self_intervention(self):
+        """Return the value of a self intervention."""
+        self.assertIsNone(value_of_self_intervention(X))
+        self.assertEqual(+x, value_of_self_intervention(X @ +x))
+        self.assertEqual(-x, value_of_self_intervention(X @ (-x, -y, -d)))
+        self.assertIsNone(value_of_self_intervention(X @ -y))
+
+    def test_extract_interventions(self):
+        """Test that all interventions are extracted."""
+        event = {X: +x, D: -d, Z @ -d: -z}
+        expected_worlds = {frozenset({-d})}
+        self.assertEqual(expected_worlds, extract_interventions(event))
 
     def test_get_worlds(self):
         """Test that all interventions within each world of a counterfactual conjunction are generated."""
@@ -147,6 +251,11 @@ class TestCounterfactualGraph(cases.GraphTestCase):
         self.assertFalse(node_not_an_intervention_in_world(world=frozenset([-x, -y]), node=Y))
         self.assertFalse(node_not_an_intervention_in_world(world=frozenset([-x, +y]), node=Y))
         self.assertFalse(node_not_an_intervention_in_world(world=frozenset([-x, +y, -y]), node=Y))
+        with self.assertRaises(TypeError):
+            node_not_an_intervention_in_world(world=frozenset([-x]), node=+Y)
+
+        with self.assertRaises(TypeError):
+            node_not_an_intervention_in_world(world=frozenset({-x}), node=X @ +x)
 
     def test_stitch_factual_and_dopplegangers(self):
         """Test that factual variables and their dopplegangers are stitched together unless it is intervened upon."""
@@ -435,44 +544,127 @@ class TestCounterfactualGraph(cases.GraphTestCase):
 
     def test_is_pw_equivalent(self):
         """Test that two nodes in a parallel world graph are the same (lemma 24)."""
-        event: Event = {Y @ +x: +y, D: -d, Z @ -d: -z, X: -x}
-        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, D @ ~X, D))
-        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, X @ D, X))
-        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z, Z @ ~X))
+        event: Event = {Y @ -x: -y, D: -d, Z @ -d: -z, X: +x}
+        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, D @ -X, D))
+        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, X @ -D, X))
+        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z, Z @ -X))
         self.assertTrue(is_pw_equivalent(figure_11a.graph, event, W, W @ -d))
-        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ +x, Z))
+        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ -x, Z))
         self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ -d, Z))
-        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ +x, Z @ -d))
+        self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ -x, Z @ -d))
         self.assertFalse(is_pw_equivalent(figure_11a.graph, event, D @ -d, D))
-        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, D @ +x, D))
+        self.assertTrue(is_pw_equivalent(figure_9b.graph, event, D @ -x, D))
         self.assertTrue(is_pw_equivalent(figure_11a.graph, event, Z @ -d, Z))
-        self.assertFalse(is_pw_equivalent(figure_9b.graph, event, X, X @ ~X))
-        self.assertFalse(is_pw_equivalent(figure_9b.graph, event, Z, Z @ ~X))
+        self.assertFalse(is_pw_equivalent(figure_9b.graph, event, X, X @ -X))
+        self.assertFalse(is_pw_equivalent(figure_9b.graph, event, Z, Z @ -X))
         self.assertFalse(is_pw_equivalent(figure_9b.graph, event, D, D @ -d))
         self.assertFalse(is_pw_equivalent(figure_9b.graph, event, X, X @ -x))
-        self.assertFalse(is_pw_equivalent(figure_11a.graph, event, X @ +x, X))
+        self.assertFalse(is_pw_equivalent(figure_11a.graph, event, X @ -x, X))
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +y), (X @ -x, Y @ -y)],
+                    undirected=[(Y @ +y, Y @ -y), (Y @ -y, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                X @ +x,
+                X @ -x,
+            )
+        )
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x), (X @ -x, Y @ -x)],
+                    undirected=[(Y @ +x, Y @ -x), (Y @ -x, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                X,
+                X @ -x,
+            )
+        )
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +y), (X @ -x, Y @ -y)],
+                    undirected=[(Y @ +y, Y @ -y), (Y @ -y, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                X,
+                X @ +x,
+            )
+        )
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x), (X @ -x, Y @ -x)],
+                    undirected=[(Y @ +y, Y @ -x), (Y @ -x, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                Y @ +x,
+                Y @ -x,
+            )
+        )
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x), (X @ -x, Y @ -x)],
+                    undirected=[(Y @ +x, Y @ -x), (Y @ -x, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                Y @ +x,
+                Y,
+            )
+        )
+        self.assertFalse(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x), (X @ -x, Y @ -x)],
+                    undirected=[(Y @ +x, Y @ -x), (Y @ -x, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y},
+                Y,
+                Y @ -x,
+            )
+        )
+        self.assertTrue(
+            is_pw_equivalent(
+                NxMixedGraph.from_edges(
+                    directed=[(X, Y), (X @ +x, Y @ +x), (X @ -x, Y @ -x)],
+                    undirected=[(Y @ +x, Y @ -x), (Y @ -x, Y)],
+                ),
+                {Y @ +x: +y, Y @ -x: -y, X: -x},
+                Y,
+                Y @ -x,
+            )
+        )
 
     def test_merge_pw(self):
         """Test the parallel worlds graph after merging two nodes is correct (Lemma 25)."""
-        cf_graph_1, preferred, eliminated = merge_pw(figure_9b.graph, D, D @ ~X)
+        cf_graph_1, preferred, eliminated = merge_pw(figure_9b.graph, D, D @ -X)
         cf_graph_2, preferred, eliminated = merge_pw(cf_graph_1, X, X @ D)
         # test that we swap the order of the nodes if the first is a counterfactual
-        cf_graph_3, preferred, eliminated = merge_pw(cf_graph_2, Z @ ~X, Z)
+        cf_graph_3, preferred, eliminated = merge_pw(cf_graph_2, Z @ -X, Z)
         cf_graph_4, preferred, eliminated = merge_pw(cf_graph_3, Z, Z @ D)
         cf_graph_5, preferred, eliminated = merge_pw(cf_graph_4, W, W @ D)
-        cf_graph_6, preferred, eliminated = merge_pw(cf_graph_5, D @ D, D)
-        cf_graph_7, preferred, eliminated = merge_pw(cf_graph_6, Y, Y @ D)
+        cf_graph_6, preferred, eliminated = merge_pw(cf_graph_5, D @ -D, D)
+        cf_graph_7, preferred, eliminated = merge_pw(cf_graph_6, Y, Y @ -D)
         # test that we sort the order of the nodes if both are counterfactual
-        cf_graph_8, preferred8, eliminated8 = merge_pw(figure_9b.graph, W @ -d, W @ +x)
+        cf_graph_8, preferred8, eliminated8 = merge_pw(figure_9b.graph, W @ -d, W @ -x)
         # test that we sort the order of the nodes if the both are factual
         cf_graph_9, preferred9, eliminated9 = merge_pw(figure_9b.graph, W, Z)
         self.assert_graph_equal(figure_11a.graph, cf_graph_2)
         self.assert_graph_equal(figure_11b.graph, cf_graph_6)
         self.assert_graph_equal(figure_11c.graph, cf_graph_7)
-        self.assert_graph_equal(merge_pw(figure_9b.graph, W @ +x, W @ -d)[0], cf_graph_8)
+        self.assert_graph_equal(merge_pw(figure_9b.graph, W @ -x, W @ -d)[0], cf_graph_8)
         self.assert_graph_equal(merge_pw(figure_9b.graph, Z, W)[0], cf_graph_9)
         self.assertTrue(D @ -d not in merge_pw(figure_11a.graph, Z, Z @ -d)[0].nodes())
 
+    def test_is_inconsistent(self):
+        r"""Test whether two nodes are inconsistent."""
+        self.assertTrue(is_inconsistent({D: -d, D @ +x: +d}, D, D @ ~X))
+        self.assertTrue(is_inconsistent({D @ -x: -d, D @ +x: +d}, D @ +x, D @ -x))
+        self.assertTrue(is_inconsistent({Y @ -x: -y, Y @ +x: +y}, Y @ +x, Y @ -x))
+
     def test_make_counterfactual_graph(self):
         r"""Test making a counterfactual graph.
 
@@ -482,14 +674,14 @@ class TestCounterfactualGraph(cases.GraphTestCase):
         :math:`P(y_{x,z},x')` will result in the counterfactual graph shown in Fig. 9(d).
         """
         actual_graph, actual_event = make_counterfactual_graph(
-            figure_9a.graph, {Y @ +x: +y, X: -x, Z @ -d: -z, D: -d}
+            figure_9a.graph, {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
         )
         self.assert_graph_equal(figure_9c.graph, actual_graph)
-        self.assertEqual({Y @ +x: +y, X: -x, Z: -z, D: -d}, actual_event)
+        self.assertEqual({Y @ -x: -y, X: +x, Z: -z, D: -d}, actual_event)
         actual_graph2, actual_event2 = make_counterfactual_graph(
-            figure_9a.graph, {Y @ (+x, -z): +y, X: -x}
+            figure_9a.graph, {Y @ (-x, -z): -y, X: +x}
         )
-        expected_graph2, expected_event2 = figure_9d.graph, {Y @ (+x, -z): +y, X: -x}
+        expected_graph2, expected_event2 = figure_9d.graph, {Y @ (-x, -z): -y, X: +x}
         self.assertEqual(expected_event2, actual_event2)
         self.assert_graph_equal(expected_graph2, actual_graph2)
 
@@ -500,15 +692,61 @@ class TestCounterfactualGraph(cases.GraphTestCase):
         )
         self.assertIsNone(actual_event3)
 
-        # Check whether {Y_{+x,z,w): -y, X_w: -x} automatically simplifies to {Y_{z,w}: y, X: -x} (it should not)
-        actual_graph4, actual_event4 = make_counterfactual_graph(
-            graph=figure_9a.graph, event={X @ -W: X, Y @ (-W, +X, -Z): Y}
+        # # Check whether {Y_{+x,z,w): -y, X_w: -x} automatically simplifies to {Y_{z,w}: y, X: -x} (it should not)
+        # actual_graph4, actual_event4 = make_counterfactual_graph(
+        #     graph=figure_9a.graph, event={X @ -W: X, Y @ (-W, +X, -Z): Y}
+        # )
+        # expected_event4 = {Y @ (-W, -Z): Y, X: X}
+        # expected_graph4 = NxMixedGraph.from_edges(
+        #     nodes={W @ -W, Y @ (-W, +X, -Z), Z @ (-W, +X, -Z), X},
+        #     directed={(W @ -W, Y @ (-W, +X, -Z)), (Z @ (-W, +X, -Z), Y @ (-W, +X, -Z))},
+        #     undirected={frozenset({X, Y @ (-W, +X, -Z)})},
+        # )
+        # self.assertNotEqual(expected_event4, actual_event4)
+        # self.assert_graph_equal(expected_graph4, actual_graph4)
+
+        # Check whether the counterfactual graph is consistent (it is not)
+        actual_graph5, actual_event5 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(directed=[(W, X), (Z, X), (X, Y)]),
+            event={Y @ -w: -y, Y @ -z: +y, X @ -w: +x, X @ -z: +x},
+        )
+        self.assertIsNone(actual_event5)
+
+        # Check whether Probability of necessary and sufficient causation induces a W graph
+        actual_graph6, actual_event6 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(directed=[(X, Y)]), event={Y @ -x: -y, Y @ +x: +y}
+        )
+        expected_graph6 = NxMixedGraph.from_edges(
+            directed=[(X @ -x, Y @ -x), (X @ +x, Y @ +x)], undirected=[(Y @ -x, Y @ +x)]
+        )
+
+        expected_event6 = {Y @ -x: -y, Y @ +x: +y}
+        self.assert_graph_equal(expected_graph6, actual_graph6)
+        self.assertEqual(expected_event6, actual_event6)
+
+        # Check that a triplet world graph is not inconsistent
+        actual_graph7, actual_event7 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(
+                directed=[(X, W), (W, Y), (D, Z), (Z, Y), (A, B), (B, Y)], undirected=[(X, Y)]
+            ),
+            event={Y @ +x: +y, X: -x, Z @ -d: -z, D: -d, A: +A},
+        )
+        self.assertIsNotNone(actual_event7)
+        expected_graph7 = NxMixedGraph.from_edges(
+            directed=[(D, Z), (B, Y @ +X), (W @ +X, Y @ +X), (Z, Y @ +X), (A, B), (X @ +X, W @ +X)],
+            undirected=[(X, Y @ +X)],
+        )
+        self.assert_graph_equal(expected_graph7, actual_graph7)
+
+        actual_graph8, actual_event8 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(directed=[(X, Z), (Z, Y)]),
+            event={Y @ -x: -y, Y @ +x: -y, Z @ +x: -z, Z @ -x: -z},
         )
-        expected_event4 = {Y @ (-W, -Z): Y, X: X}
-        expected_graph4 = NxMixedGraph.from_edges(
-            nodes={W @ -W, Y @ (-W, +X, -Z), Z @ (-W, +X, -Z), X},
-            directed={(W @ -W, Y @ (-W, +X, -Z)), (Z @ (-W, +X, -Z), Y @ (-W, +X, -Z))},
-            undirected={frozenset({X, Y @ (-W, +X, -Z)})},
+        expected_graph8 = NxMixedGraph.from_edges(
+            directed=[(X @ -x, Z @ -x), (Z @ -x, Y @ -x), (X @ +x, Z @ +x)],
+            undirected=[(Z @ -x, Z @ +x)],
         )
-        self.assertNotEqual(expected_event4, actual_event4)
-        self.assert_graph_equal(expected_graph4, actual_graph4)
+
+        expected_event8 = {Y @ -X: -Y, Z @ +X: -Z, Z @ -X: -Z}
+        self.assert_graph_equal(expected_graph8, actual_graph8)
+        self.assertEqual(expected_event8, actual_event8)
diff --git a/tests/test_algorithm/test_id_alg.py b/tests/test_algorithm/test_id_alg.py
index ebc0332..58297cf 100644
--- a/tests/test_algorithm/test_id_alg.py
+++ b/tests/test_algorithm/test_id_alg.py
@@ -114,6 +114,15 @@ class TestIdentify(unittest.TestCase):
                 Sum.safe(expression=Sum.safe(expression=P(Y, X, Z), ranges=[X]), ranges=[Z]),
                 identify(identification["id_in"][0]),
             )
+        with self.assertRaises(ValueError):
+            line_2(
+                Identification.from_parts(
+                    outcomes={Y},
+                    treatments={X},
+                    estimand=P(X, Y, Z),
+                    graph=NxMixedGraph.from_edges(directed=[(X, Z), (Z, Y)]),
+                )
+            )
 
     def test_line_3(self):
         r"""Test line 3 of the identification algorithm.
@@ -132,6 +141,15 @@ class TestIdentify(unittest.TestCase):
                 P(Y | (X, Z)),
                 identify(identification["id_in"][0]),
             )
+        with self.assertRaises(ValueError):
+            line_3(
+                Identification.from_parts(
+                    outcomes={Y},
+                    treatments={X},
+                    estimand=P(X, Y, Z),
+                    graph=NxMixedGraph.from_edges(directed=[(X, Z), (Z, Y)]),
+                )
+            )
 
     def test_line_4(self):
         r"""Test line 4 of the identification algorithm.
@@ -166,6 +184,16 @@ class TestIdentify(unittest.TestCase):
                 identify(identification["id_in"][0]),
             )
 
+        with self.assertRaises(ValueError):
+            line_4(
+                Identification.from_parts(
+                    outcomes={Y},
+                    treatments={X},
+                    estimand=P(X, Y, Z),
+                    graph=NxMixedGraph.from_edges(undirected=[(X, Y), (Y, Z)]),
+                )
+            )
+
     def test_line_5(self):
         r"""Test line 5 of the identification algorithm.
 
@@ -179,6 +207,14 @@ class TestIdentify(unittest.TestCase):
                 line_5(identification["id_in"][0])
             with self.assertRaises(Unidentifiable):
                 identify(identification["id_in"][0])
+        self.assertIsNone(
+            line_5(
+                Identification(
+                    Query.from_expression(P(X, Y, Z)),
+                    NxMixedGraph.from_edges(directed=[(X, Y), (Y, Z)]),
+                )
+            )
+        )
 
     def test_line_6(self):
         r"""Test line 6 of the identification algorithm.
@@ -194,10 +230,8 @@ class TestIdentify(unittest.TestCase):
                 expected=id_out.estimand,
                 actual=line_6(identification["id_in"][0]),
             )
-            self.assert_expr_equal(
-                P(Y | (X, Z)),
-                line_6(identification["id_in"][0]),
-            )
+        with self.assertRaises(ValueError):
+            line_6(line_7_example.identifications[0]["id_in"][0])
 
     def test_line_7(self):
         r"""Test line 2 of the identification algorithm.
diff --git a/tests/test_algorithm/test_id_star.py b/tests/test_algorithm/test_id_star.py
new file mode 100644
index 0000000..55229cd
--- /dev/null
+++ b/tests/test_algorithm/test_id_star.py
@@ -0,0 +1,507 @@
+# -*- coding: utf-8 -*-
+
+"""Tests for the ID* algorithm."""
+
+from tests.test_algorithm import cases
+from y0.algorithm.identify._extras import (
+    get_district_interventions,
+    intervene_on_district,
+)
+from y0.algorithm.identify.cg import make_counterfactual_graph
+from y0.algorithm.identify.id_star import (
+    ConflictUnidentifiable,
+    get_cf_interventions,
+    get_conflicts,
+    get_events_of_district,
+    get_events_of_each_district,
+    get_evidence,
+    get_free_variables,
+    id_star,
+    id_star_line_6,
+    id_star_line_9,
+    is_redundant_counterfactual,
+    remove_event_tautologies,
+    violates_axiom_of_effectiveness,
+)
+from y0.algorithm.identify.idc_star import (
+    cf_rule_2_of_do_calculus_applies,
+    get_new_outcomes_and_conditions,
+    get_remaining_and_missing_events,
+    idc_star,
+)
+from y0.dsl import D, One, P, Sum, W, X, Y, Z, Zero
+from y0.examples import (
+    figure_9a,
+    figure_9c,
+    figure_9d,
+    tikka_figure_2,
+    tikka_figure_5,
+    tikka_figure_6a,
+    tikka_figure_6b,
+    tikka_unidentifiable_cfgraph,
+)
+from y0.graph import NxMixedGraph
+
+d, w, x, y, z = -D, -W, -X, -Y, -Z
+
+
+class TestIDCStar(cases.GraphTestCase):
+    """Tests for the  ``IDC*`` algorithm."""
+
+    def test_rule_2_of_do_calculus_applies(self):
+        """Test that rule 2 of do calculus applies."""
+        input_graph1 = NxMixedGraph.from_edges(directed=[(X, Y), (Z, X), (Z, Y)])
+        outcomes = {Y}
+        condition = X
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(input_graph1, outcomes, condition))
+        input_graph2 = NxMixedGraph.from_edges(directed=[(X, Y)])
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(input_graph2, outcomes, condition))
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(input_graph1, outcomes, Z))
+        self.assertFalse(
+            cf_rule_2_of_do_calculus_applies(tikka_figure_2.graph, outcomes, condition)
+        )
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(tikka_figure_5.graph, {Y @ -x}, D))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y}, Z))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y}, X))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y @ -x}, X))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6b.graph, {Y}, Z))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6b.graph, {Y}, X))
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y @ -x}, Z @ -x))
+
+
+class TestIDStar(cases.GraphTestCase):
+    """Tests for the ``ID*`` algorithm."""
+
+    def test_id_star_line_1(self):
+        """Check that one is returned when running ID* on an empty event."""
+        self.assertEqual(One(), id_star(figure_9a.graph, {}))
+
+    def test_id_star_line_2(self):
+        """Check to see if the counterfactual event violates the Axiom of Effectiveness."""
+        # Examples all from figure_9a.graph
+        self.assertTrue(violates_axiom_of_effectiveness({X @ -x: +x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ ~x: x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ (y, z, x): ~x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ (x, z): x, Y @ (x, -y): +y}))
+        self.assertTrue(
+            violates_axiom_of_effectiveness(
+                {Y @ -x: -y, X @ +x: -x, Y @ x: y, Y @ ~x: y, Y @ ~x: y}
+            )
+        )
+        self.assertFalse(violates_axiom_of_effectiveness({X @ x: x}))
+        self.assertFalse(violates_axiom_of_effectiveness({X @ ~x: ~x}))
+        self.assertFalse(violates_axiom_of_effectiveness({X @ x: x, Y @ x: y}))
+        self.assertFalse(violates_axiom_of_effectiveness({Z @ -x: -z, X: +x}))
+        self.assertEqual(Zero(), id_star(figure_9a.graph, {X @ x: ~x}))
+
+    def test_id_star_line_3(self):
+        """Check to see if the counterfactual event is tautological."""
+        self.assertEqual({}, remove_event_tautologies({X @ x: x}))
+        self.assertEqual({Y @ x: y}, remove_event_tautologies({Y @ x: y, X @ x: x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ ~x: ~x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ (~x, w): ~x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ (w, ~x): ~x}))
+        event = {Y @ (+x, -z): +y, X: -x}
+        self.assertEqual(event, remove_event_tautologies(event))
+
+    def test_id_star_line_4(self):
+        """Check that the counterfactual graph is correct."""
+        new_graph, new_event = make_counterfactual_graph(
+            graph=figure_9a.graph, event={Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
+        )
+        self.assert_graph_equal(figure_9c.graph, new_graph)
+        self.assertEqual({Y @ x: y, X: +x, Z: -z, D: -d}, new_event)
+
+        actual_graph3, actual_event3 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)]),
+            event={Z @ -d: -z, Z: +z, D: -d},
+        )
+
+        # created a test case where id_star_line_4 returns None
+        self.assertIsNone(actual_event3)
+
+        event_4 = {Y @ (-x, -z): +y, X: +x}
+
+        expected_graph = figure_9d.graph
+        expected = expected_graph, event_4
+        self.assertEqual(expected, make_counterfactual_graph(figure_9a.graph, event_4))
+        self.assertFalse(figure_9d.graph.is_connected())
+
+    def test_id_star_line_6(self):
+        """For each district, intervene only on the Markov pillow of each district.
+
+        This is the key difference between the original ID* and our ID*.
+        Original ID* intervenes on all variables not in the district, but this creates problems with identifiability.
+        The identifiability issues are resolved by intervening only on the Markov pillow of each district.
+        """
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_summand = {W}
+        district1 = frozenset({X, Y @ -x})
+        district2 = frozenset({Z})
+        district3 = frozenset({W @ -x})
+        district4 = frozenset({D})
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        expected_markov_pillow_events = {
+            district1: expected_event1,
+            district2: expected_event2,
+            district3: expected_event3,
+            district4: expected_event4,
+        }
+
+        expected_district_interventions = {
+            frozenset({X, Y @ -x}): {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x},
+            frozenset({Z}): {Z @ (-y, -x, -w, -d): -z},
+            frozenset({W @ -x}): {W @ (-y, -x, -z, -d): -w},
+            frozenset({D}): {D @ (-y, -x, -z, -w): -d},
+        }
+        # Create a counterfactual graph with at least 2 c-components and return the summand and interventions of each
+
+        actual_summand, actual_district_events = id_star_line_6(input_graph, input_event)
+        self.assertEqual(expected_summand, actual_summand)
+
+        # Original ID* intervenes on all variables not in the district, but this creates problems with identifiability
+        self.assertNotEqual(expected_district_interventions, actual_district_events)
+
+        # The identifiability issues are resolved by intervening only on the Markov pillow.
+        self.assertEqual(expected_markov_pillow_events, actual_district_events)
+
+        # input_graph2 = figure_9c.graph
+        # input_event = {Y @ ~x: ~y, X: -x, Z @ -d: -z, D: -d}
+
+    def test_get_free_variables(self):
+        """Test that each variable not in the event or self-intervened is marginalized out."""
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_summand = {W}
+        self.assertEqual(expected_summand, get_free_variables(input_graph, input_event))
+        input_event2 = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
+        expected_summand2 = {W}
+        self.assertEqual(expected_summand2, get_free_variables(input_graph, input_event2))
+
+    def test_get_conflicts(self):
+        """Test conflicts between interventions in the graph and value assignments in the event."""
+        input_graph = NxMixedGraph.from_edges(
+            directed=[(X @ +x, Y @ +x), (X @ -x, Y @ -x)], undirected=[(Y @ +x, Y @ -x)]
+        )
+        event = {Y @ -x: -y, Y @ +x: +y}
+        self.assertEqual([(-x, +x), (+x, -x)], sorted(get_conflicts(input_graph, event)))
+
+    def test_get_evidence(self):
+        """Test that the interventions and values of a event."""
+        self.assertEqual({-x, -w, -d, -y}, get_evidence({Y @ -x: -y, W @ -d: -w}))
+        self.assertEqual({-x, -w, -d, -y}, get_evidence({Y @ -x: -y, X: -x, W @ -d: -w}))
+
+    def test_get_cf_interventions(self):
+        """Test we extract all interventions from the CF variables and only the counterfactual variables."""
+        self.assertEqual(set(), get_cf_interventions(NxMixedGraph.from_edges(directed=[(X, Y)])))
+        self.assertEqual(
+            {-x, -d, -w},
+            get_cf_interventions(NxMixedGraph.from_edges(directed=[(X, Y @ (-x, -d, -w))])),
+        )
+        self.assertEqual(
+            {-x, -d, -w},
+            get_cf_interventions(
+                NxMixedGraph.from_edges(directed=[(X @ (-d, -w), Y @ (-x, -d, -w))])
+            ),
+        )
+        self.assertEqual(
+            {-x, -d, -w},
+            get_cf_interventions(NxMixedGraph.from_edges(directed=[(X @ (-d, -w), Y @ -x)])),
+        )
+
+    def test_get_events_of_district(self):
+        """Ensure that each variable in the district is intervened on the Markov pillow."""
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        district1 = {X, Y @ -x}
+        district2 = {Z}
+        district3 = {W @ -x}
+        district4 = {D}
+        # districts = district1 | district2 | district3 | district4
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        self.assertEqual(
+            expected_event1, get_events_of_district(input_graph, district1, input_event)
+        )
+        self.assertEqual(
+            expected_event2, get_events_of_district(input_graph, district2, input_event)
+        )
+        self.assertEqual(
+            expected_event3, get_events_of_district(input_graph, district3, input_event)
+        )
+        self.assertEqual(
+            expected_event4, get_events_of_district(input_graph, district4, input_event)
+        )
+        input_event5 = {Y @ (-D, -X): -Y, X: +X, Z: -Z}
+        graph5 = NxMixedGraph.from_edges(
+            nodes=[Y @ (-D, -X), X, Z @ (-D, -X), Z, W @ (-D, -X), D @ (-D, -X), D, X @ (-D, -X)],
+            directed=[
+                (Z @ (-D, -X), Y @ (-D, -X)),
+                (W @ (-D, -X), Y @ (-D, -X)),
+                (D @ (-D, -X), Z @ (-D, -X)),
+                (D, Z),
+                (X @ (-D, -X), W @ (-D, -X)),
+            ],
+            undirected=[(Y @ (-D, -X), X), (Z @ (-D, -X), Z)],
+        )
+        district5 = {Z, Z @ (-D, -X)}
+        expected_event5 = {Z @ -D: -z}
+        self.assertEqual(expected_event5, get_events_of_district(graph5, district5, input_event5))
+        input_graph_unidentifiable = tikka_unidentifiable_cfgraph.graph
+        self.assertEqual(
+            expected_event1,
+            get_events_of_district(input_graph_unidentifiable, district1, input_event),
+        )
+
+    def test_get_markov_pillow(self):
+        """Test that we correctly compute the Markov pillow of the district."""
+        district = {Z, Z @ (-d, -x)}
+        graph = NxMixedGraph.from_edges(
+            nodes=[Y @ (-D, -X), X, Z @ (-D, -X), Z, W @ (-D, -X), D @ (-D, -X), D, X @ (-D, -X)],
+            directed=[
+                (Z @ (-D, -X), Y @ (-D, -X)),
+                (W @ (-D, -X), Y @ (-D, -X)),
+                (D @ (-D, -X), Z @ (-D, -X)),
+                (D, Z),
+                (X @ (-D, -X), W @ (-D, -X)),
+            ],
+            undirected=[(Y @ (-D, -X), X), (Z @ (-D, -X), Z)],
+        )
+        expected_pillow = {D, D @ (-d, -x)}
+        self.assertEqual(expected_pillow, graph.get_markov_pillow(district))
+        graph2 = tikka_unidentifiable_cfgraph.graph
+        district2 = {X, Y @ (-x)}
+        expected_pillow2 = {W @ -x, Z}
+        self.assertEqual(expected_pillow2, graph2.get_markov_pillow(district2))
+
+    def test_events_of_each_district(self):
+        """Ensure that each variable in the district is intervened on the Markov pillow."""
+        input_graph = tikka_figure_5.graph
+        district1 = frozenset({X, Y @ -x})
+        district2 = frozenset({Z})
+        district3 = frozenset({W @ -x})
+        district4 = frozenset({D})
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        expected_events = {
+            district1: expected_event1,
+            district2: expected_event2,
+            district3: expected_event3,
+            district4: expected_event4,
+        }
+        self.assertEqual(expected_events, get_events_of_each_district(input_graph, input_event))
+
+    def test_intervene_on_district(self):
+        """Test that we correctly intervene on a district."""
+        district1 = {X, Y @ -x}
+        district2 = {Z}
+        district3 = {W @ -x}
+        district4 = {D}
+        districts = district1 | district2 | district3 | district4
+        intervention1 = districts - district1
+        intervention2 = districts - district2
+        intervention3 = districts - district3
+        intervention4 = districts - district4
+
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}  # from gamma' (Tikka 2022)
+        expected_event1 = {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x}
+        expected_event2 = {Z @ (-y, -x, -w, -d): -z}
+        expected_event3 = {W @ (-y, -x, -z, -d): -w}
+        expected_event4 = {D @ (-y, -x, -z, -w): -d}
+        self.assertEqual(
+            expected_event1, intervene_on_district(district1, intervention1, input_event)
+        )
+        self.assertEqual(
+            expected_event2, intervene_on_district(district2, intervention2, input_event)
+        )
+        self.assertEqual(
+            expected_event3, intervene_on_district(district3, intervention3, input_event)
+        )
+        self.assertEqual(
+            expected_event4, intervene_on_district(district4, intervention4, input_event)
+        )
+
+    def test_get_district_interventions(self):
+        """Ensure that for each district, we intervene on the domain of each variable not in the district.
+
+        Confirm that the domain of variables in the event query are restricted to their event value
+        """
+        # counterfactual_graph = NxMixedGraph.from_edges(
+        #     undirected=[(Y @ (~X, Z), X)],
+        #     directed=[
+        #         (W @ (~X, Z), Y @ (~X, Z)),
+        #     ],
+        # )
+
+        # event = {Y @ (+X, -Z): -Y, X: -X}
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}  # from gamma' (Tikka 2022)
+        input_graph = tikka_figure_5.graph
+
+        # expected_summand = {W}
+        expected_district_interventions = {
+            frozenset({X, Y @ -x}): {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x},
+            frozenset({Z}): {Z @ (-y, -x, -w, -d): -z},
+            frozenset({W @ -x}): {W @ (-y, -x, -z, -d): -w},
+            frozenset({D}): {D @ (-y, -x, -z, -w): -d},
+        }
+        actual = get_district_interventions(input_graph, input_event)
+        self.assertEqual(expected_district_interventions, actual)
+
+    def test_id_star_line_8(self):
+        """Attempt to generate a conflict with an inconsistent value assignment."""
+        input_graph = NxMixedGraph.from_edges(
+            directed=[(X @ +x, Y @ +x), (X @ -x, Y @ -x)], undirected=[(Y @ +x, Y @ -x)]
+        )
+        event = {Y @ -x: -y, Y @ +x: +y}
+        self.assertTrue(get_conflicts(input_graph, event))
+
+    def test_id_star_line_9(self):
+        """Test line 9 of the ID* algorithm.
+
+        Test that estimand returned by taking the effect of all subscripts in
+        new_event on variables in new_event is correct
+        """
+        input_graph1 = NxMixedGraph.from_edges(undirected=[(X, Y @ (-w, +x, -z))])
+        expected1 = P[-w, +x, -z](X, Y)
+        input_graph2 = NxMixedGraph.from_edges(undirected=[(X, Y)])
+        expected2 = P(X, Y)
+        self.assertEqual(expected1, id_star_line_9(input_graph1))
+        self.assertEqual(expected2, id_star_line_9(input_graph2))
+
+    def test_is_redundant_counterfactual(self):
+        """Test that we can detect if counterfactual variable is redundant."""
+        self.assertTrue(is_redundant_counterfactual(Y @ (+x, -y), -y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -y), +y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -z), -y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -z), +y))
+
+    def test_get_remaining_and_missing_events(self):
+        """Test that we can extract the missing and remaining events from a new event."""
+        old_event = {Y @ -X: -Y, X: +X, Z @ -D: -Z, D: -D}
+        new_event = {Y @ -X: -Y, X: +X, D: -D, Z: -Z}
+        remaining_events, missing_events = get_remaining_and_missing_events(new_event, old_event)
+        expected_remaining = {Y @ -x: -y, X: +x, D: -d}
+        expected_missing = {Z @ -d: -z}
+        self.assertEqual(expected_remaining, remaining_events)
+        self.assertEqual(expected_missing, missing_events)
+
+    def test_get_new_outcomes_and_conditions(self):
+        """Test that we can recover all cases of outcomes and conditions from a new event."""
+        old_outcomes = {Y @ -x: -y}
+        old_conditions = {X: +x, Z @ -d: -z, D: -d}
+        new_event = {Y @ -X: -Y, X: +X, D: -D, Z: -Z}
+        new_outcomes, new_conditions = get_new_outcomes_and_conditions(
+            new_event, old_outcomes, old_conditions
+        )
+        expected_new_outcomes = {Y @ -x: -y}
+        expected_new_conditions = {X: +x, D: -d, Z: -z}
+        self.assertEqual(expected_new_outcomes, new_outcomes)
+        self.assertEqual(expected_new_conditions, new_conditions)
+        new_event2 = {Y: -y, X: +x, D: -d, Z: -z}
+        new_outcomes2, new_conditions2 = get_new_outcomes_and_conditions(
+            new_event2, old_outcomes, old_conditions
+        )
+        expected_new_outcomes2 = {Y: -y}
+        expected_new_conditions2 = {X: +x, D: -d, Z: -z}
+        self.assertEqual(expected_new_outcomes2, new_outcomes2)
+        self.assertEqual(expected_new_conditions2, new_conditions2)
+        new_event3 = {Y: -y, X: +x, D: -d, Z @ -d: -z}
+        new_outcomes3, new_conditions3 = get_new_outcomes_and_conditions(
+            new_event3, old_outcomes, old_conditions
+        )
+        expected_new_outcomes3 = {Y: -y}
+        expected_new_conditions3 = {X: +x, D: -d, Z @ -d: -z}
+        self.assertEqual(expected_new_outcomes3, new_outcomes3)
+        self.assertEqual(expected_new_conditions3, new_conditions3)
+        new_event4 = {Y @ -x: -y, X: +x, D: -d, Z @ -d: -z}
+        new_outcomes4, new_conditions4 = get_new_outcomes_and_conditions(
+            new_event4, old_outcomes, old_conditions
+        )
+        expected_new_outcomes4 = {Y @ -x: -y}
+        expected_new_conditions4 = {X: +x, D: -d, Z @ -d: -z}
+        self.assertEqual(expected_new_outcomes4, new_outcomes4)
+        self.assertEqual(expected_new_conditions4, new_conditions4)
+
+        expected_new_outcomes5 = {Y: -y}
+        expected_new_conditions5 = {Y: -y, Y @ -z: +y}
+        new_event5 = {Y: -y, Y @ -z: +y}
+        new_outcomes5, new_conditions5 = get_new_outcomes_and_conditions(
+            new_event5, outcomes={Y @ -w: -y}, conditions={Y @ -x: -y, Y @ -z: +y}
+        )
+        self.assertEqual(expected_new_outcomes5, new_outcomes5)
+        self.assertEqual(expected_new_conditions5, new_conditions5)
+
+    def test_id_star(self):
+        """Test that the ID* algorithm returns the correct estimand."""
+        query = {Y @ (+x, -z): +y, X: -x}
+        actual = id_star(figure_9a.graph, query)
+        expected = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(W @ -x))
+        self.assert_expr_equal(expected, actual)
+
+        input_graph2 = figure_9a.graph
+        input_event2 = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
+        expected2 = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(Z @ -d) * P(W @ -x) * P(D))
+        self.assert_expr_equal(expected2, id_star(input_graph2, input_event2))
+
+        input_graph_line3 = input_graph2
+        input_event_line3 = {D @ +d: +d}
+        self.assert_expr_equal(One(), id_star(input_graph_line3, input_event_line3))
+
+        input_graph_line5 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_event_line5 = {Z @ -d: -z, Z: +z, D: -d}
+        self.assert_expr_equal(Zero(), id_star(input_graph_line5, input_event_line5))
+
+        input_graph_line8 = NxMixedGraph.from_edges(directed=[(X, Y)])
+        with self.assertRaises(ConflictUnidentifiable):
+            id_star(input_graph_line8, {Y @ -x: -y, Y @ +x: +y})
+
+    def test_idc_star(self):
+        """Test that the IDC* algorithm returns the correct estimand."""
+        input_graph_line_1 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_condition_line_1 = {Z @ -d: -z, Z: +z, D: -d}
+        input_outcome_line_1 = {Y @ -d: -y}
+        with self.assertRaises(ValueError):
+            idc_star(input_graph_line_1, input_outcome_line_1, input_condition_line_1)
+
+        input_graph_line3 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_outcome_line3 = {Z @ -d: -z}
+        input_condition_line3 = {Z: +z, D: -d}
+        self.assert_expr_equal(
+            Zero(), idc_star(input_graph_line3, input_outcome_line3, input_condition_line3)
+        )
+
+        input_graph_figure2 = tikka_figure_2.graph
+        input_outcome_figure2 = {Y @ -x: -y}
+        input_conditional_figure2 = {Z @ -x: -z, X: +x}
+        expected_estimand_figure2 = P(Y @ (-x, -z))
+        self.assert_expr_equal(
+            expected_estimand_figure2,
+            idc_star(input_graph_figure2, input_outcome_figure2, input_conditional_figure2),
+        )
+
+        input_graph_figure9a = figure_9a.graph
+        input_outcome_figure9a = {Y @ -x: -y}
+        input_conditional_figure9a = {X: +x, Z @ -d: -z, D: -d}
+        id_star_estimand = Sum[W](P[-z, -w](-y, +x) * P[-x](-w))
+        idc_star_estimand = id_star_estimand / Sum[W, Y, Z](P[-z, -w](-y, +x) * P[-x](-w))
+        self.assert_expr_equal(
+            idc_star_estimand, id_star_estimand / Sum[W, Y, Z](P[-z, -w](-y, +x) * P[-x](-w))
+        )
+        expected_estimand_figure_9a = Sum[D, W](
+            P(Z @ -D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(D)
+        ) / Sum[D, W, Y](Sum[D, W](P(Z @ -D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(D)))
+
+        self.assert_expr_equal(
+            expected_estimand_figure_9a,
+            idc_star(input_graph_figure9a, input_outcome_figure9a, input_conditional_figure9a),
+        )
diff --git a/tests/test_algorithm/test_original_id_star.py b/tests/test_algorithm/test_original_id_star.py
new file mode 100644
index 0000000..6534ed6
--- /dev/null
+++ b/tests/test_algorithm/test_original_id_star.py
@@ -0,0 +1,466 @@
+# -*- coding: utf-8 -*-
+
+"""Tests for the ID* algorithm."""
+
+from tests.test_algorithm import cases
+from y0.algorithm.identify._extras import (
+    get_district_interventions,
+    intervene_on_district,
+    original_id_star_line_6,
+)
+from y0.algorithm.identify.cg import make_counterfactual_graph
+from y0.algorithm.identify.id_star import (
+    get_cf_interventions,
+    get_conflicts,
+    get_events_of_district,
+    get_events_of_each_district,
+    get_evidence,
+    get_free_variables,
+    id_star,
+    id_star_line_9,
+    is_redundant_counterfactual,
+    remove_event_tautologies,
+    violates_axiom_of_effectiveness,
+)
+from y0.algorithm.identify.idc_star import (
+    cf_rule_2_of_do_calculus_applies,
+    get_new_outcomes_and_conditions,
+    get_remaining_and_missing_events,
+    idc_star,
+)
+from y0.dsl import D, One, P, Sum, W, X, Y, Z, Zero
+from y0.examples import (
+    figure_9a,
+    figure_9c,
+    figure_9d,
+    tikka_figure_2,
+    tikka_figure_5,
+    tikka_figure_6a,
+    tikka_figure_6b,
+)
+from y0.graph import NxMixedGraph
+
+d, w, x, y, z = -D, -W, -X, -Y, -Z
+
+
+class TestIDCStar(cases.GraphTestCase):
+    """Tests for the  ``IDC*`` algorithm."""
+
+    def test_rule_2_of_do_calculus_applies(self):
+        """Test that rule 2 of do calculus applies."""
+        input_graph1 = NxMixedGraph.from_edges(directed=[(X, Y), (Z, X), (Z, Y)])
+        outcomes = {Y}
+        condition = X
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(input_graph1, outcomes, condition))
+        input_graph2 = NxMixedGraph.from_edges(directed=[(X, Y)])
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(input_graph2, outcomes, condition))
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(input_graph1, outcomes, Z))
+        self.assertFalse(
+            cf_rule_2_of_do_calculus_applies(tikka_figure_2.graph, outcomes, condition)
+        )
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(tikka_figure_5.graph, {Y @ -x}, D))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y}, Z))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y}, X))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y @ -x}, X))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6b.graph, {Y}, Z))
+        self.assertFalse(cf_rule_2_of_do_calculus_applies(tikka_figure_6b.graph, {Y}, X))
+        self.assertTrue(cf_rule_2_of_do_calculus_applies(tikka_figure_6a.graph, {Y @ -x}, Z @ -x))
+
+
+class TestOriginalIDStar(cases.GraphTestCase):
+    """Tests for the ``ID*`` algorithm."""
+
+    def test_id_star_line_1(self):
+        """Check that one is returned when running ID* on an empty event."""
+        self.assertEqual(One(), id_star(figure_9a.graph, {}))
+
+    def test_id_star_line_2(self):
+        """Check to see if the counterfactual event violates the Axiom of Effectiveness."""
+        # Examples all from figure_9a.graph
+        self.assertTrue(violates_axiom_of_effectiveness({X @ -x: +x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ ~x: x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ (y, z, x): ~x}))
+        self.assertTrue(violates_axiom_of_effectiveness({X @ (x, z): x, Y @ (x, -y): +y}))
+        self.assertTrue(
+            violates_axiom_of_effectiveness(
+                {Y @ -x: -y, X @ +x: -x, Y @ x: y, Y @ ~x: y, Y @ ~x: y}
+            )
+        )
+        self.assertFalse(violates_axiom_of_effectiveness({X @ x: x}))
+        self.assertFalse(violates_axiom_of_effectiveness({X @ ~x: ~x}))
+        self.assertFalse(violates_axiom_of_effectiveness({X @ x: x, Y @ x: y}))
+        self.assertFalse(violates_axiom_of_effectiveness({Z @ -x: -z, X: +x}))
+        self.assertEqual(Zero(), id_star(figure_9a.graph, {X @ x: ~x}))
+
+    def test_id_star_line_3(self):
+        """Check to see if the counterfactual event is tautological."""
+        self.assertEqual({}, remove_event_tautologies({X @ x: x}))
+        self.assertEqual({Y @ x: y}, remove_event_tautologies({Y @ x: y, X @ x: x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ ~x: ~x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ (~x, w): ~x}))
+        self.assertEqual({Y @ x: +y}, remove_event_tautologies({Y @ x: +y, X @ (w, ~x): ~x}))
+        event = {Y @ (+x, -z): +y, X: -x}
+        self.assertEqual(event, remove_event_tautologies(event))
+
+    def test_id_star_line_4(self):
+        """Check that the counterfactual graph is correct."""
+        new_graph, new_event = make_counterfactual_graph(
+            graph=figure_9a.graph, event={Y @ x: y, X: +x, Z @ -d: -z, D: -d}
+        )
+        self.assert_graph_equal(figure_9c.graph, new_graph)
+        self.assertEqual({Y @ x: y, X: +x, Z: -z, D: -d}, new_event)
+
+        actual_graph3, actual_event3 = make_counterfactual_graph(
+            graph=NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)]),
+            event={Z @ -d: -z, Z: +z, D: -d},
+        )
+
+        # created a test case where id_star_line_4 returns None
+        self.assertIsNone(actual_event3)
+
+        event_4 = {Y @ (-x, -z): -y, X: +x}
+
+        expected_graph = figure_9d.graph
+        expected = expected_graph, event_4
+        self.assertEqual(expected, make_counterfactual_graph(figure_9a.graph, event_4))
+        self.assertFalse(figure_9d.graph.is_connected())
+
+    def test_original_id_star_line_6(self):
+        """For each district, intervene on all variables not in the district.
+
+        This is the key difference between the original ID* and our ID*.
+        Original ID* intervenes on all variables not in the district, but this creates problems with identifiability.
+        The identifiability issues are resolved by intervening only on the Markov pillow of each district.
+        """
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_summand = {W}
+        district1 = frozenset({X, Y @ -x})
+        district2 = frozenset({Z})
+        district3 = frozenset({W @ -x})
+        district4 = frozenset({D})
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        expected_markov_pillow_events = {
+            district1: expected_event1,
+            district2: expected_event2,
+            district3: expected_event3,
+            district4: expected_event4,
+        }
+
+        expected_district_interventions = {
+            frozenset({X, Y @ -x}): {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x},
+            frozenset({Z}): {Z @ (-y, -x, -w, -d): -z},
+            frozenset({W @ -x}): {W @ (-y, -x, -z, -d): -w},
+            frozenset({D}): {D @ (-y, -x, -z, -w): -d},
+        }
+        # Create a counterfactual graph with at least 2 c-components and return the summand and interventions of each
+
+        actual_summand, actual_district_events = original_id_star_line_6(input_graph, input_event)
+        self.assertEqual(expected_summand, actual_summand)
+
+        # Original ID* intervenes on all variables not in the district, but this creates problems with identifiability
+        self.assertEqual(expected_district_interventions, actual_district_events)
+
+        # The identifiability issues are resolved by intervening only on the Markov pillow.
+        self.assertNotEqual(expected_markov_pillow_events, actual_district_events)
+
+    def test_get_free_variables(self):
+        """Test that each variable not in the event or self-intervened is marginalized out."""
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_summand = {W}
+        self.assertEqual(expected_summand, get_free_variables(input_graph, input_event))
+        input_event2 = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
+        expected_summand2 = {W}
+        self.assertEqual(expected_summand2, get_free_variables(input_graph, input_event2))
+
+    def test_get_events_of_district(self):
+        """Ensure that each variable in the district is intervened on the Markov pillow."""
+        input_graph = tikka_figure_5.graph
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        district1 = {X, Y @ -x}
+        district2 = {Z}
+        district3 = {W @ -x}
+        district4 = {D}
+        # districts = district1 | district2 | district3 | district4
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        self.assertEqual(
+            expected_event1, get_events_of_district(input_graph, district1, input_event)
+        )
+        self.assertEqual(
+            expected_event2, get_events_of_district(input_graph, district2, input_event)
+        )
+        self.assertEqual(
+            expected_event3, get_events_of_district(input_graph, district3, input_event)
+        )
+        self.assertEqual(
+            expected_event4, get_events_of_district(input_graph, district4, input_event)
+        )
+        input_event5 = {Y @ (-D, -X): -Y, X: +X, Z: -Z}
+        graph5 = NxMixedGraph.from_edges(
+            nodes=[Y @ (-D, -X), X, Z @ (-D, -X), Z, W @ (-D, -X), D @ (-D, -X), D, X @ (-D, -X)],
+            directed=[
+                (Z @ (-D, -X), Y @ (-D, -X)),
+                (W @ (-D, -X), Y @ (-D, -X)),
+                (D @ (-D, -X), Z @ (-D, -X)),
+                (D, Z),
+                (X @ (-D, -X), W @ (-D, -X)),
+            ],
+            undirected=[(Y @ (-D, -X), X), (Z @ (-D, -X), Z)],
+        )
+        district5 = {Z, Z @ (-D, -X)}
+        expected_event5 = {Z @ -D: -z}
+        self.assertEqual(expected_event5, get_events_of_district(graph5, district5, input_event5))
+
+    def test_get_markov_pillow(self):
+        """Test that we correctly compute the Markov pillow of the district."""
+        district = {Z, Z @ (-d, -x)}
+        graph = NxMixedGraph.from_edges(
+            nodes=[Y @ (-D, -X), X, Z @ (-D, -X), Z, W @ (-D, -X), D @ (-D, -X), D, X @ (-D, -X)],
+            directed=[
+                (Z @ (-D, -X), Y @ (-D, -X)),
+                (W @ (-D, -X), Y @ (-D, -X)),
+                (D @ (-D, -X), Z @ (-D, -X)),
+                (D, Z),
+                (X @ (-D, -X), W @ (-D, -X)),
+            ],
+            undirected=[(Y @ (-D, -X), X), (Z @ (-D, -X), Z)],
+        )
+        expected_pillow = {D, D @ (-d, -x)}
+        self.assertEqual(expected_pillow, graph.get_markov_pillow(district))
+
+    def test_events_of_each_district(self):
+        """Ensure that each variable in the district is intervened on the Markov pillow."""
+        input_graph = tikka_figure_5.graph
+        district1 = frozenset({X, Y @ -x})
+        district2 = frozenset({Z})
+        district3 = frozenset({W @ -x})
+        district4 = frozenset({D})
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}
+        expected_event1 = {Y @ (-z, -w): -y, X @ (-z, -w): +x}
+        expected_event2 = {Z @ -d: -z}
+        expected_event3 = {W @ -x: -w}
+        expected_event4 = {D: -d}
+        expected_events = {
+            district1: expected_event1,
+            district2: expected_event2,
+            district3: expected_event3,
+            district4: expected_event4,
+        }
+        self.assertEqual(expected_events, get_events_of_each_district(input_graph, input_event))
+
+    def test_intervene_on_district(self):
+        """Test that we correctly intervene on a district."""
+        district1 = {X, Y @ -x}
+        district2 = {Z}
+        district3 = {W @ -x}
+        district4 = {D}
+        districts = district1 | district2 | district3 | district4
+        intervention1 = districts - district1
+        intervention2 = districts - district2
+        intervention3 = districts - district3
+        intervention4 = districts - district4
+
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}  # from gamma' (Tikka 2022)
+        expected_event1 = {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x}
+        expected_event2 = {Z @ (-y, -x, -w, -d): -z}
+        expected_event3 = {W @ (-y, -x, -z, -d): -w}
+        expected_event4 = {D @ (-y, -x, -z, -w): -d}
+        self.assertEqual(
+            expected_event1, intervene_on_district(district1, intervention1, input_event)
+        )
+        self.assertEqual(
+            expected_event2, intervene_on_district(district2, intervention2, input_event)
+        )
+        self.assertEqual(
+            expected_event3, intervene_on_district(district3, intervention3, input_event)
+        )
+        self.assertEqual(
+            expected_event4, intervene_on_district(district4, intervention4, input_event)
+        )
+
+    def test_get_district_interventions(self):
+        """Ensure that for each district, we intervene on the domain of each variable not in the district.
+
+        Confirm that the domain of variables in the event query are restricted to their event value
+        """
+        # counterfactual_graph = NxMixedGraph.from_edges(
+        #     undirected=[(Y @ (~X, Z), X)],
+        #     directed=[
+        #         (W @ (~X, Z), Y @ (~X, Z)),
+        #     ],
+        # )
+
+        # event = {Y @ (+X, -Z): -Y, X: -X}
+        input_event = {Y @ -x: -y, X: +x, Z: -z, D: -d}  # from gamma' (Tikka 2022)
+        input_graph = tikka_figure_5.graph
+
+        # expected_summand = {W}
+        expected_district_interventions = {
+            frozenset({X, Y @ -x}): {Y @ (-x, -z, -w, -d): -y, X @ (-z, -w, -d): +x},
+            frozenset({Z}): {Z @ (-y, -x, -w, -d): -z},
+            frozenset({W @ -x}): {W @ (-y, -x, -z, -d): -w},
+            frozenset({D}): {D @ (-y, -x, -z, -w): -d},
+        }
+        actual = get_district_interventions(input_graph, input_event)
+        self.assertEqual(expected_district_interventions, actual)
+
+    def test_id_star_line_8(self):
+        """Attempt to generate a conflict with an inconsistent value assignment."""
+        input_graph = NxMixedGraph.from_edges(undirected=[(Y @ +x, X), (X, Z @ -d)])
+        self.assertEqual({-D, +X}, get_cf_interventions(input_graph))
+        query1 = {Y @ +x: +y, X: -x, D @ -d: -d}
+        self.assertEqual({+x, -x, -d, +y}, get_evidence(query1))
+        self.assertTrue(get_conflicts(input_graph, query1))
+        query2 = {Z @ -d: -z, X: +x}
+        self.assertEqual({-z, +x, -d}, get_evidence(query2))
+        self.assertFalse(get_conflicts(input_graph, query2))
+        graph3 = NxMixedGraph.from_edges(undirected=[(X, Y @ (-w, +x, -z))])
+        event3 = {Y @ (-w, +x, -z): -y, X: -x}
+        self.assertTrue(get_conflicts(graph3, event3))
+        graph4 = NxMixedGraph.from_edges(directed=[(X, Y @ -x)], undirected=[(X, Y @ -x)])
+        event4 = {Y @ -x: -y, X: +x}
+        self.assertTrue(get_conflicts(graph4, event4))
+
+    def test_id_star_line_9(self):
+        """Test line 9 of the ID* algorithm.
+
+        Test that estimand returned by taking the effect of all subscripts in
+        new_event on variables in new_event is correct
+        """
+        input_graph1 = NxMixedGraph.from_edges(undirected=[(X, Y @ (-w, +x, -z))])
+        expected1 = P[-w, +x, -z](X, Y)
+        input_graph2 = NxMixedGraph.from_edges(undirected=[(X, Y)])
+        expected2 = P(X, Y)
+        self.assertEqual(expected1, id_star_line_9(input_graph1))
+        self.assertEqual(expected2, id_star_line_9(input_graph2))
+
+    def test_is_redundant_counterfactual(self):
+        """Test that we can detect if counterfactual variable is redundant."""
+        self.assertTrue(is_redundant_counterfactual(Y @ (+x, -y), -y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -y), +y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -z), -y))
+        self.assertFalse(is_redundant_counterfactual(Y @ (+x, -z), +y))
+
+    def test_get_remaining_and_missing_events(self):
+        """Test that we can extract the missing and remaining events from a new event."""
+        old_event = {Y @ -X: -Y, X: +X, Z @ -D: -Z, D: -D}
+        new_event = {Y @ -X: -Y, X: +X, D: -D, Z: -Z}
+        remaining_events, missing_events = get_remaining_and_missing_events(new_event, old_event)
+        expected_remaining = {Y @ -x: -y, X: +x, D: -d}
+        expected_missing = {Z @ -d: -z}
+        self.assertEqual(expected_remaining, remaining_events)
+        self.assertEqual(expected_missing, missing_events)
+
+    def test_get_new_outcomes_and_conditions(self):
+        """Test that we can recover all cases of outcomes and conditions from a new event."""
+        old_outcomes = {Y @ -x: -y}
+        old_conditions = {X: +x, Z @ -d: -z, D: -d}
+        new_event = {Y @ -X: -Y, X: +X, D: -D, Z: -Z}
+        new_outcomes, new_conditions = get_new_outcomes_and_conditions(
+            new_event, old_outcomes, old_conditions
+        )
+        expected_new_outcomes = {Y @ -x: -y}
+        expected_new_conditions = {X: +x, D: -d, Z: -z}
+        self.assertEqual(expected_new_outcomes, new_outcomes)
+        self.assertEqual(expected_new_conditions, new_conditions)
+        new_event2 = {Y: -y, X: +x, D: -d, Z: -z}
+        new_outcomes2, new_conditions2 = get_new_outcomes_and_conditions(
+            new_event2, old_outcomes, old_conditions
+        )
+        expected_new_outcomes2 = {Y: -y}
+        expected_new_conditions2 = {X: +x, D: -d, Z: -z}
+        self.assertEqual(expected_new_outcomes2, new_outcomes2)
+        self.assertEqual(expected_new_conditions2, new_conditions2)
+        new_event3 = {Y: -y, X: +x, D: -d, Z @ -d: -z}
+        new_outcomes3, new_conditions3 = get_new_outcomes_and_conditions(
+            new_event3, old_outcomes, old_conditions
+        )
+        expected_new_outcomes3 = {Y: -y}
+        expected_new_conditions3 = {X: +x, D: -d, Z @ -d: -z}
+        self.assertEqual(expected_new_outcomes3, new_outcomes3)
+        self.assertEqual(expected_new_conditions3, new_conditions3)
+        new_event4 = {Y @ -x: -y, X: +x, D: -d, Z @ -d: -z}
+        new_outcomes4, new_conditions4 = get_new_outcomes_and_conditions(
+            new_event4, old_outcomes, old_conditions
+        )
+        expected_new_outcomes4 = {Y @ -x: -y}
+        expected_new_conditions4 = {X: +x, D: -d, Z @ -d: -z}
+        self.assertEqual(expected_new_outcomes4, new_outcomes4)
+        self.assertEqual(expected_new_conditions4, new_conditions4)
+
+        expected_new_outcomes5 = {Y: -y}
+        expected_new_conditions5 = {Y: -y, Y @ -z: +y}
+        new_event5 = {Y: -y, Y @ -z: +y}
+        new_outcomes5, new_conditions5 = get_new_outcomes_and_conditions(
+            new_event5, outcomes={Y @ -w: -y}, conditions={Y @ -x: -y, Y @ -z: +y}
+        )
+        self.assertEqual(expected_new_outcomes5, new_outcomes5)
+        self.assertEqual(expected_new_conditions5, new_conditions5)
+
+    def test_id_star(self):
+        """Test that the ID* algorithm returns the correct estimand."""
+        query = {Y @ (+x, -z): +y, X: -x}
+        actual = id_star(figure_9a.graph, query)
+        expected = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(W @ -x))
+        self.assert_expr_equal(expected, actual)
+
+        input_graph2 = figure_9a.graph
+        input_event2 = {Y @ -x: -y, X: +x, Z @ -d: -z, D: -d}
+        expected2 = Sum[W](P(Y @ (-z, -w), X @ (-z, -w)) * P(Z @ -d) * P(W @ -x) * P(D))
+        self.assert_expr_equal(expected2, id_star(input_graph2, input_event2))
+
+        input_graph_line3 = input_graph2
+        input_event_line3 = {D @ +d: +d}
+        self.assert_expr_equal(One(), id_star(input_graph_line3, input_event_line3))
+
+        input_graph_line5 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_event_line5 = {Z @ -d: -z, Z: +z, D: -d}
+        self.assert_expr_equal(Zero(), id_star(input_graph_line5, input_event_line5))
+
+    def test_idc_star(self):
+        """Test that the IDC* algorithm returns the correct estimand."""
+        input_graph_line_1 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_condition_line_1 = {Z @ -d: -z, Z: +z, D: -d}
+        input_outcome_line_1 = {Y @ -d: -y}
+        with self.assertRaises(ValueError):
+            idc_star(input_graph_line_1, input_outcome_line_1, input_condition_line_1)
+
+        input_graph_line3 = NxMixedGraph.from_edges(directed=[(D, Z), (Z, Y)])
+        input_outcome_line3 = {Z @ -d: -z}
+        input_condition_line3 = {Z: +z, D: -d}
+        self.assert_expr_equal(
+            Zero(), idc_star(input_graph_line3, input_outcome_line3, input_condition_line3)
+        )
+
+        input_graph_figure2 = tikka_figure_2.graph
+        input_outcome_figure2 = {Y @ -x: -y}
+        input_conditional_figure2 = {Z @ -x: -z, X: +x}
+        expected_estimand_figure2 = P(Y @ (-x, -z))
+        self.assert_expr_equal(
+            expected_estimand_figure2,
+            idc_star(input_graph_figure2, input_outcome_figure2, input_conditional_figure2),
+        )
+
+        input_graph_figure9a = figure_9a.graph
+        input_outcome_figure9a = {Y @ -x: -y}
+        input_conditional_figure9a = {X: +x, Z @ -d: -z, D: -d}
+        id_star_estimand = Sum[W](P[-z, -w](-y, +x) * P[-x](-w))
+        idc_star_estimand = id_star_estimand / Sum[W, Y, Z](P[-z, -w](-y, +x) * P[-x](-w))
+        self.assert_expr_equal(
+            idc_star_estimand, id_star_estimand / Sum[W, Y, Z](P[-z, -w](-y, +x) * P[-x](-w))
+        )
+        expected_estimand_figure_9a = Sum[D, W](
+            P(Z @ -D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(D)
+        ) / Sum[D, W, Y](Sum[D, W](P(Z @ -D) * P(X @ (-W, -Z), Y @ (-W, -Z)) * P(W @ -X) * P(D)))
+
+        self.assert_expr_equal(
+            expected_estimand_figure_9a,
+            idc_star(input_graph_figure9a, input_outcome_figure9a, input_conditional_figure9a),
+        )