diff --git a/pr-preview/pr-273/.buildinfo b/pr-preview/pr-273/.buildinfo
deleted file mode 100644
index 62e25f8bf..000000000
--- a/pr-preview/pr-273/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 4f582035e47e08d9f60659599fd5ed68
-tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/pr-preview/pr-273/.doctrees/api/api.doctree b/pr-preview/pr-273/.doctrees/api/api.doctree
deleted file mode 100644
index fd52acfe1..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/api.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/configs.doctree b/pr-preview/pr-273/.doctrees/api/configs.doctree
deleted file mode 100644
index 8d9639c05..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/configs.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/data.doctree b/pr-preview/pr-273/.doctrees/api/data.doctree
deleted file mode 100644
index c0dc62dba..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/data.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/datagrabbers.doctree b/pr-preview/pr-273/.doctrees/api/datagrabbers.doctree
deleted file mode 100644
index d360f0ec7..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/datagrabbers.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/datareaders.doctree b/pr-preview/pr-273/.doctrees/api/datareaders.doctree
deleted file mode 100644
index 0084ae30b..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/datareaders.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/index.doctree b/pr-preview/pr-273/.doctrees/api/index.doctree
deleted file mode 100644
index 4b6bb7ab5..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/markers.doctree b/pr-preview/pr-273/.doctrees/api/markers.doctree
deleted file mode 100644
index fffc03ddb..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/markers.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/nilearn.doctree b/pr-preview/pr-273/.doctrees/api/nilearn.doctree
deleted file mode 100644
index 198511e4e..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/nilearn.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/onthefly.doctree b/pr-preview/pr-273/.doctrees/api/onthefly.doctree
deleted file mode 100644
index 6bfa3f235..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/onthefly.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/pipeline.doctree b/pr-preview/pr-273/.doctrees/api/pipeline.doctree
deleted file mode 100644
index 353404434..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/pipeline.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/preprocessing.doctree b/pr-preview/pr-273/.doctrees/api/preprocessing.doctree
deleted file mode 100644
index 9a8706741..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/preprocessing.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/stats.doctree b/pr-preview/pr-273/.doctrees/api/stats.doctree
deleted file mode 100644
index 7bb92a596..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/stats.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/storage.doctree b/pr-preview/pr-273/.doctrees/api/storage.doctree
deleted file mode 100644
index b45b63eef..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/storage.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/testing.doctree b/pr-preview/pr-273/.doctrees/api/testing.doctree
deleted file mode 100644
index 5d794e91b..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/testing.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/api/utils.doctree b/pr-preview/pr-273/.doctrees/api/utils.doctree
deleted file mode 100644
index b7b6d3213..000000000
Binary files a/pr-preview/pr-273/.doctrees/api/utils.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/index.doctree b/pr-preview/pr-273/.doctrees/auto_examples/index.doctree
deleted file mode 100644
index 8b4282f04..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/norun_hcpfc_pearson.doctree b/pr-preview/pr-273/.doctrees/auto_examples/norun_hcpfc_pearson.doctree
deleted file mode 100644
index 2c56410c0..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/norun_hcpfc_pearson.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/norun_ukbvm_gmd.doctree b/pr-preview/pr-273/.doctrees/auto_examples/norun_ukbvm_gmd.doctree
deleted file mode 100644
index c6456776f..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/norun_ukbvm_gmd.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/run_compute_parcel_mean.doctree b/pr-preview/pr-273/.doctrees/auto_examples/run_compute_parcel_mean.doctree
deleted file mode 100644
index 929e8cf9c..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/run_compute_parcel_mean.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/run_datagrabber_bids_datalad.doctree b/pr-preview/pr-273/.doctrees/auto_examples/run_datagrabber_bids_datalad.doctree
deleted file mode 100644
index 9adb2910b..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/run_datagrabber_bids_datalad.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/run_ets_rss_marker.doctree b/pr-preview/pr-273/.doctrees/auto_examples/run_ets_rss_marker.doctree
deleted file mode 100644
index d0b6298db..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/run_ets_rss_marker.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/run_junifer_julearn.doctree b/pr-preview/pr-273/.doctrees/auto_examples/run_junifer_julearn.doctree
deleted file mode 100644
index 7b9a9c464..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/run_junifer_julearn.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/run_run_gmd_mean.doctree b/pr-preview/pr-273/.doctrees/auto_examples/run_run_gmd_mean.doctree
deleted file mode 100644
index fc690969b..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/run_run_gmd_mean.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/auto_examples/sg_execution_times.doctree b/pr-preview/pr-273/.doctrees/auto_examples/sg_execution_times.doctree
deleted file mode 100644
index f56b7740c..000000000
Binary files a/pr-preview/pr-273/.doctrees/auto_examples/sg_execution_times.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/builtin.doctree b/pr-preview/pr-273/.doctrees/builtin.doctree
deleted file mode 100644
index dea713650..000000000
Binary files a/pr-preview/pr-273/.doctrees/builtin.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/contribution.doctree b/pr-preview/pr-273/.doctrees/contribution.doctree
deleted file mode 100644
index 0aed5e72c..000000000
Binary files a/pr-preview/pr-273/.doctrees/contribution.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/environment.pickle b/pr-preview/pr-273/.doctrees/environment.pickle
deleted file mode 100644
index df570ea3b..000000000
Binary files a/pr-preview/pr-273/.doctrees/environment.pickle and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/coordinates.doctree b/pr-preview/pr-273/.doctrees/extending/coordinates.doctree
deleted file mode 100644
index 8a2f8ff5f..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/coordinates.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/datagrabber.doctree b/pr-preview/pr-273/.doctrees/extending/datagrabber.doctree
deleted file mode 100644
index eecc273fb..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/datagrabber.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/dependencies.doctree b/pr-preview/pr-273/.doctrees/extending/dependencies.doctree
deleted file mode 100644
index 84ff68007..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/dependencies.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/extension.doctree b/pr-preview/pr-273/.doctrees/extending/extension.doctree
deleted file mode 100644
index 9cb9f82f6..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/extension.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/index.doctree b/pr-preview/pr-273/.doctrees/extending/index.doctree
deleted file mode 100644
index 6876c34ab..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/marker.doctree b/pr-preview/pr-273/.doctrees/extending/marker.doctree
deleted file mode 100644
index 5b7576ffc..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/marker.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/masks.doctree b/pr-preview/pr-273/.doctrees/extending/masks.doctree
deleted file mode 100644
index 46ef1aeb7..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/masks.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/parcellations.doctree b/pr-preview/pr-273/.doctrees/extending/parcellations.doctree
deleted file mode 100644
index 669907491..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/parcellations.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/extending/preprocessor.doctree b/pr-preview/pr-273/.doctrees/extending/preprocessor.doctree
deleted file mode 100644
index abe3db4e5..000000000
Binary files a/pr-preview/pr-273/.doctrees/extending/preprocessor.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/faq.doctree b/pr-preview/pr-273/.doctrees/faq.doctree
deleted file mode 100644
index 524f83a7b..000000000
Binary files a/pr-preview/pr-273/.doctrees/faq.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/help.doctree b/pr-preview/pr-273/.doctrees/help.doctree
deleted file mode 100644
index 137fa19bb..000000000
Binary files a/pr-preview/pr-273/.doctrees/help.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/index.doctree b/pr-preview/pr-273/.doctrees/index.doctree
deleted file mode 100644
index 82cb4be0c..000000000
Binary files a/pr-preview/pr-273/.doctrees/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/installation.doctree b/pr-preview/pr-273/.doctrees/installation.doctree
deleted file mode 100644
index 44a181bea..000000000
Binary files a/pr-preview/pr-273/.doctrees/installation.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/maintaining.doctree b/pr-preview/pr-273/.doctrees/maintaining.doctree
deleted file mode 100644
index 260498a6f..000000000
Binary files a/pr-preview/pr-273/.doctrees/maintaining.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/starting.doctree b/pr-preview/pr-273/.doctrees/starting.doctree
deleted file mode 100644
index 5fbed4587..000000000
Binary files a/pr-preview/pr-273/.doctrees/starting.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/data.doctree b/pr-preview/pr-273/.doctrees/understanding/data.doctree
deleted file mode 100644
index 941d8b702..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/data.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/datagrabber.doctree b/pr-preview/pr-273/.doctrees/understanding/datagrabber.doctree
deleted file mode 100644
index 9d9c26eb2..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/datagrabber.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/datareader.doctree b/pr-preview/pr-273/.doctrees/understanding/datareader.doctree
deleted file mode 100644
index 6f3f7adce..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/datareader.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/index.doctree b/pr-preview/pr-273/.doctrees/understanding/index.doctree
deleted file mode 100644
index 24ea9ab05..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/marker.doctree b/pr-preview/pr-273/.doctrees/understanding/marker.doctree
deleted file mode 100644
index 4312f7f54..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/marker.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/pipeline.doctree b/pr-preview/pr-273/.doctrees/understanding/pipeline.doctree
deleted file mode 100644
index cb1adc8e8..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/pipeline.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/preprocess.doctree b/pr-preview/pr-273/.doctrees/understanding/preprocess.doctree
deleted file mode 100644
index e307c75f7..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/preprocess.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/understanding/storage.doctree b/pr-preview/pr-273/.doctrees/understanding/storage.doctree
deleted file mode 100644
index 233db86bd..000000000
Binary files a/pr-preview/pr-273/.doctrees/understanding/storage.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/using/codeless.doctree b/pr-preview/pr-273/.doctrees/using/codeless.doctree
deleted file mode 100644
index 6387b392a..000000000
Binary files a/pr-preview/pr-273/.doctrees/using/codeless.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/using/index.doctree b/pr-preview/pr-273/.doctrees/using/index.doctree
deleted file mode 100644
index e1f129336..000000000
Binary files a/pr-preview/pr-273/.doctrees/using/index.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/using/masks.doctree b/pr-preview/pr-273/.doctrees/using/masks.doctree
deleted file mode 100644
index d896bb5fc..000000000
Binary files a/pr-preview/pr-273/.doctrees/using/masks.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/using/queueing.doctree b/pr-preview/pr-273/.doctrees/using/queueing.doctree
deleted file mode 100644
index 5e541ca60..000000000
Binary files a/pr-preview/pr-273/.doctrees/using/queueing.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/using/running.doctree b/pr-preview/pr-273/.doctrees/using/running.doctree
deleted file mode 100644
index 44d6959bd..000000000
Binary files a/pr-preview/pr-273/.doctrees/using/running.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/.doctrees/whats_new.doctree b/pr-preview/pr-273/.doctrees/whats_new.doctree
deleted file mode 100644
index 7741dda3a..000000000
Binary files a/pr-preview/pr-273/.doctrees/whats_new.doctree and /dev/null differ
diff --git a/pr-preview/pr-273/_downloads/0129f8507efff39850cf153c51edb3ab/run_ets_rss_marker.py b/pr-preview/pr-273/_downloads/0129f8507efff39850cf153c51edb3ab/run_ets_rss_marker.py
deleted file mode 100644
index 7cf155102..000000000
--- a/pr-preview/pr-273/_downloads/0129f8507efff39850cf153c51edb3ab/run_ets_rss_marker.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-
-Extracting root sum of squares from edge-wise timeseries.
-=========================================================
-This example uses a ``RSSETSMarker`` to compute root sum of squares
-of the edge-wise timeseries using the Schaefer parcellation
-(100 rois and 200 rois, 17 Yeo networks) for a 4D nifti BOLD file.
-
-Authors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal
-
-License: BSD 3 clause
-
-"""
-
-import tempfile
-
-import junifer.testing.registry # noqa: F401
-from junifer.api import collect, run
-from junifer.storage import SQLiteFeatureStorage
-from junifer.utils import configure_logging
-
-
-###############################################################################
-# Set the logging level to info to see extra information:
-configure_logging(level="INFO")
-
-##############################################################################
-# Define the DataGrabber interface
-datagrabber = {
- "kind": "SPMAuditoryTestingDataGrabber",
-}
-
-###############################################################################
-# Define the markers interface
-markers = [
- {
- "name": "Schaefer100x17_RSSETS",
- "kind": "RSSETSMarker",
- "parcellation": "Schaefer100x17",
- },
- {
- "name": "Schaefer200x17_RSSETS",
- "kind": "RSSETSMarker",
- "parcellation": "Schaefer200x17",
- },
-]
-
-###############################################################################
-# Create a temporary directory for junifer feature extraction:
-# At the end you can read the extracted data into a ``pandas.DataFrame``.
-with tempfile.TemporaryDirectory() as tmpdir:
- # Define the storage interface
- storage = {
- "kind": "SQLiteFeatureStorage",
- "uri": f"{tmpdir}/test.sqlite",
- }
- # Run the defined junifer feature extraction pipeline
- run(
- workdir=tmpdir,
- datagrabber=datagrabber,
- markers=markers,
- storage=storage,
- elements=["sub001"], # we calculate for one subject only
- )
- # Collect extracted features data
- collect(storage=storage)
- # Create storage object to read in extracted features
- db = SQLiteFeatureStorage(uri=storage["uri"])
-
- # List all the features
- print(db.list_features())
- # Read extracted features
- df_vbm = db.read_df(feature_name="BOLD_Schaefer100x17_RSSETS")
-
-###############################################################################
-# Now we take a look at the dataframe
-df_vbm.head()
diff --git a/pr-preview/pr-273/_downloads/042dd4fe6bffbb0ea320b529af464ace/run_run_gmd_mean.py b/pr-preview/pr-273/_downloads/042dd4fe6bffbb0ea320b529af464ace/run_run_gmd_mean.py
deleted file mode 100644
index 277ba8f42..000000000
--- a/pr-preview/pr-273/_downloads/042dd4fe6bffbb0ea320b529af464ace/run_run_gmd_mean.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-UKB VBM GMD Extraction
-======================
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-"""
-import tempfile
-
-import junifer.testing.registry # noqa: F401
-from junifer.api import run
-
-
-datagrabber = {
- "kind": "OasisVBMTestingDataGrabber",
-}
-
-markers = [
- {
- "name": "Schaefer1000x7_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer1000x7_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "mean",
- },
- {
- "name": "Schaefer1000x7_Std",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "std",
- },
-]
-
-storage = {
- "kind": "SQLiteFeatureStorage",
-}
-
-with tempfile.TemporaryDirectory() as tmpdir:
- uri = f"{tmpdir}/test.sqlite"
- storage["uri"] = uri
- run(
- workdir="/tmp",
- datagrabber=datagrabber,
- markers=markers,
- storage=storage,
- )
diff --git a/pr-preview/pr-273/_downloads/04a7e637e66cd7d7b36569a7cb7e70b5/norun_ukbvm_gmd.py b/pr-preview/pr-273/_downloads/04a7e637e66cd7d7b36569a7cb7e70b5/norun_ukbvm_gmd.py
deleted file mode 100644
index 31ae34e27..000000000
--- a/pr-preview/pr-273/_downloads/04a7e637e66cd7d7b36569a7cb7e70b5/norun_ukbvm_gmd.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""
-UKB VBM GMD Extraction
-======================
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-"""
-
-
-from junifer.api import run
-
-
-markers = [
- {
- "name": "Schaefer1000x7_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer1000x7_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "mean",
- },
- {
- "name": "Schaefer1000x7_Std",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "std",
- },
-]
-
-run(
- workdir="/tmp",
- datagrabber="JuselessUKBVBM",
- elements=("sub-1627474", "ses-2"),
- markers=markers,
- storage="SQLDataFrameStorage",
- storage_params={"outpath": "/data/project/juniferexample"},
-)
diff --git a/pr-preview/pr-273/_downloads/07fcc19ba03226cd3d83d4e40ec44385/auto_examples_python.zip b/pr-preview/pr-273/_downloads/07fcc19ba03226cd3d83d4e40ec44385/auto_examples_python.zip
deleted file mode 100644
index 16d3119e2..000000000
Binary files a/pr-preview/pr-273/_downloads/07fcc19ba03226cd3d83d4e40ec44385/auto_examples_python.zip and /dev/null differ
diff --git a/pr-preview/pr-273/_downloads/35c7ed013e0aac743386dbe5f567501f/run_junifer_julearn.ipynb b/pr-preview/pr-273/_downloads/35c7ed013e0aac743386dbe5f567501f/run_junifer_julearn.ipynb
deleted file mode 100644
index b12609753..000000000
--- a/pr-preview/pr-273/_downloads/35c7ed013e0aac743386dbe5f567501f/run_junifer_julearn.ipynb
+++ /dev/null
@@ -1,158 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# Run junifer and julearn.\n\nThis example uses a ParcelAggregation marker to compute the mean of each parcel\nusing the Schaefer parcellation (100 rois, 7 Yeo networks) for a 3D nifti to\nextract some features for machine learning using julearn to predict some other\ndata.\n\nAuthors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import tempfile\n\nimport nilearn\nimport pandas as pd\nfrom julearn import run_cross_validation, PipelineCreator\n\nimport junifer.testing.registry # noqa: F401\nfrom junifer.api import collect, run\nfrom junifer.storage.sqlite import SQLiteFeatureStorage\nfrom junifer.utils import configure_logging"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Set the logging level to info to see extra information:\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "configure_logging(level=\"INFO\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the markers you want:\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "marker_dicts = [\n {\n \"name\": \"Schaefer100x17_TrimMean80\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer100x17\",\n \"method\": \"trim_mean\",\n \"method_params\": {\"proportiontocut\": 0.2},\n },\n {\n \"name\": \"Schaefer200x17_Mean\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer200x17\",\n \"method\": \"mean\",\n },\n]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define target and confounds for julearn machine learning:\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "y = \"age\"\nconfound = \"sex\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Load the VBM phenotype data for machine learning data:\n- Fetch the Oasis dataset\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "oasis_dataset = nilearn.datasets.fetch_oasis_vbm()\nage = oasis_dataset.ext_vars[y][:10]\nsex = (\n pd.Series(oasis_dataset.ext_vars[\"mf\"][:10])\n .map(lambda x: 1 if x == \"F\" else 0)\n .values\n)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a temporary directory for junifer feature extraction:\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with tempfile.TemporaryDirectory() as tmpdir:\n storage = {\"kind\": \"SQLiteFeatureStorage\", \"uri\": f\"{tmpdir}/test.sqlite\"}\n # run the defined junifer feature extraction pipeline\n run(\n workdir=\"/tmp\",\n datagrabber={\"kind\": \"OasisVBMTestingDataGrabber\"},\n markers=marker_dicts,\n storage=storage,\n )\n\n # read in extracted features and add confounds and targets\n # for julearn run cross validation\n collect(storage)\n db = SQLiteFeatureStorage(uri=storage[\"uri\"])\n\n df_vbm = db.read_df(feature_name=\"VBM_GM_Schaefer200x17_Mean\")\n oasis_subjects = [x[0] for x in df_vbm.index]\n df_vbm.index = oasis_subjects"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Using julearn for machine learning:\nWe predict the age given our vbm features and sex as a confound.\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "X = list(df_vbm.columns)\ndf_vbm[y] = age\ndf_vbm[confound] = sex\n\nX_types = {\n \"features\": X,\n \"confound\": confound,\n}\n\ncreator = PipelineCreator(problem_type=\"regression\", apply_to=\"features\")\ncreator.add(\"zscore\", apply_to=[\"features\", \"confound\"])\ncreator.add(\"confound_removal\", apply_to=\"features\", confounds=\"confound\")\ncreator.add(\"ridge\")\n\nscores = run_cross_validation(\n X=X + [confound],\n y=y,\n X_types=X_types,\n data=df_vbm,\n model=creator,\n cv=3,\n)\nprint(scores)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Interpretation of results:\nDoing machine learning with only 10 datapoints is not meaningful.\nThis explains the big variation in scores\nfor different cross-validation folds.\n\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/38a3ca477b4260f36bb72dbc46764f45/run_ets_rss_marker.ipynb b/pr-preview/pr-273/_downloads/38a3ca477b4260f36bb72dbc46764f45/run_ets_rss_marker.ipynb
deleted file mode 100644
index 54f4722eb..000000000
--- a/pr-preview/pr-273/_downloads/38a3ca477b4260f36bb72dbc46764f45/run_ets_rss_marker.ipynb
+++ /dev/null
@@ -1,133 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# Extracting root sum of squares from edge-wise timeseries.\nThis example uses a ``RSSETSMarker`` to compute root sum of squares\nof the edge-wise timeseries using the Schaefer parcellation\n(100 rois and 200 rois, 17 Yeo networks) for a 4D nifti BOLD file.\n\nAuthors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import tempfile\n\nimport junifer.testing.registry # noqa: F401\nfrom junifer.api import collect, run\nfrom junifer.storage import SQLiteFeatureStorage\nfrom junifer.utils import configure_logging"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Set the logging level to info to see extra information:\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "configure_logging(level=\"INFO\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the DataGrabber interface\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "datagrabber = {\n \"kind\": \"SPMAuditoryTestingDataGrabber\",\n}"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the markers interface\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "markers = [\n {\n \"name\": \"Schaefer100x17_RSSETS\",\n \"kind\": \"RSSETSMarker\",\n \"parcellation\": \"Schaefer100x17\",\n },\n {\n \"name\": \"Schaefer200x17_RSSETS\",\n \"kind\": \"RSSETSMarker\",\n \"parcellation\": \"Schaefer200x17\",\n },\n]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a temporary directory for junifer feature extraction:\nAt the end you can read the extracted data into a ``pandas.DataFrame``.\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with tempfile.TemporaryDirectory() as tmpdir:\n # Define the storage interface\n storage = {\n \"kind\": \"SQLiteFeatureStorage\",\n \"uri\": f\"{tmpdir}/test.sqlite\",\n }\n # Run the defined junifer feature extraction pipeline\n run(\n workdir=tmpdir,\n datagrabber=datagrabber,\n markers=markers,\n storage=storage,\n elements=[\"sub001\"], # we calculate for one subject only\n )\n # Collect extracted features data\n collect(storage=storage)\n # Create storage object to read in extracted features\n db = SQLiteFeatureStorage(uri=storage[\"uri\"])\n\n # List all the features\n print(db.list_features())\n # Read extracted features\n df_vbm = db.read_df(feature_name=\"BOLD_Schaefer100x17_RSSETS\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we take a look at the dataframe\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "df_vbm.head()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/674f52258bfb2a74cae86006ef74ffc6/norun_ukbvm_gmd.ipynb b/pr-preview/pr-273/_downloads/674f52258bfb2a74cae86006ef74ffc6/norun_ukbvm_gmd.ipynb
deleted file mode 100644
index 63f211af9..000000000
--- a/pr-preview/pr-273/_downloads/674f52258bfb2a74cae86006ef74ffc6/norun_ukbvm_gmd.ipynb
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# UKB VBM GMD Extraction\n\nAuthors: Federico Raimondo\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from junifer.api import run\n\n\nmarkers = [\n {\n \"name\": \"Schaefer1000x7_TrimMean80\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"trim_mean\",\n \"method_params\": {\"proportiontocut\": 0.2},\n },\n {\n \"name\": \"Schaefer1000x7_Mean\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"mean\",\n },\n {\n \"name\": \"Schaefer1000x7_Std\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"std\",\n },\n]\n\nrun(\n workdir=\"/tmp\",\n datagrabber=\"JuselessUKBVBM\",\n elements=(\"sub-1627474\", \"ses-2\"),\n markers=markers,\n storage=\"SQLDataFrameStorage\",\n storage_params={\"outpath\": \"/data/project/juniferexample\"},\n)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/6f1e7a639e0699d6164445b55e6c116d/auto_examples_jupyter.zip b/pr-preview/pr-273/_downloads/6f1e7a639e0699d6164445b55e6c116d/auto_examples_jupyter.zip
deleted file mode 100644
index 30f7f4df3..000000000
Binary files a/pr-preview/pr-273/_downloads/6f1e7a639e0699d6164445b55e6c116d/auto_examples_jupyter.zip and /dev/null differ
diff --git a/pr-preview/pr-273/_downloads/7bdf714a1446ae07ef3fa9d23e9b27c3/run_datagrabber_bids_datalad.py b/pr-preview/pr-273/_downloads/7bdf714a1446ae07ef3fa9d23e9b27c3/run_datagrabber_bids_datalad.py
deleted file mode 100644
index ce1488636..000000000
--- a/pr-preview/pr-273/_downloads/7bdf714a1446ae07ef3fa9d23e9b27c3/run_datagrabber_bids_datalad.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-Generic BIDS DataGrabber for datalad.
-=====================================
-
-This example uses a generic BIDS DataGraber to get the data from a BIDS dataset
-store in a datalad remote sibling.
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-"""
-
-from junifer.datagrabber import PatternDataladDataGrabber
-from junifer.utils import configure_logging
-
-
-###############################################################################
-# Set the logging level to info to see extra information
-configure_logging(level="INFO")
-
-
-###############################################################################
-# The BIDS DataGrabber requires three parameters: the types of data we want,
-# the specific pattern that matches each type, and the variables that will be
-# replaced in the patterns.
-types = ["T1w", "BOLD"]
-patterns = {
- "T1w": {
- "pattern": "{subject}/anat/{subject}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/func/{subject}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
-}
-replacements = ["subject"]
-###############################################################################
-# Additionally, a datalad-based DataGrabber requires the URI of the remote
-# sibling and the location of the dataset within the remote sibling.
-repo_uri = "https://gin.g-node.org/juaml/datalad-example-bids"
-rootdir = "example_bids"
-
-###############################################################################
-# Now we can use the DataGrabber within a `with` context.
-# One thing we can do with any DataGrabber is iterate over the elements.
-# In this case, each element of the DataGrabber is one session.
-with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
-) as dg:
- for elem in dg:
- print(elem)
-
-###############################################################################
-# Another feature of the DataGrabber is the ability to get a specific
-# element by its name. In this case, we index `sub-01` and we get the file
-# paths for the two types of data we want (T1w and BOLD).
-with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
-) as dg:
- sub01 = dg["sub-01"]
- print(sub01)
diff --git a/pr-preview/pr-273/_downloads/8a40bf470242f11236aa845a28ca568a/run_run_gmd_mean.ipynb b/pr-preview/pr-273/_downloads/8a40bf470242f11236aa845a28ca568a/run_run_gmd_mean.ipynb
deleted file mode 100644
index c21229aba..000000000
--- a/pr-preview/pr-273/_downloads/8a40bf470242f11236aa845a28ca568a/run_run_gmd_mean.ipynb
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# UKB VBM GMD Extraction\n\nAuthors: Federico Raimondo\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import tempfile\n\nimport junifer.testing.registry # noqa: F401\nfrom junifer.api import run\n\n\ndatagrabber = {\n \"kind\": \"OasisVBMTestingDataGrabber\",\n}\n\nmarkers = [\n {\n \"name\": \"Schaefer1000x7_TrimMean80\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"trim_mean\",\n \"method_params\": {\"proportiontocut\": 0.2},\n },\n {\n \"name\": \"Schaefer1000x7_Mean\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"mean\",\n },\n {\n \"name\": \"Schaefer1000x7_Std\",\n \"kind\": \"ParcelAggregation\",\n \"parcellation\": \"Schaefer1000x7\",\n \"method\": \"std\",\n },\n]\n\nstorage = {\n \"kind\": \"SQLiteFeatureStorage\",\n}\n\nwith tempfile.TemporaryDirectory() as tmpdir:\n uri = f\"{tmpdir}/test.sqlite\"\n storage[\"uri\"] = uri\n run(\n workdir=\"/tmp\",\n datagrabber=datagrabber,\n markers=markers,\n storage=storage,\n )"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/9c18fc617bcd4554f37a08e058947c6a/run_junifer_julearn.py b/pr-preview/pr-273/_downloads/9c18fc617bcd4554f37a08e058947c6a/run_junifer_julearn.py
deleted file mode 100644
index c1435b682..000000000
--- a/pr-preview/pr-273/_downloads/9c18fc617bcd4554f37a08e058947c6a/run_junifer_julearn.py
+++ /dev/null
@@ -1,123 +0,0 @@
-"""
-Run junifer and julearn.
-========================
-
-This example uses a ParcelAggregation marker to compute the mean of each parcel
-using the Schaefer parcellation (100 rois, 7 Yeo networks) for a 3D nifti to
-extract some features for machine learning using julearn to predict some other
-data.
-
-Authors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal
-
-License: BSD 3 clause
-"""
-
-import tempfile
-
-import nilearn
-import pandas as pd
-from julearn import run_cross_validation, PipelineCreator
-
-import junifer.testing.registry # noqa: F401
-from junifer.api import collect, run
-from junifer.storage.sqlite import SQLiteFeatureStorage
-from junifer.utils import configure_logging
-
-
-###############################################################################
-# Set the logging level to info to see extra information:
-configure_logging(level="INFO")
-
-
-###############################################################################
-# Define the markers you want:
-
-marker_dicts = [
- {
- "name": "Schaefer100x17_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer100x17",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer200x17_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer200x17",
- "method": "mean",
- },
-]
-
-
-###############################################################################
-# Define target and confounds for julearn machine learning:
-y = "age"
-confound = "sex"
-
-
-###############################################################################
-# Load the VBM phenotype data for machine learning data:
-# - Fetch the Oasis dataset
-oasis_dataset = nilearn.datasets.fetch_oasis_vbm()
-age = oasis_dataset.ext_vars[y][:10]
-sex = (
- pd.Series(oasis_dataset.ext_vars["mf"][:10])
- .map(lambda x: 1 if x == "F" else 0)
- .values
-)
-
-
-###############################################################################
-# Create a temporary directory for junifer feature extraction:
-with tempfile.TemporaryDirectory() as tmpdir:
- storage = {"kind": "SQLiteFeatureStorage", "uri": f"{tmpdir}/test.sqlite"}
- # run the defined junifer feature extraction pipeline
- run(
- workdir="/tmp",
- datagrabber={"kind": "OasisVBMTestingDataGrabber"},
- markers=marker_dicts,
- storage=storage,
- )
-
- # read in extracted features and add confounds and targets
- # for julearn run cross validation
- collect(storage)
- db = SQLiteFeatureStorage(uri=storage["uri"])
-
- df_vbm = db.read_df(feature_name="VBM_GM_Schaefer200x17_Mean")
- oasis_subjects = [x[0] for x in df_vbm.index]
- df_vbm.index = oasis_subjects
-
-
-###############################################################################
-# Using julearn for machine learning:
-# We predict the age given our vbm features and sex as a confound.
-X = list(df_vbm.columns)
-df_vbm[y] = age
-df_vbm[confound] = sex
-
-X_types = {
- "features": X,
- "confound": confound,
-}
-
-creator = PipelineCreator(problem_type="regression", apply_to="features")
-creator.add("zscore", apply_to=["features", "confound"])
-creator.add("confound_removal", apply_to="features", confounds="confound")
-creator.add("ridge")
-
-scores = run_cross_validation(
- X=X + [confound],
- y=y,
- X_types=X_types,
- data=df_vbm,
- model=creator,
- cv=3,
-)
-print(scores)
-
-###############################################################################
-# Interpretation of results:
-# Doing machine learning with only 10 datapoints is not meaningful.
-# This explains the big variation in scores
-# for different cross-validation folds.
diff --git a/pr-preview/pr-273/_downloads/a8a9c21c2e94466a6617dd3cbdf8509f/norun_hcpfc_pearson.py b/pr-preview/pr-273/_downloads/a8a9c21c2e94466a6617dd3cbdf8509f/norun_hcpfc_pearson.py
deleted file mode 100644
index 83f88aeed..000000000
--- a/pr-preview/pr-273/_downloads/a8a9c21c2e94466a6617dd3cbdf8509f/norun_hcpfc_pearson.py
+++ /dev/null
@@ -1,81 +0,0 @@
-"""
-HCP FC Extraction
-======================
-
-Authors: Leonard Sasse
-License: BSD 3 clause
-"""
-
-
-from junifer.api import run
-
-
-datagrabber = {
- "kind": "HCPOpenAccess",
- "modality": "fMRI",
- "preprocessed": "ICA+FIX",
- "space": "volumetric",
-}
-
-custom_confound_strategy = {
- "filter": "butterworth",
- "detrend": True,
- "high_pass": 0.01,
- "low_pass": 0.08,
- "standardize": True,
- "confounds": ["csf", "wm", "gsr"],
- "derivatives": True,
- "squares": True,
- "other": [],
-}
-
-markers = [
- {
- "name": "Power264_FCPearson",
- "kind": "FunctionalConnectivity",
- "parcellation": "Power264",
- "method": "Pearson",
- "confound_strategy": "Params36",
- },
- {
- "name": "Schaefer400x17_FCPearson",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Pearson",
- "confound_strategy": "Params24",
- },
- {
- "name": "Power264_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Power264",
- "method": "Spearman",
- "confound_strategy": "ICAAROMA",
- },
- {
- "name": "Schaefer400x17_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Spearman",
- "confound_strategy": "path/to/predefined/confound_file.tsv",
- },
- {
- "name": "Schaefer400x17_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Spearman",
- "confound_strategy": custom_confound_strategy,
- },
-]
-
-storage = {
- "kind": "SQLiteFeatureStorage",
- "uri": "/data/project/juniferexample",
-}
-
-run(
- workdir="/tmp",
- datagrabber=datagrabber,
- elements=[("100408", "REST1", "LR")],
- markers=markers,
- storage=storage,
-)
diff --git a/pr-preview/pr-273/_downloads/ae8b74fda4d8d226fc88ec2d6eed37f3/run_datagrabber_bids_datalad.ipynb b/pr-preview/pr-273/_downloads/ae8b74fda4d8d226fc88ec2d6eed37f3/run_datagrabber_bids_datalad.ipynb
deleted file mode 100644
index c44d0020b..000000000
--- a/pr-preview/pr-273/_downloads/ae8b74fda4d8d226fc88ec2d6eed37f3/run_datagrabber_bids_datalad.ipynb
+++ /dev/null
@@ -1,133 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# Generic BIDS DataGrabber for datalad.\n\nThis example uses a generic BIDS DataGraber to get the data from a BIDS dataset\nstore in a datalad remote sibling.\n\nAuthors: Federico Raimondo\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from junifer.datagrabber import PatternDataladDataGrabber\nfrom junifer.utils import configure_logging"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Set the logging level to info to see extra information\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "configure_logging(level=\"INFO\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The BIDS DataGrabber requires three parameters: the types of data we want,\nthe specific pattern that matches each type, and the variables that will be\nreplaced in the patterns.\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "types = [\"T1w\", \"BOLD\"]\npatterns = {\n \"T1w\": {\n \"pattern\": \"{subject}/anat/{subject}_T1w.nii.gz\",\n \"space\": \"native\",\n },\n \"BOLD\": {\n \"pattern\": \"{subject}/func/{subject}_task-rest_bold.nii.gz\",\n \"space\": \"MNI152NLin6Asym\",\n },\n}\nreplacements = [\"subject\"]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Additionally, a datalad-based DataGrabber requires the URI of the remote\nsibling and the location of the dataset within the remote sibling.\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "repo_uri = \"https://gin.g-node.org/juaml/datalad-example-bids\"\nrootdir = \"example_bids\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we can use the DataGrabber within a `with` context.\nOne thing we can do with any DataGrabber is iterate over the elements.\nIn this case, each element of the DataGrabber is one session.\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with PatternDataladDataGrabber(\n rootdir=rootdir,\n types=types,\n patterns=patterns,\n uri=repo_uri,\n replacements=replacements,\n) as dg:\n for elem in dg:\n print(elem)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Another feature of the DataGrabber is the ability to get a specific\nelement by its name. In this case, we index `sub-01` and we get the file\npaths for the two types of data we want (T1w and BOLD).\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with PatternDataladDataGrabber(\n rootdir=rootdir,\n types=types,\n patterns=patterns,\n uri=repo_uri,\n replacements=replacements,\n) as dg:\n sub01 = dg[\"sub-01\"]\n print(sub01)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/c1da12f6e22b8ea8de3cd5add55a3fa8/run_compute_parcel_mean.py b/pr-preview/pr-273/_downloads/c1da12f6e22b8ea8de3cd5add55a3fa8/run_compute_parcel_mean.py
deleted file mode 100644
index 0a82dab96..000000000
--- a/pr-preview/pr-273/_downloads/c1da12f6e22b8ea8de3cd5add55a3fa8/run_compute_parcel_mean.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-Computer Parcel Aggregation.
-============================
-
-This example uses the ``ParcelAggregation`` marker to compute the mean of each
-parcel using the Schaefer parcellations (100 rois, 7 Yeo networks) for both 3D
-and 4D NIfTI.
-
-Authors: Federico Raimondo, Synchon Mandal
-
-License: BSD 3 clause
-"""
-
-from junifer.testing.datagrabbers import (
- OasisVBMTestingDataGrabber,
- SPMAuditoryTestingDataGrabber,
-)
-from junifer.datareader import DefaultDataReader
-from junifer.markers import ParcelAggregation
-from junifer.utils import configure_logging
-
-
-###############################################################################
-# Set the logging level to info to see extra information
-configure_logging(level="INFO")
-
-###############################################################################
-# Perform parcel aggregation on VBM GM data (3D) from OASIS dataset
-with OasisVBMTestingDataGrabber() as dg:
- # Get the first element
- element = dg.get_elements()[0]
- # Read the element
- element_data = DefaultDataReader().fit_transform(dg[element])
- # Initialize marker
- marker = ParcelAggregation(parcellation="Schaefer100x7", method="mean")
- # Compute feature
- feature = marker.fit_transform(element_data)
- # Print the output
- print(feature.keys())
- print(feature["VBM_GM"]["data"].shape) # Shape is (1 x parcels)
-
-###############################################################################
-# Perform parcel aggregation on BOLD data (4D) from SPM Auditory dataset
-with SPMAuditoryTestingDataGrabber() as dg:
- # Get the first element
- element = dg.get_elements()[0]
- # Read the element
- element_data = DefaultDataReader().fit_transform(dg[element])
- # Initialize marker
- marker = ParcelAggregation(
- parcellation="Schaefer100x7", method="mean", on="BOLD"
- )
- # Compute feature
- feature = marker.fit_transform(element_data)
- # Print the output
- print(feature.keys())
- print(feature["BOLD"]["data"].shape) # Shape is (timepoints x parcels)
diff --git a/pr-preview/pr-273/_downloads/d4b93e64dc3a5e1a169ea5a14bbbd17e/norun_hcpfc_pearson.ipynb b/pr-preview/pr-273/_downloads/d4b93e64dc3a5e1a169ea5a14bbbd17e/norun_hcpfc_pearson.ipynb
deleted file mode 100644
index 392c4da64..000000000
--- a/pr-preview/pr-273/_downloads/d4b93e64dc3a5e1a169ea5a14bbbd17e/norun_hcpfc_pearson.ipynb
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# HCP FC Extraction\n\nAuthors: Leonard Sasse\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from junifer.api import run\n\n\ndatagrabber = {\n \"kind\": \"HCPOpenAccess\",\n \"modality\": \"fMRI\",\n \"preprocessed\": \"ICA+FIX\",\n \"space\": \"volumetric\",\n}\n\ncustom_confound_strategy = {\n \"filter\": \"butterworth\",\n \"detrend\": True,\n \"high_pass\": 0.01,\n \"low_pass\": 0.08,\n \"standardize\": True,\n \"confounds\": [\"csf\", \"wm\", \"gsr\"],\n \"derivatives\": True,\n \"squares\": True,\n \"other\": [],\n}\n\nmarkers = [\n {\n \"name\": \"Power264_FCPearson\",\n \"kind\": \"FunctionalConnectivity\",\n \"parcellation\": \"Power264\",\n \"method\": \"Pearson\",\n \"confound_strategy\": \"Params36\",\n },\n {\n \"name\": \"Schaefer400x17_FCPearson\",\n \"kind\": \"FunctionalConnectivity\",\n \"parcellation\": \"Schaefer400x17\",\n \"method\": \"Pearson\",\n \"confound_strategy\": \"Params24\",\n },\n {\n \"name\": \"Power264_FCSpearman\",\n \"kind\": \"FunctionalConnectivity\",\n \"parcellation\": \"Power264\",\n \"method\": \"Spearman\",\n \"confound_strategy\": \"ICAAROMA\",\n },\n {\n \"name\": \"Schaefer400x17_FCSpearman\",\n \"kind\": \"FunctionalConnectivity\",\n \"parcellation\": \"Schaefer400x17\",\n \"method\": \"Spearman\",\n \"confound_strategy\": \"path/to/predefined/confound_file.tsv\",\n },\n {\n \"name\": \"Schaefer400x17_FCSpearman\",\n \"kind\": \"FunctionalConnectivity\",\n \"parcellation\": \"Schaefer400x17\",\n \"method\": \"Spearman\",\n \"confound_strategy\": custom_confound_strategy,\n },\n]\n\nstorage = {\n \"kind\": \"SQLiteFeatureStorage\",\n \"uri\": \"/data/project/juniferexample\",\n}\n\nrun(\n workdir=\"/tmp\",\n datagrabber=datagrabber,\n elements=[(\"100408\", \"REST1\", \"LR\")],\n markers=markers,\n storage=storage,\n)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_downloads/ef059f4719b06b8d88553c134bac43b4/run_compute_parcel_mean.ipynb b/pr-preview/pr-273/_downloads/ef059f4719b06b8d88553c134bac43b4/run_compute_parcel_mean.ipynb
deleted file mode 100644
index e8886bef5..000000000
--- a/pr-preview/pr-273/_downloads/ef059f4719b06b8d88553c134bac43b4/run_compute_parcel_mean.ipynb
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n# Computer Parcel Aggregation.\n\nThis example uses the ``ParcelAggregation`` marker to compute the mean of each\nparcel using the Schaefer parcellations (100 rois, 7 Yeo networks) for both 3D\nand 4D NIfTI.\n\nAuthors: Federico Raimondo, Synchon Mandal\n\nLicense: BSD 3 clause\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from junifer.testing.datagrabbers import (\n OasisVBMTestingDataGrabber,\n SPMAuditoryTestingDataGrabber,\n)\nfrom junifer.datareader import DefaultDataReader\nfrom junifer.markers import ParcelAggregation\nfrom junifer.utils import configure_logging"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Set the logging level to info to see extra information\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "configure_logging(level=\"INFO\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Perform parcel aggregation on VBM GM data (3D) from OASIS dataset\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with OasisVBMTestingDataGrabber() as dg:\n # Get the first element\n element = dg.get_elements()[0]\n # Read the element\n element_data = DefaultDataReader().fit_transform(dg[element])\n # Initialize marker\n marker = ParcelAggregation(parcellation=\"Schaefer100x7\", method=\"mean\")\n # Compute feature\n feature = marker.fit_transform(element_data)\n # Print the output\n print(feature.keys())\n print(feature[\"VBM_GM\"][\"data\"].shape) # Shape is (1 x parcels)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Perform parcel aggregation on BOLD data (4D) from SPM Auditory dataset\n\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with SPMAuditoryTestingDataGrabber() as dg:\n # Get the first element\n element = dg.get_elements()[0]\n # Read the element\n element_data = DefaultDataReader().fit_transform(dg[element])\n # Initialize marker\n marker = ParcelAggregation(\n parcellation=\"Schaefer100x7\", method=\"mean\", on=\"BOLD\"\n )\n # Compute feature\n feature = marker.fit_transform(element_data)\n # Print the output\n print(feature.keys())\n print(feature[\"BOLD\"][\"data\"].shape) # Shape is (timepoints x parcels)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_images/junifer_logo.png b/pr-preview/pr-273/_images/junifer_logo.png
deleted file mode 100644
index 2665f6040..000000000
Binary files a/pr-preview/pr-273/_images/junifer_logo.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_norun_hcpfc_pearson_thumb.png b/pr-preview/pr-273/_images/sphx_glr_norun_hcpfc_pearson_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_norun_hcpfc_pearson_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_norun_ukbvm_gmd_thumb.png b/pr-preview/pr-273/_images/sphx_glr_norun_ukbvm_gmd_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_norun_ukbvm_gmd_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_run_compute_parcel_mean_thumb.png b/pr-preview/pr-273/_images/sphx_glr_run_compute_parcel_mean_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_run_compute_parcel_mean_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_run_datagrabber_bids_datalad_thumb.png b/pr-preview/pr-273/_images/sphx_glr_run_datagrabber_bids_datalad_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_run_datagrabber_bids_datalad_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_run_ets_rss_marker_thumb.png b/pr-preview/pr-273/_images/sphx_glr_run_ets_rss_marker_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_run_ets_rss_marker_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_run_junifer_julearn_thumb.png b/pr-preview/pr-273/_images/sphx_glr_run_junifer_julearn_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_run_junifer_julearn_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_images/sphx_glr_run_run_gmd_mean_thumb.png b/pr-preview/pr-273/_images/sphx_glr_run_run_gmd_mean_thumb.png
deleted file mode 100644
index 8a5fed589..000000000
Binary files a/pr-preview/pr-273/_images/sphx_glr_run_run_gmd_mean_thumb.png and /dev/null differ
diff --git a/pr-preview/pr-273/_sources/api/api.rst.txt b/pr-preview/pr-273/_sources/api/api.rst.txt
deleted file mode 100644
index b9c3e1685..000000000
--- a/pr-preview/pr-273/_sources/api/api.rst.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-API Functions
-=============
-
-Main API functions
-------------------
-
-.. automodule:: junifer.api
- :members:
- :imported-members:
-
-
-Decorators
-----------
-
-.. automodule:: junifer.api.decorators
- :members:
- :imported-members:
-
-
-Queue Context
--------------
-
-.. automodule:: junifer.api.queue_context
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/configs.rst.txt b/pr-preview/pr-273/_sources/api/configs.rst.txt
deleted file mode 100644
index e237fa772..000000000
--- a/pr-preview/pr-273/_sources/api/configs.rst.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Configs
-=======
-
-Juseless
---------
-
-.. automodule:: junifer.configs.juseless.datagrabbers
- :members:
- :imported-members:
- :special-members: None
diff --git a/pr-preview/pr-273/_sources/api/data.rst.txt b/pr-preview/pr-273/_sources/api/data.rst.txt
deleted file mode 100644
index 0ddfd5c7e..000000000
--- a/pr-preview/pr-273/_sources/api/data.rst.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Parcellations
-=============
-
-.. automodule:: junifer.data.parcellations
- :members:
-
-
-Coordinates
-===========
-
-.. automodule:: junifer.data.coordinates
- :members:
-
-
-Masks
-=====
-
-.. automodule:: junifer.data.masks
- :members:
-
-
-Template Spaces
-===============
-
-.. automodule:: junifer.data.template_spaces
- :members:
diff --git a/pr-preview/pr-273/_sources/api/datagrabbers.rst.txt b/pr-preview/pr-273/_sources/api/datagrabbers.rst.txt
deleted file mode 100644
index ad7496ce6..000000000
--- a/pr-preview/pr-273/_sources/api/datagrabbers.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Data Grabbers
-=============
-
-.. automodule:: junifer.datagrabber
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/datareaders.rst.txt b/pr-preview/pr-273/_sources/api/datareaders.rst.txt
deleted file mode 100644
index 28e3d7e62..000000000
--- a/pr-preview/pr-273/_sources/api/datareaders.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-DataReaders
-===========
-
-.. automodule:: junifer.datareader
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/index.rst.txt b/pr-preview/pr-273/_sources/api/index.rst.txt
deleted file mode 100644
index f5812db0d..000000000
--- a/pr-preview/pr-273/_sources/api/index.rst.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-API Reference
-=============
-
-Pipeline Elements
------------------
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- datagrabbers
- datareaders
- preprocessing
- markers
- storage
-
-Utilities
----------
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- data
- stats
- pipeline
- api
- utils
- testing
- onthefly
-
-Configs
--------
-
-.. toctree::
- :maxdepth: 3
- :caption: Contents:
-
- configs
-
-
-External
---------
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- nilearn.rst
diff --git a/pr-preview/pr-273/_sources/api/markers.rst.txt b/pr-preview/pr-273/_sources/api/markers.rst.txt
deleted file mode 100644
index 90d25495d..000000000
--- a/pr-preview/pr-273/_sources/api/markers.rst.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Markers
-=======
-
-.. automodule:: junifer.markers
- :members:
- :imported-members:
-
-
-Complexity
-----------
-
-.. automodule:: junifer.markers.complexity
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/nilearn.rst.txt b/pr-preview/pr-273/_sources/api/nilearn.rst.txt
deleted file mode 100644
index 100ef9fb5..000000000
--- a/pr-preview/pr-273/_sources/api/nilearn.rst.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Nilearn
-=======
-
-This package provides re-implementations of some of the functions in `nilearn`_.
-
-.. automodule:: junifer.external.nilearn
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/onthefly.rst.txt b/pr-preview/pr-273/_sources/api/onthefly.rst.txt
deleted file mode 100644
index c5599e560..000000000
--- a/pr-preview/pr-273/_sources/api/onthefly.rst.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-On-the-fly
-==========
-
-This package provides functions for quick transform operations on stored data.
-
-.. automodule:: junifer.onthefly
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/pipeline.rst.txt b/pr-preview/pr-273/_sources/api/pipeline.rst.txt
deleted file mode 100644
index bef920d5f..000000000
--- a/pr-preview/pr-273/_sources/api/pipeline.rst.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Pipeline
-========
-
-.. automodule:: junifer.pipeline
- :members:
- :imported-members:
-
-Registry
-========
-
-.. automodule:: junifer.pipeline.registry
- :members:
diff --git a/pr-preview/pr-273/_sources/api/preprocessing.rst.txt b/pr-preview/pr-273/_sources/api/preprocessing.rst.txt
deleted file mode 100644
index 036fddb53..000000000
--- a/pr-preview/pr-273/_sources/api/preprocessing.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Pre-processing
-==============
-
-.. automodule:: junifer.preprocess
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/stats.rst.txt b/pr-preview/pr-273/_sources/api/stats.rst.txt
deleted file mode 100644
index e2243f729..000000000
--- a/pr-preview/pr-273/_sources/api/stats.rst.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Stats
-=====
-
-.. automodule:: junifer.stats
- :members:
diff --git a/pr-preview/pr-273/_sources/api/storage.rst.txt b/pr-preview/pr-273/_sources/api/storage.rst.txt
deleted file mode 100644
index 3b442b4ea..000000000
--- a/pr-preview/pr-273/_sources/api/storage.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Storage
-=======
-
-.. automodule:: junifer.storage
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/api/testing.rst.txt b/pr-preview/pr-273/_sources/api/testing.rst.txt
deleted file mode 100644
index 0e25f04b3..000000000
--- a/pr-preview/pr-273/_sources/api/testing.rst.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Testing
-=======
-
-.. automodule:: junifer.testing.datagrabbers
- :members:
diff --git a/pr-preview/pr-273/_sources/api/utils.rst.txt b/pr-preview/pr-273/_sources/api/utils.rst.txt
deleted file mode 100644
index ad7755127..000000000
--- a/pr-preview/pr-273/_sources/api/utils.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Utils
-=====
-
-.. automodule:: junifer.utils
- :members:
- :imported-members:
diff --git a/pr-preview/pr-273/_sources/auto_examples/index.rst.txt b/pr-preview/pr-273/_sources/auto_examples/index.rst.txt
deleted file mode 100644
index ecdc7e5f8..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/index.rst.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-:orphan:
-
-Examples
-========
-
-The following are a set of examples.
-
-
-
-.. raw:: html
-
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_norun_ukbvm_gmd_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_norun_ukbvm_gmd.py`
-
-.. raw:: html
-
-
UKB VBM GMD Extraction
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_run_datagrabber_bids_datalad_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_run_datagrabber_bids_datalad.py`
-
-.. raw:: html
-
-
Generic BIDS DataGrabber for datalad.
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_run_run_gmd_mean_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_run_run_gmd_mean.py`
-
-.. raw:: html
-
-
UKB VBM GMD Extraction
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_run_compute_parcel_mean_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_run_compute_parcel_mean.py`
-
-.. raw:: html
-
-
Computer Parcel Aggregation.
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_run_ets_rss_marker_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_run_ets_rss_marker.py`
-
-.. raw:: html
-
-
Extracting root sum of squares from edge-wise timeseries.
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_norun_hcpfc_pearson_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_norun_hcpfc_pearson.py`
-
-.. raw:: html
-
-
HCP FC Extraction
-
-
-
-.. raw:: html
-
-
-
-.. only:: html
-
- .. image:: /auto_examples/images/thumb/sphx_glr_run_junifer_julearn_thumb.png
- :alt:
-
- :ref:`sphx_glr_auto_examples_run_junifer_julearn.py`
-
-.. raw:: html
-
-
Run junifer and julearn.
-
-
-
-.. raw:: html
-
-
-
-
-.. toctree::
- :hidden:
-
- /auto_examples/norun_ukbvm_gmd
- /auto_examples/run_datagrabber_bids_datalad
- /auto_examples/run_run_gmd_mean
- /auto_examples/run_compute_parcel_mean
- /auto_examples/run_ets_rss_marker
- /auto_examples/norun_hcpfc_pearson
- /auto_examples/run_junifer_julearn
-
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-gallery
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download all examples in Python source code: auto_examples_python.zip `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download all examples in Jupyter notebooks: auto_examples_jupyter.zip `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/norun_hcpfc_pearson.rst.txt b/pr-preview/pr-273/_sources/auto_examples/norun_hcpfc_pearson.rst.txt
deleted file mode 100644
index 01ae18f3f..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/norun_hcpfc_pearson.rst.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/norun_hcpfc_pearson.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_norun_hcpfc_pearson.py:
-
-
-HCP FC Extraction
-======================
-
-Authors: Leonard Sasse
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 8-82
-
-.. code-block:: default
-
-
-
- from junifer.api import run
-
-
- datagrabber = {
- "kind": "HCPOpenAccess",
- "modality": "fMRI",
- "preprocessed": "ICA+FIX",
- "space": "volumetric",
- }
-
- custom_confound_strategy = {
- "filter": "butterworth",
- "detrend": True,
- "high_pass": 0.01,
- "low_pass": 0.08,
- "standardize": True,
- "confounds": ["csf", "wm", "gsr"],
- "derivatives": True,
- "squares": True,
- "other": [],
- }
-
- markers = [
- {
- "name": "Power264_FCPearson",
- "kind": "FunctionalConnectivity",
- "parcellation": "Power264",
- "method": "Pearson",
- "confound_strategy": "Params36",
- },
- {
- "name": "Schaefer400x17_FCPearson",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Pearson",
- "confound_strategy": "Params24",
- },
- {
- "name": "Power264_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Power264",
- "method": "Spearman",
- "confound_strategy": "ICAAROMA",
- },
- {
- "name": "Schaefer400x17_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Spearman",
- "confound_strategy": "path/to/predefined/confound_file.tsv",
- },
- {
- "name": "Schaefer400x17_FCSpearman",
- "kind": "FunctionalConnectivity",
- "parcellation": "Schaefer400x17",
- "method": "Spearman",
- "confound_strategy": custom_confound_strategy,
- },
- ]
-
- storage = {
- "kind": "SQLiteFeatureStorage",
- "uri": "/data/project/juniferexample",
- }
-
- run(
- workdir="/tmp",
- datagrabber=datagrabber,
- elements=[("100408", "REST1", "LR")],
- markers=markers,
- storage=storage,
- )
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (0 minutes 0.000 seconds)
-
-
-.. _sphx_glr_download_auto_examples_norun_hcpfc_pearson.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: norun_hcpfc_pearson.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: norun_hcpfc_pearson.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/norun_ukbvm_gmd.rst.txt b/pr-preview/pr-273/_sources/auto_examples/norun_ukbvm_gmd.rst.txt
deleted file mode 100644
index 4743c4c4e..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/norun_ukbvm_gmd.rst.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/norun_ukbvm_gmd.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_norun_ukbvm_gmd.py:
-
-
-UKB VBM GMD Extraction
-======================
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 9-44
-
-.. code-block:: default
-
-
-
- from junifer.api import run
-
-
- markers = [
- {
- "name": "Schaefer1000x7_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer1000x7_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "mean",
- },
- {
- "name": "Schaefer1000x7_Std",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "std",
- },
- ]
-
- run(
- workdir="/tmp",
- datagrabber="JuselessUKBVBM",
- elements=("sub-1627474", "ses-2"),
- markers=markers,
- storage="SQLDataFrameStorage",
- storage_params={"outpath": "/data/project/juniferexample"},
- )
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (0 minutes 0.000 seconds)
-
-
-.. _sphx_glr_download_auto_examples_norun_ukbvm_gmd.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: norun_ukbvm_gmd.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: norun_ukbvm_gmd.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/run_compute_parcel_mean.rst.txt b/pr-preview/pr-273/_sources/auto_examples/run_compute_parcel_mean.rst.txt
deleted file mode 100644
index 990563d57..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/run_compute_parcel_mean.rst.txt
+++ /dev/null
@@ -1,232 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/run_compute_parcel_mean.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_run_compute_parcel_mean.py:
-
-
-Computer Parcel Aggregation.
-============================
-
-This example uses the ``ParcelAggregation`` marker to compute the mean of each
-parcel using the Schaefer parcellations (100 rois, 7 Yeo networks) for both 3D
-and 4D NIfTI.
-
-Authors: Federico Raimondo, Synchon Mandal
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 13-23
-
-.. code-block:: default
-
-
- from junifer.testing.datagrabbers import (
- OasisVBMTestingDataGrabber,
- SPMAuditoryTestingDataGrabber,
- )
- from junifer.datareader import DefaultDataReader
- from junifer.markers import ParcelAggregation
- from junifer.utils import configure_logging
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 24-25
-
-Set the logging level to info to see extra information
-
-.. GENERATED FROM PYTHON SOURCE LINES 25-27
-
-.. code-block:: default
-
- configure_logging(level="INFO")
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - ===== Lib Versions =====
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - numpy: 1.26.4
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - scipy: 1.11.4
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - pandas: 2.1.4
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - nilearn: 0.10.2
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - nibabel: 5.2.1
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - junifer: 0.0.5.dev11
- 2024-04-08 12:14:20,582 - JUNIFER - INFO - ========================
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 28-29
-
-Perform parcel aggregation on VBM GM data (3D) from OASIS dataset
-
-.. GENERATED FROM PYTHON SOURCE LINES 29-42
-
-.. code-block:: default
-
- with OasisVBMTestingDataGrabber() as dg:
- # Get the first element
- element = dg.get_elements()[0]
- # Read the element
- element_data = DefaultDataReader().fit_transform(dg[element])
- # Initialize marker
- marker = ParcelAggregation(parcellation="Schaefer100x7", method="mean")
- # Compute feature
- feature = marker.fit_transform(element_data)
- # Print the output
- print(feature.keys())
- print(feature["VBM_GM"]["data"].shape) # Shape is (1 x parcels)
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- /opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/nilearn/datasets/struct.py:852: UserWarning: `legacy_format` will default to `False` in release 0.11. Dataset fetchers will then return pandas dataframes by default instead of recarrays.
- warnings.warn(_LEGACY_FORMAT_MSG)
- 2024-04-08 12:14:20,587 - JUNIFER - INFO - Getting element sub-01
- 2024-04-08 12:14:20,587 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0001_MR1/mwrc1OAS1_0001_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:14:20,587 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:14:20,588 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:14:20,589 - JUNIFER - INFO - At least one of the parcellation files are missing. Fetching using nilearn.
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_7Networks_order.txt ...
- ...done. (0 seconds, 0 min)
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz ...
- ...done. (0 seconds, 0 min)
- 2024-04-08 12:14:20,674 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:20,704 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:21,749 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:21,845 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsj0y2np_0/Schaefer100x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsj0y2np_0/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp87hfp6w1/parcellations1nbdurxi/Schaefer100x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:23,226 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:24,172 - JUNIFER - INFO - No storage specified, returning dictionary
- dict_keys(['VBM_GM'])
- (1, 100)
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 43-44
-
-Perform parcel aggregation on BOLD data (4D) from SPM Auditory dataset
-
-.. GENERATED FROM PYTHON SOURCE LINES 44-58
-
-.. code-block:: default
-
- with SPMAuditoryTestingDataGrabber() as dg:
- # Get the first element
- element = dg.get_elements()[0]
- # Read the element
- element_data = DefaultDataReader().fit_transform(dg[element])
- # Initialize marker
- marker = ParcelAggregation(
- parcellation="Schaefer100x7", method="mean", on="BOLD"
- )
- # Compute feature
- feature = marker.fit_transform(element_data)
- # Print the output
- print(feature.keys())
- print(feature["BOLD"]["data"].shape) # Shape is (timepoints x parcels)
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:24,173 - JUNIFER - INFO - Getting element sub001
-
- Dataset created in /home/runner/nilearn_data/spm_auditory
-
- Data absent, downloading...
- Downloading data from https://www.fil.ion.ucl.ac.uk/spm/download/data/MoAEpilot/MoAEpilot.zip ...
-
Downloaded 1646592 of 34212021 bytes (4.8%, 20.0s remaining)
Downloaded 8347648 of 34212021 bytes (24.4%, 6.3s remaining)
Downloaded 11804672 of 34212021 bytes (34.5%, 5.8s remaining)
Downloaded 15491072 of 34212021 bytes (45.3%, 4.9s remaining)
Downloaded 19333120 of 34212021 bytes (56.5%, 3.9s remaining)
Downloaded 23248896 of 34212021 bytes (68.0%, 2.9s remaining)
Downloaded 27197440 of 34212021 bytes (79.5%, 1.8s remaining)
Downloaded 31137792 of 34212021 bytes (91.0%, 0.8s remaining) ...done. (11 seconds, 0 min)
- Extracting data from /home/runner/nilearn_data/spm_auditory/sub001/MoAEpilot.zip..... done.
- 2024-04-08 12:14:38,041 - JUNIFER - INFO - Reading BOLD from /tmp/tmpfe4hitzl/sub001_bold.nii.gz
- 2024-04-08 12:14:38,041 - JUNIFER - INFO - BOLD is type NIFTI
- 2024-04-08 12:14:38,042 - JUNIFER - INFO - Reading T1w from /tmp/tmpfe4hitzl/sub001_T1w.nii.gz
- 2024-04-08 12:14:38,042 - JUNIFER - INFO - T1w is type NIFTI
- 2024-04-08 12:14:38,042 - JUNIFER - INFO - Computing BOLD
- 2024-04-08 12:14:38,043 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:38,043 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:38,043 - JUNIFER - INFO - resolution: 3.0
- 2024-04-08 12:14:38,043 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:14:38,043 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:14:38,044 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:38,073 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:39,124 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:39,220 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsr5hylyll/Schaefer100x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsr5hylyll/MNI152Lin_T1w_3.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp87hfp6w1/parcellationsma6qtj5u/Schaefer100x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:40,604 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:43,239 - JUNIFER - INFO - No storage specified, returning dictionary
- dict_keys(['BOLD'])
- (96, 100)
-
-
-
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (0 minutes 22.662 seconds)
-
-
-.. _sphx_glr_download_auto_examples_run_compute_parcel_mean.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: run_compute_parcel_mean.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: run_compute_parcel_mean.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/run_datagrabber_bids_datalad.rst.txt b/pr-preview/pr-273/_sources/auto_examples/run_datagrabber_bids_datalad.rst.txt
deleted file mode 100644
index 4a53e01bc..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/run_datagrabber_bids_datalad.rst.txt
+++ /dev/null
@@ -1,232 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/run_datagrabber_bids_datalad.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_run_datagrabber_bids_datalad.py:
-
-
-Generic BIDS DataGrabber for datalad.
-=====================================
-
-This example uses a generic BIDS DataGraber to get the data from a BIDS dataset
-store in a datalad remote sibling.
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 12-17
-
-.. code-block:: default
-
-
- from junifer.datagrabber import PatternDataladDataGrabber
- from junifer.utils import configure_logging
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 18-19
-
-Set the logging level to info to see extra information
-
-.. GENERATED FROM PYTHON SOURCE LINES 19-22
-
-.. code-block:: default
-
- configure_logging(level="INFO")
-
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - ===== Lib Versions =====
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - numpy: 1.26.4
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - scipy: 1.11.4
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - pandas: 2.1.4
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - nilearn: 0.10.2
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - nibabel: 5.2.1
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - junifer: 0.0.5.dev11
- 2024-04-08 12:00:37,551 - JUNIFER - INFO - ========================
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 23-26
-
-The BIDS DataGrabber requires three parameters: the types of data we want,
-the specific pattern that matches each type, and the variables that will be
-replaced in the patterns.
-
-.. GENERATED FROM PYTHON SOURCE LINES 26-38
-
-.. code-block:: default
-
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": {
- "pattern": "{subject}/anat/{subject}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/func/{subject}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- replacements = ["subject"]
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 39-41
-
-Additionally, a datalad-based DataGrabber requires the URI of the remote
-sibling and the location of the dataset within the remote sibling.
-
-.. GENERATED FROM PYTHON SOURCE LINES 41-44
-
-.. code-block:: default
-
- repo_uri = "https://gin.g-node.org/juaml/datalad-example-bids"
- rootdir = "example_bids"
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 45-48
-
-Now we can use the DataGrabber within a `with` context.
-One thing we can do with any DataGrabber is iterate over the elements.
-In this case, each element of the DataGrabber is one session.
-
-.. GENERATED FROM PYTHON SOURCE LINES 48-58
-
-.. code-block:: default
-
- with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
- ) as dg:
- for elem in dg:
- print(elem)
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:00:37,552 - JUNIFER - INFO - `datadir` is None, creating a temporary directory
- 2024-04-08 12:00:37,552 - JUNIFER - INFO - `datadir` set to /tmp/tmpvhqllezb/datadir
- sub-02
- sub-06
- sub-07
- sub-05
- sub-03
- sub-01
- sub-09
- sub-04
- sub-08
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 59-62
-
-Another feature of the DataGrabber is the ability to get a specific
-element by its name. In this case, we index `sub-01` and we get the file
-paths for the two types of data we want (T1w and BOLD).
-
-.. GENERATED FROM PYTHON SOURCE LINES 62-71
-
-.. code-block:: default
-
- with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
- ) as dg:
- sub01 = dg["sub-01"]
- print(sub01)
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:00:42,540 - JUNIFER - INFO - `datadir` is None, creating a temporary directory
- 2024-04-08 12:00:42,540 - JUNIFER - INFO - `datadir` set to /tmp/tmp0_2s8ov_/datadir
- 2024-04-08 12:00:45,783 - JUNIFER - INFO - Getting element sub-01
- {'T1w': {'space': 'native', 'path': PosixPath('/tmp/tmp0_2s8ov_/datadir/example_bids/sub-01/anat/sub-01_T1w.nii.gz'), 'meta': {'datagrabber': {'class': 'PatternDataladDataGrabber', 'patterns': {'T1w': {'pattern': '{subject}/anat/{subject}_T1w.nii.gz', 'space': 'native'}, 'BOLD': {'pattern': '{subject}/func/{subject}_task-rest_bold.nii.gz', 'space': 'MNI152NLin6Asym'}}, 'replacements': ['subject'], 'confounds_format': None, 'types': ['T1w', 'BOLD'], 'uri': 'https://gin.g-node.org/juaml/datalad-example-bids', 'datalad_dirty': False, 'datalad_commit_id': '522dfb203afcd2cd55799bf347f9b211919a7338', 'datalad_id': 'fec92475-d9c0-4409-92ba-f041b6a12c40'}, 'dependencies': set(), 'element': {'subject': 'sub-01'}}}, 'BOLD': {'space': 'MNI152NLin6Asym', 'path': PosixPath('/tmp/tmp0_2s8ov_/datadir/example_bids/sub-01/func/sub-01_task-rest_bold.nii.gz'), 'meta': {'datagrabber': {'class': 'PatternDataladDataGrabber', 'patterns': {'T1w': {'pattern': '{subject}/anat/{subject}_T1w.nii.gz', 'space': 'native'}, 'BOLD': {'pattern': '{subject}/func/{subject}_task-rest_bold.nii.gz', 'space': 'MNI152NLin6Asym'}}, 'replacements': ['subject'], 'confounds_format': None, 'types': ['T1w', 'BOLD'], 'uri': 'https://gin.g-node.org/juaml/datalad-example-bids', 'datalad_dirty': False, 'datalad_commit_id': '522dfb203afcd2cd55799bf347f9b211919a7338', 'datalad_id': 'fec92475-d9c0-4409-92ba-f041b6a12c40'}, 'dependencies': set(), 'element': {'subject': 'sub-01'}}}}
-
-
-
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (0 minutes 9.379 seconds)
-
-
-.. _sphx_glr_download_auto_examples_run_datagrabber_bids_datalad.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: run_datagrabber_bids_datalad.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: run_datagrabber_bids_datalad.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/run_ets_rss_marker.rst.txt b/pr-preview/pr-273/_sources/auto_examples/run_ets_rss_marker.rst.txt
deleted file mode 100644
index 4c9edc207..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/run_ets_rss_marker.rst.txt
+++ /dev/null
@@ -1,338 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/run_ets_rss_marker.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_run_ets_rss_marker.py:
-
-
-Extracting root sum of squares from edge-wise timeseries.
-=========================================================
-This example uses a ``RSSETSMarker`` to compute root sum of squares
-of the edge-wise timeseries using the Schaefer parcellation
-(100 rois and 200 rois, 17 Yeo networks) for a 4D nifti BOLD file.
-
-Authors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 14-23
-
-.. code-block:: default
-
-
- import tempfile
-
- import junifer.testing.registry # noqa: F401
- from junifer.api import collect, run
- from junifer.storage import SQLiteFeatureStorage
- from junifer.utils import configure_logging
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 24-25
-
-Set the logging level to info to see extra information:
-
-.. GENERATED FROM PYTHON SOURCE LINES 25-27
-
-.. code-block:: default
-
- configure_logging(level="INFO")
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - ===== Lib Versions =====
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - numpy: 1.26.4
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - scipy: 1.11.4
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - pandas: 2.1.4
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - nilearn: 0.10.2
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - nibabel: 5.2.1
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - junifer: 0.0.5.dev11
- 2024-04-08 12:14:43,346 - JUNIFER - INFO - ========================
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 28-29
-
-Define the DataGrabber interface
-
-.. GENERATED FROM PYTHON SOURCE LINES 29-33
-
-.. code-block:: default
-
- datagrabber = {
- "kind": "SPMAuditoryTestingDataGrabber",
- }
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 34-35
-
-Define the markers interface
-
-.. GENERATED FROM PYTHON SOURCE LINES 35-48
-
-.. code-block:: default
-
- markers = [
- {
- "name": "Schaefer100x17_RSSETS",
- "kind": "RSSETSMarker",
- "parcellation": "Schaefer100x17",
- },
- {
- "name": "Schaefer200x17_RSSETS",
- "kind": "RSSETSMarker",
- "parcellation": "Schaefer200x17",
- },
- ]
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 49-51
-
-Create a temporary directory for junifer feature extraction:
-At the end you can read the extracted data into a ``pandas.DataFrame``.
-
-.. GENERATED FROM PYTHON SOURCE LINES 51-75
-
-.. code-block:: default
-
- with tempfile.TemporaryDirectory() as tmpdir:
- # Define the storage interface
- storage = {
- "kind": "SQLiteFeatureStorage",
- "uri": f"{tmpdir}/test.sqlite",
- }
- # Run the defined junifer feature extraction pipeline
- run(
- workdir=tmpdir,
- datagrabber=datagrabber,
- markers=markers,
- storage=storage,
- elements=["sub001"], # we calculate for one subject only
- )
- # Collect extracted features data
- collect(storage=storage)
- # Create storage object to read in extracted features
- db = SQLiteFeatureStorage(uri=storage["uri"])
-
- # List all the features
- print(db.list_features())
- # Read extracted features
- df_vbm = db.read_df(feature_name="BOLD_Schaefer100x17_RSSETS")
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating Marker Collection
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - DataGrabber output type: ['BOLD', 'T1w']
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating Data Reader:
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Data Reader output type: ['BOLD', 'T1w']
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating Marker: Schaefer100x17_RSSETS
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Marker output type: ['timeseries']
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating storage for Schaefer100x17_RSSETS
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating Marker: Schaefer200x17_RSSETS
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Marker output type: ['timeseries']
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Validating storage for Schaefer200x17_RSSETS
- 2024-04-08 12:14:43,347 - JUNIFER - INFO - Getting element sub001
- 2024-04-08 12:14:45,819 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:14:45,819 - JUNIFER - INFO - Reading BOLD from /tmp/tmpnrdatt2a/sub001_bold.nii.gz
- 2024-04-08 12:14:45,819 - JUNIFER - INFO - BOLD is type NIFTI
- 2024-04-08 12:14:45,820 - JUNIFER - INFO - Reading T1w from /tmp/tmpnrdatt2a/sub001_T1w.nii.gz
- 2024-04-08 12:14:45,820 - JUNIFER - INFO - T1w is type NIFTI
- 2024-04-08 12:14:45,820 - JUNIFER - INFO - Fitting marker Schaefer100x17_RSSETS
- 2024-04-08 12:14:45,820 - JUNIFER - INFO - Computing BOLD
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - resolution: 3.0
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:14:45,821 - JUNIFER - INFO - At least one of the parcellation files are missing. Fetching using nilearn.
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_17Networks_order.txt ...
- ...done. (0 seconds, 0 min)
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz ...
- ...done. (0 seconds, 0 min)
- 2024-04-08 12:14:45,907 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:45,937 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:46,983 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:47,079 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations0dy326zs/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellations0dy326zs/MNI152Lin_T1w_3.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp87hfp6w1/parcellations0_pp6jqj/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:48,519 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:51,141 - JUNIFER - INFO - Storing in
- 2024-04-08 12:14:51,158 - JUNIFER - INFO - Fitting marker Schaefer200x17_RSSETS
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - Computing BOLD
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - resolution: 3.0
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:14:51,159 - JUNIFER - INFO - At least one of the parcellation files are missing. Fetching using nilearn.
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_200Parcels_17Networks_order.txt ...
- ...done. (0 seconds, 0 min)
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz ...
- ...done. (0 seconds, 0 min)
- 2024-04-08 12:14:51,243 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:51,275 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:52,320 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:52,417 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationss3161fxx/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationss3161fxx/MNI152Lin_T1w_3.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp87hfp6w1/parcellationsr7zsj9gp/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:54,431 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:56,444 - JUNIFER - INFO - Storing in
- 2024-04-08 12:14:56,463 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:14:56,464 - JUNIFER - INFO - Collecting data using SQLiteFeatureStorage
- 2024-04-08 12:14:56,464 - JUNIFER - INFO - Collecting data from /tmp/tmpckj1v_gv/*test.sqlite
-
file: 0it [00:00, ?it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 82.48it/s]
-
file: 1it [00:00, 28.43it/s]
- 2024-04-08 12:14:56,500 - JUNIFER - INFO - Collect done
- {'1d81ad1f44011f6c4d7e180b2e69045a': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber', 'types': ['BOLD', 'T1w']}, 'dependencies': {'nilearn': '0.10.2'}, 'datareader': {'class': 'DefaultDataReader'}, 'type': 'BOLD', 'marker': {'agg_method': 'mean', 'agg_method_params': None, 'class': 'RSSETSMarker', 'masks': None, 'name': 'Schaefer100x17_RSSETS', 'parcellation': 'Schaefer100x17'}, '_element_keys': ['subject'], 'name': 'BOLD_Schaefer100x17_RSSETS'}, '24fef87855ff678fc17e53f2c2ab5e6e': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber', 'types': ['BOLD', 'T1w']}, 'dependencies': {'nilearn': '0.10.2'}, 'datareader': {'class': 'DefaultDataReader'}, 'type': 'BOLD', 'marker': {'agg_method': 'mean', 'agg_method_params': None, 'class': 'RSSETSMarker', 'masks': None, 'name': 'Schaefer200x17_RSSETS', 'parcellation': 'Schaefer200x17'}, '_element_keys': ['subject'], 'name': 'BOLD_Schaefer200x17_RSSETS'}}
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 76-77
-
-Now we take a look at the dataframe
-
-.. GENERATED FROM PYTHON SOURCE LINES 77-78
-
-.. code-block:: default
-
- df_vbm.head()
-
-
-
-
-
-.. raw:: html
-
-
-
-
-
-
-
- |
- |
- root_sum_of_squares_ets |
-
-
- subject |
- timepoint |
- |
-
-
-
-
- sub001 |
- 0 |
- 1471.534513 |
-
-
- 1 |
- 78.624350 |
-
-
- 2 |
- 45.399273 |
-
-
- 3 |
- 69.362580 |
-
-
- 4 |
- 52.878724 |
-
-
-
-
-
-
-
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (0 minutes 13.174 seconds)
-
-
-.. _sphx_glr_download_auto_examples_run_ets_rss_marker.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: run_ets_rss_marker.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: run_ets_rss_marker.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/run_junifer_julearn.rst.txt b/pr-preview/pr-273/_sources/auto_examples/run_junifer_julearn.rst.txt
deleted file mode 100644
index 47252e70f..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/run_junifer_julearn.rst.txt
+++ /dev/null
@@ -1,694 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/run_junifer_julearn.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_run_junifer_julearn.py:
-
-
-Run junifer and julearn.
-========================
-
-This example uses a ParcelAggregation marker to compute the mean of each parcel
-using the Schaefer parcellation (100 rois, 7 Yeo networks) for a 3D nifti to
-extract some features for machine learning using julearn to predict some other
-data.
-
-Authors: Leonard Sasse, Sami Hamdan, Nicolas Nieto, Synchon Mandal
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 14-27
-
-.. code-block:: default
-
-
- import tempfile
-
- import nilearn
- import pandas as pd
- from julearn import run_cross_validation, PipelineCreator
-
- import junifer.testing.registry # noqa: F401
- from junifer.api import collect, run
- from junifer.storage.sqlite import SQLiteFeatureStorage
- from junifer.utils import configure_logging
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 28-29
-
-Set the logging level to info to see extra information:
-
-.. GENERATED FROM PYTHON SOURCE LINES 29-32
-
-.. code-block:: default
-
- configure_logging(level="INFO")
-
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - ===== Lib Versions =====
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - numpy: 1.26.4
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - scipy: 1.11.4
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - pandas: 2.1.4
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - nilearn: 0.10.2
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - nibabel: 5.2.1
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - junifer: 0.0.5.dev11
- 2024-04-08 12:14:56,674 - JUNIFER - INFO - ========================
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 33-34
-
-Define the markers you want:
-
-.. GENERATED FROM PYTHON SOURCE LINES 34-52
-
-.. code-block:: default
-
-
- marker_dicts = [
- {
- "name": "Schaefer100x17_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer100x17",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer200x17_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer200x17",
- "method": "mean",
- },
- ]
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 53-54
-
-Define target and confounds for julearn machine learning:
-
-.. GENERATED FROM PYTHON SOURCE LINES 54-58
-
-.. code-block:: default
-
- y = "age"
- confound = "sex"
-
-
-
-
-
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 59-61
-
-Load the VBM phenotype data for machine learning data:
-- Fetch the Oasis dataset
-
-.. GENERATED FROM PYTHON SOURCE LINES 61-70
-
-.. code-block:: default
-
- oasis_dataset = nilearn.datasets.fetch_oasis_vbm()
- age = oasis_dataset.ext_vars[y][:10]
- sex = (
- pd.Series(oasis_dataset.ext_vars["mf"][:10])
- .map(lambda x: 1 if x == "F" else 0)
- .values
- )
-
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- /opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/nilearn/datasets/struct.py:852: UserWarning: `legacy_format` will default to `False` in release 0.11. Dataset fetchers will then return pandas dataframes by default instead of recarrays.
- warnings.warn(_LEGACY_FORMAT_MSG)
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 71-72
-
-Create a temporary directory for junifer feature extraction:
-
-.. GENERATED FROM PYTHON SOURCE LINES 72-92
-
-.. code-block:: default
-
- with tempfile.TemporaryDirectory() as tmpdir:
- storage = {"kind": "SQLiteFeatureStorage", "uri": f"{tmpdir}/test.sqlite"}
- # run the defined junifer feature extraction pipeline
- run(
- workdir="/tmp",
- datagrabber={"kind": "OasisVBMTestingDataGrabber"},
- markers=marker_dicts,
- storage=storage,
- )
-
- # read in extracted features and add confounds and targets
- # for julearn run cross validation
- collect(storage)
- db = SQLiteFeatureStorage(uri=storage["uri"])
-
- df_vbm = db.read_df(feature_name="VBM_GM_Schaefer200x17_Mean")
- oasis_subjects = [x[0] for x in df_vbm.index]
- df_vbm.index = oasis_subjects
-
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating Marker Collection
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - DataGrabber output type: ['VBM_GM']
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating Data Reader:
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Data Reader output type: ['VBM_GM']
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating Marker: Schaefer100x17_TrimMean80
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Marker output type: ['vector']
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating storage for Schaefer100x17_TrimMean80
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating Marker: Schaefer200x17_Mean
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Marker output type: ['vector']
- 2024-04-08 12:14:56,688 - JUNIFER - INFO - Validating storage for Schaefer200x17_Mean
- /opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/nilearn/datasets/struct.py:852: UserWarning: `legacy_format` will default to `False` in release 0.11. Dataset fetchers will then return pandas dataframes by default instead of recarrays.
- warnings.warn(_LEGACY_FORMAT_MSG)
- 2024-04-08 12:14:56,692 - JUNIFER - INFO - Getting element sub-01
- 2024-04-08 12:14:56,692 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:14:56,692 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0001_MR1/mwrc1OAS1_0001_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:14:56,692 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:14:56,693 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:14:56,693 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:14:56,693 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:56,693 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:56,693 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:14:56,694 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:14:56,694 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:14:56,695 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:56,724 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:57,776 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:57,873 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsfkpeo4km/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsfkpeo4km/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpb029b2ja/parcellationso58y65r_/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:59,273 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:00,222 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:00,252 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:00,253 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:00,284 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:01,330 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:01,428 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsmodx_tbr/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsmodx_tbr/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpb029b2ja/parcellationsy9dqwxst/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:03,449 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:04,398 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:04,445 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:04,445 - JUNIFER - INFO - Getting element sub-02
- 2024-04-08 12:15:04,445 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:04,445 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0002_MR1/mwrc1OAS1_0002_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:04,446 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:04,446 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:04,446 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:04,447 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:04,447 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:04,447 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:04,447 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:04,447 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:04,448 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:04,478 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:05,531 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:05,627 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsnotw221o/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsnotw221o/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp7epbiu6g/parcellationsywru3wh6/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:07,021 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:07,969 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:07,999 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:07,999 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:08,000 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:08,000 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:08,000 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:08,000 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:08,000 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:08,001 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:08,031 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:09,083 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:09,180 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsvwmvyb_n/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsvwmvyb_n/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp7epbiu6g/parcellations43s5y33s/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:11,181 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:12,152 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:12,199 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:12,199 - JUNIFER - INFO - Getting element sub-03
- 2024-04-08 12:15:12,199 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:12,199 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0003_MR1/mwrc1OAS1_0003_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:12,199 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:12,200 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:12,200 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:12,201 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:12,201 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:12,201 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:12,201 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:12,201 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:12,202 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:12,231 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:13,284 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:13,380 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsisugjj0n/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsisugjj0n/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp_n5yd0wl/parcellationsxkaffw_q/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:14,765 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:15,723 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:15,753 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:15,753 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:15,754 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:15,754 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:15,754 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:15,754 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:15,754 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:15,755 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:15,785 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:16,832 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:16,932 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsnq4sx43n/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsnq4sx43n/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp_n5yd0wl/parcellationsqw9jekr4/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:18,948 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:19,900 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:19,947 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:19,947 - JUNIFER - INFO - Getting element sub-04
- 2024-04-08 12:15:19,948 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:19,948 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0004_MR1/mwrc1OAS1_0004_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:19,948 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:19,948 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:19,949 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:19,950 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:19,980 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:21,030 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:21,127 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsnuuim68h/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsnuuim68h/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpi2c8cztg/parcellationssaxnu9tg/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:22,515 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:23,452 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:23,481 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:23,482 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:23,483 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:23,513 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:24,565 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:24,662 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations_1ciycav/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellations_1ciycav/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpi2c8cztg/parcellations0iq8r58e/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:26,665 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:27,623 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:27,670 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:27,670 - JUNIFER - INFO - Getting element sub-05
- 2024-04-08 12:15:27,670 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:27,670 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0005_MR1/mwrc1OAS1_0005_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:27,671 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:27,671 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:27,671 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:27,672 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:27,672 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:27,672 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:27,672 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:27,672 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:27,673 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:27,703 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:28,754 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:28,850 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsuxhzg98o/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsuxhzg98o/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmph1lo_vmm/parcellations1z6lc4ql/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:30,234 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:31,189 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:31,219 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:31,221 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:31,251 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:32,291 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:32,389 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations_4es1d0f/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellations_4es1d0f/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmph1lo_vmm/parcellationsh81aibfz/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:34,392 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:35,355 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:35,401 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:35,401 - JUNIFER - INFO - Getting element sub-06
- 2024-04-08 12:15:35,401 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:35,401 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0006_MR1/mwrc1OAS1_0006_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:35,401 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:35,402 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:35,402 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:35,403 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:35,403 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:35,403 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:35,403 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:35,403 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:35,404 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:35,433 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:36,469 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:36,567 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsp0su18f9/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsp0su18f9/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpsz4r8zn1/parcellationst5c64ax2/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:37,948 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:38,910 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:38,940 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:38,942 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:38,972 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:40,009 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:40,106 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations09awn_i5/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellations09awn_i5/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpsz4r8zn1/parcellationsd36qesmo/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:42,121 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:43,087 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:43,134 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:43,134 - JUNIFER - INFO - Getting element sub-07
- 2024-04-08 12:15:43,134 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:43,134 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0007_MR1/mwrc1OAS1_0007_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:43,134 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:43,135 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:43,135 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:43,136 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:43,136 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:43,136 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:43,136 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:43,136 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:43,137 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:43,166 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:44,200 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:44,296 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsxzy_wt_2/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsxzy_wt_2/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpl8mayfjq/parcellationsz5g8nw6i/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:45,680 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:46,632 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:46,662 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:46,662 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:46,663 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:46,663 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:46,663 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:46,663 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:46,663 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:46,664 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:46,694 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:47,729 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:47,826 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations85w60yh4/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellations85w60yh4/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpl8mayfjq/parcellationsjobxbnkt/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:49,835 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:50,801 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:50,848 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:50,848 - JUNIFER - INFO - Getting element sub-08
- 2024-04-08 12:15:50,848 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:50,848 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0009_MR1/mwrc1OAS1_0009_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:50,848 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:50,849 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:50,849 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:50,849 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:50,849 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:50,849 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:50,850 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:50,850 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:50,851 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:50,880 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:51,910 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:52,006 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsfqw30c3e/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsfqw30c3e/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpcec0v44p/parcellationsq33qr21s/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:53,383 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:54,329 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:54,358 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:15:54,358 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:54,359 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:54,359 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:54,359 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:54,359 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:15:54,359 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:54,360 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:54,390 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:55,425 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:55,522 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsuk_8xk4q/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsuk_8xk4q/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpcec0v44p/parcellationsdx9eh8vs/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:15:57,529 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:15:58,499 - JUNIFER - INFO - Storing in
- 2024-04-08 12:15:58,545 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:15:58,545 - JUNIFER - INFO - Getting element sub-09
- 2024-04-08 12:15:58,546 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:15:58,546 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0010_MR1/mwrc1OAS1_0010_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:15:58,546 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:15:58,546 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:15:58,546 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:15:58,547 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:15:58,547 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:15:58,547 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:15:58,547 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:15:58,547 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:15:58,548 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:15:58,578 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:15:59,617 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:15:59,713 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsdxkc72am/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsdxkc72am/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpitk3y05j/parcellations9c19_95r/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:16:01,100 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:16:02,086 - JUNIFER - INFO - Storing in
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:16:02,116 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:16:02,117 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:16:02,148 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:16:03,181 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:16:03,278 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsb4e2yuq7/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellationsb4e2yuq7/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpitk3y05j/parcellationsupnq5fju/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:16:05,296 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:16:06,284 - JUNIFER - INFO - Storing in
- 2024-04-08 12:16:06,330 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:16:06,330 - JUNIFER - INFO - Getting element sub-10
- 2024-04-08 12:16:06,330 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:16:06,330 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0011_MR1/mwrc1OAS1_0011_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:16:06,330 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:16:06,331 - JUNIFER - INFO - Fitting marker Schaefer100x17_TrimMean80
- 2024-04-08 12:16:06,331 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:16:06,331 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:16:06,331 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:16:06,332 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:16:06,332 - JUNIFER - INFO - n_rois: 100
- 2024-04-08 12:16:06,332 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:16:06,333 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:16:06,362 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:16:07,399 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:16:07,495 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations906xhzmd/Schaefer100x17.nii.gz -r /tmp/tmp1m1i0723/parcellations906xhzmd/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpnyf0ry98/parcellationshqiol7km/Schaefer100x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:16:08,885 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:16:09,848 - JUNIFER - INFO - Storing in
- 2024-04-08 12:16:09,877 - JUNIFER - INFO - Fitting marker Schaefer200x17_Mean
- 2024-04-08 12:16:09,877 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:16:09,878 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:16:09,878 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:16:09,878 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:16:09,878 - JUNIFER - INFO - n_rois: 200
- 2024-04-08 12:16:09,878 - JUNIFER - INFO - yeo_networks: 17
- 2024-04-08 12:16:09,879 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_200Parcels_17Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:16:09,909 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:16:10,953 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:16:11,049 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations_uq0ii5s/Schaefer200x17.nii.gz -r /tmp/tmp1m1i0723/parcellations_uq0ii5s/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpnyf0ry98/parcellations9wkkqthe/Schaefer200x17_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:16:13,139 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:16:14,101 - JUNIFER - INFO - Storing in
- 2024-04-08 12:16:14,147 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:16:14,147 - JUNIFER - INFO - Collecting data using SQLiteFeatureStorage
- 2024-04-08 12:16:14,148 - JUNIFER - INFO - Collecting data from /tmp/tmpju0jxkwp/*test.sqlite
-
file: 0it [00:00, ?it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 15.60it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 15.58it/s]
-
file: 1it [00:00, 7.21it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.16it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.13it/s]
-
file: 2it [00:00, 7.59it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 16.77it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 16.74it/s]
-
file: 3it [00:00, 7.64it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.24it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.22it/s]
-
file: 4it [00:00, 7.74it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 8.92it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 8.91it/s]
-
file: 5it [00:00, 5.98it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.23it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.20it/s]
-
file: 6it [00:00, 6.52it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.32it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.30it/s]
-
file: 7it [00:01, 6.92it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.33it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.30it/s]
-
file: 8it [00:01, 7.22it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 17.18it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 17.15it/s]
-
file: 9it [00:01, 7.42it/s]
-
feature: 0%| | 0/2 [00:00, ?it/s]
-
feature: 100%|██████████| 2/2 [00:00<00:00, 9.00it/s]
feature: 100%|██████████| 2/2 [00:00<00:00, 8.99it/s]
-
file: 10it [00:01, 6.06it/s]
file: 10it [00:01, 6.69it/s]
- 2024-04-08 12:16:15,642 - JUNIFER - INFO - Collect done
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 93-95
-
-Using julearn for machine learning:
-We predict the age given our vbm features and sex as a confound.
-
-.. GENERATED FROM PYTHON SOURCE LINES 95-119
-
-.. code-block:: default
-
- X = list(df_vbm.columns)
- df_vbm[y] = age
- df_vbm[confound] = sex
-
- X_types = {
- "features": X,
- "confound": confound,
- }
-
- creator = PipelineCreator(problem_type="regression", apply_to="features")
- creator.add("zscore", apply_to=["features", "confound"])
- creator.add("confound_removal", apply_to="features", confounds="confound")
- creator.add("ridge")
-
- scores = run_cross_validation(
- X=X + [confound],
- y=y,
- X_types=X_types,
- data=df_vbm,
- model=creator,
- cv=3,
- )
- print(scores)
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- fit_time score_time ... fold cv_mdsum
- 0 0.133891 0.018640 ... 0 509497eb21da473048117e0c6704d3ea
- 1 0.129531 0.018569 ... 1 509497eb21da473048117e0c6704d3ea
- 2 0.129255 0.018046 ... 2 509497eb21da473048117e0c6704d3ea
-
- [3 rows x 8 columns]
-
-
-
-
-.. GENERATED FROM PYTHON SOURCE LINES 120-124
-
-Interpretation of results:
-Doing machine learning with only 10 datapoints is not meaningful.
-This explains the big variation in scores
-for different cross-validation folds.
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (1 minutes 19.572 seconds)
-
-
-.. _sphx_glr_download_auto_examples_run_junifer_julearn.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: run_junifer_julearn.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: run_junifer_julearn.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/run_run_gmd_mean.rst.txt b/pr-preview/pr-273/_sources/auto_examples/run_run_gmd_mean.rst.txt
deleted file mode 100644
index add1cfa94..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/run_run_gmd_mean.rst.txt
+++ /dev/null
@@ -1,655 +0,0 @@
-
-.. DO NOT EDIT.
-.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
-.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
-.. "auto_examples/run_run_gmd_mean.py"
-.. LINE NUMBERS ARE GIVEN BELOW.
-
-.. only:: html
-
- .. note::
- :class: sphx-glr-download-link-note
-
- :ref:`Go to the end `
- to download the full example code
-
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_auto_examples_run_run_gmd_mean.py:
-
-
-UKB VBM GMD Extraction
-======================
-
-Authors: Federico Raimondo
-
-License: BSD 3 clause
-
-.. GENERATED FROM PYTHON SOURCE LINES 9-54
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Registering OasisVBMTestingDataGrabber in datagrabber
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Registering SPMAuditoryTestingDataGrabber in datagrabber
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Registering PartlyCloudyTestingDataGrabber in datagrabber
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating Marker Collection
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - DataGrabber output type: ['VBM_GM']
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating Data Reader:
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Data Reader output type: ['VBM_GM']
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating Marker: Schaefer1000x7_TrimMean80
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Marker output type: ['vector']
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating storage for Schaefer1000x7_TrimMean80
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating Marker: Schaefer1000x7_Mean
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Marker output type: ['vector']
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating storage for Schaefer1000x7_Mean
- 2024-04-08 12:00:47,024 - JUNIFER - INFO - Validating Marker: Schaefer1000x7_Std
- 2024-04-08 12:00:47,025 - JUNIFER - INFO - Marker output type: ['vector']
- 2024-04-08 12:00:47,025 - JUNIFER - INFO - Validating storage for Schaefer1000x7_Std
-
- Dataset created in /home/runner/nilearn_data/oasis1
-
- Downloading data from https://www.nitrc.org/frs/download.php/6364/archive_dartel.tgz ...
-
Downloaded 29188096 of 905208634 bytes (3.2%, 30.5s remaining)
Downloaded 78929920 of 905208634 bytes (8.7%, 21.3s remaining)
Downloaded 129310720 of 905208634 bytes (14.3%, 18.3s remaining)
Downloaded 179273728 of 905208634 bytes (19.8%, 16.5s remaining)
Downloaded 229277696 of 905208634 bytes (25.3%, 15.0s remaining)
Downloaded 279789568 of 905208634 bytes (30.9%, 13.7s remaining)
Downloaded 329875456 of 905208634 bytes (36.4%, 12.4s remaining)
Downloaded 379125760 of 905208634 bytes (41.9%, 11.3s remaining)
Downloaded 430022656 of 905208634 bytes (47.5%, 10.1s remaining)
Downloaded 482467840 of 905208634 bytes (53.3%, 8.9s remaining)
Downloaded 536412160 of 905208634 bytes (59.3%, 7.7s remaining)
Downloaded 587587584 of 905208634 bytes (64.9%, 6.6s remaining)
Downloaded 616726528 of 905208634 bytes (68.1%, 6.2s remaining)
Downloaded 669048832 of 905208634 bytes (73.9%, 5.0s remaining)
Downloaded 700121088 of 905208634 bytes (77.3%, 4.4s remaining)
Downloaded 726073344 of 905208634 bytes (80.2%, 4.0s remaining)
Downloaded 753737728 of 905208634 bytes (83.3%, 3.4s remaining)
Downloaded 779427840 of 905208634 bytes (86.1%, 2.9s remaining)
Downloaded 803807232 of 905208634 bytes (88.8%, 2.4s remaining)
Downloaded 851525632 of 905208634 bytes (94.1%, 1.3s remaining)
Downloaded 884383744 of 905208634 bytes (97.7%, 0.5s remaining) ...done. (22 seconds, 0 min)
- Extracting data from /home/runner/nilearn_data/oasis1/7088b0bf88f5650db26e32ec3afdd589/archive_dartel.tgz..... done.
- /opt/hostedtoolcache/Python/3.11.8/x64/lib/python3.11/site-packages/nilearn/datasets/struct.py:852: UserWarning: `legacy_format` will default to `False` in release 0.11. Dataset fetchers will then return pandas dataframes by default instead of recarrays.
- warnings.warn(_LEGACY_FORMAT_MSG)
- 2024-04-08 12:01:15,292 - JUNIFER - INFO - Getting element sub-01
- 2024-04-08 12:01:15,292 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:01:15,292 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0001_MR1/mwrc1OAS1_0001_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:01:15,292 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:01:15,293 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:01:15,293 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:01:15,294 - JUNIFER - INFO - At least one of the parcellation files are missing. Fetching using nilearn.
-
- Dataset created in /home/runner/junifer/data/parcellations/schaefer_2018
-
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_1000Parcels_7Networks_order.txt ...
- ...done. (0 seconds, 0 min)
- Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz ...
- ...done. (0 seconds, 0 min)
- 2024-04-08 12:01:15,389 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:01:15,425 - JUNIFER - INFO - Downloading xfm file for MNI152NLin6Asym to MNI152Lin from https://gin.g-node.org/juaml/human-template-xfms/raw/main/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:09:24,440 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- Downloading https://templateflow.s3.amazonaws.com/tpl-MNI152Lin/tpl-MNI152Lin_res-02_T1w.nii.gz
-
0%| | 0.00/1.45M [00:00, ?B/s]
4%|▎ | 52.2k/1.45M [00:00<00:03, 461kB/s]
18%|█▊ | 260k/1.45M [00:00<00:00, 1.26MB/s]
72%|███████▏ | 1.04M/1.45M [00:00<00:00, 4.03MB/s]
100%|██████████| 1.45M/1.45M [00:00<00:00, 4.20MB/s]
- 2024-04-08 12:09:25,238 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations7e07y1co/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations7e07y1co/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpwekmg7i4/parcellations5pci9ew7/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:09:32,822 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:09:33,929 - JUNIFER - INFO - Storing in
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:09:34,085 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:09:34,087 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:09:34,124 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:09:35,284 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:09:35,383 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsjz7w1qcj/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsjz7w1qcj/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpwekmg7i4/parcellationsgdsrpxjd/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:09:42,679 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:09:43,782 - JUNIFER - INFO - Storing in
- 2024-04-08 12:09:43,943 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:09:43,943 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:09:43,944 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:09:43,944 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:09:43,944 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:09:43,944 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:09:43,944 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:09:43,946 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:09:43,982 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:09:45,141 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:09:45,240 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsvt1bh45f/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsvt1bh45f/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpwekmg7i4/parcellationspf0kxufe/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:09:52,548 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:09:53,670 - JUNIFER - INFO - Storing in
- 2024-04-08 12:09:53,832 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:09:53,833 - JUNIFER - INFO - Getting element sub-02
- 2024-04-08 12:09:53,833 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:09:53,833 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0002_MR1/mwrc1OAS1_0002_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:09:53,833 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:09:53,834 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:09:53,836 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:09:53,872 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:09:55,031 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:09:55,130 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsizosbcyy/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsizosbcyy/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpq3thpv7a/parcellations5sstqldx/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:02,371 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:03,489 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:03,644 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:03,646 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:03,684 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:04,838 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:04,937 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations65_sugl3/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations65_sugl3/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpq3thpv7a/parcellationssdx7ect8/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:12,217 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:13,332 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:13,492 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:10:13,492 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:13,492 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:13,493 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:13,493 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:13,493 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:13,493 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:13,495 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:13,533 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:14,695 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:14,794 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationso7t49oyl/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationso7t49oyl/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpq3thpv7a/parcellations9jlfcgbb/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:22,034 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:23,148 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:23,309 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:10:23,309 - JUNIFER - INFO - Getting element sub-03
- 2024-04-08 12:10:23,309 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:10:23,310 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0003_MR1/mwrc1OAS1_0003_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:10:23,310 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:10:23,310 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:10:23,310 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:23,311 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:23,311 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:23,311 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:23,311 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:23,311 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:23,313 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:23,349 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:24,505 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:24,604 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsi5b81t09/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsi5b81t09/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmponqnbxru/parcellations1k6422j3/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:31,878 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:33,012 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:33,167 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:10:33,167 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:33,168 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:33,168 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:33,168 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:33,168 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:33,168 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:33,170 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:33,207 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:34,371 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:34,470 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsocvagklf/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsocvagklf/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmponqnbxru/parcellationspirmlkgu/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:41,634 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:42,738 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:42,894 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:10:42,894 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:42,895 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:42,895 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:42,895 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:42,895 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:42,895 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:42,897 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:42,934 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:44,102 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:44,201 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsc90o4s71/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsc90o4s71/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmponqnbxru/parcellations1d37ondb/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:10:51,441 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:10:52,567 - JUNIFER - INFO - Storing in
- 2024-04-08 12:10:52,730 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:10:52,730 - JUNIFER - INFO - Getting element sub-04
- 2024-04-08 12:10:52,730 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:10:52,730 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0004_MR1/mwrc1OAS1_0004_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:10:52,730 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:10:52,731 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:10:52,731 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:10:52,732 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:10:52,732 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:10:52,732 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:10:52,732 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:10:52,732 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:10:52,734 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:10:52,770 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:10:53,934 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:10:54,034 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsufq7a2u2/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsufq7a2u2/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpeffnfy3u/parcellations9o4kjyvb/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:01,306 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:02,423 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:02,576 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:11:02,576 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:02,577 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:02,577 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:02,577 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:02,577 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:02,577 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:02,579 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:02,615 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:03,781 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:03,880 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsqxtmv0g6/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsqxtmv0g6/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpeffnfy3u/parcellationsoloen7de/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:11,613 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:12,701 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:12,860 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:12,862 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:12,898 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:14,071 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:14,169 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsa2ygyx6c/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsa2ygyx6c/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpeffnfy3u/parcellations44jj0xhh/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:21,395 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:22,502 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:22,664 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:11:22,664 - JUNIFER - INFO - Getting element sub-05
- 2024-04-08 12:11:22,664 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:11:22,665 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0005_MR1/mwrc1OAS1_0005_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:11:22,665 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:11:22,665 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:11:22,665 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:22,666 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:22,666 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:22,666 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:22,666 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:22,666 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:22,668 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:22,703 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:23,869 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:23,968 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsy9xed4qw/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsy9xed4qw/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp8dffu0m9/parcellations_md7s9ts/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:31,317 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:32,446 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:32,600 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:11:32,600 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:32,601 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:32,601 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:32,601 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:32,601 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:32,601 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:32,603 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:32,638 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:33,802 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:33,901 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsjlumxr00/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsjlumxr00/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp8dffu0m9/parcellationsarbzafcp/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:41,175 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:42,282 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:42,441 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:11:42,441 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:42,441 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:42,442 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:42,442 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:42,442 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:42,442 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:42,443 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:42,483 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:43,657 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:43,757 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationshs8zwe9o/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationshs8zwe9o/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp8dffu0m9/parcellationsoq__0yin/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:11:51,039 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:11:52,159 - JUNIFER - INFO - Storing in
- 2024-04-08 12:11:52,318 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:11:52,318 - JUNIFER - INFO - Getting element sub-06
- 2024-04-08 12:11:52,318 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:11:52,318 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0006_MR1/mwrc1OAS1_0006_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:11:52,318 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:11:52,319 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:11:52,319 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:11:52,319 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:11:52,320 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:11:52,320 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:11:52,320 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:11:52,320 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:11:52,321 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:11:52,357 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:11:53,522 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:11:53,622 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsj0368bop/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsj0368bop/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp7c2y078d/parcellationso60217t1/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:00,890 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:02,006 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:02,161 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:02,163 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:02,201 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:03,373 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:03,472 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationstyvwnlwt/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationstyvwnlwt/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp7c2y078d/parcellations32b4l585/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:10,713 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:11,815 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:11,973 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:12:11,973 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:11,974 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:11,974 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:11,974 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:11,974 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:11,974 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:11,976 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:12,014 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:13,183 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:13,282 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations89akj2w8/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations89akj2w8/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp7c2y078d/parcellationsc5vxz2gh/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:20,476 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:21,583 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:21,742 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:12:21,743 - JUNIFER - INFO - Getting element sub-07
- 2024-04-08 12:12:21,743 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:12:21,743 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0007_MR1/mwrc1OAS1_0007_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:12:21,743 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:21,744 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:21,746 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:21,782 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:22,949 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:23,048 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations9p4tltso/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations9p4tltso/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpqnj8j5yc/parcellationsbtyozzjn/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:30,433 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:31,562 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:31,717 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:31,719 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:31,756 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:32,932 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:33,031 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations_c9hi3r6/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations_c9hi3r6/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpqnj8j5yc/parcellationsd6z7rxl2/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:40,242 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:41,369 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:41,527 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:41,529 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:41,568 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:42,735 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:42,834 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellations696c_cr1/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellations696c_cr1/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpqnj8j5yc/parcellationsi2be9fg3/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:12:50,129 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:12:51,255 - JUNIFER - INFO - Storing in
- 2024-04-08 12:12:51,416 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:12:51,417 - JUNIFER - INFO - Getting element sub-08
- 2024-04-08 12:12:51,417 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:12:51,417 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0009_MR1/mwrc1OAS1_0009_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:12:51,417 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:12:51,418 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:12:51,420 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:12:51,457 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:12:52,626 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:12:52,726 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsnty14cau/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsnty14cau/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpcqegth9s/parcellationshlufz8ev/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:00,135 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:01,268 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:01,422 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:01,424 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:01,461 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:02,626 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:02,725 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsrjdrmo6n/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsrjdrmo6n/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpcqegth9s/parcellationsb3vrdsjq/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:10,068 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:11,170 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:11,332 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:13:11,332 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:11,332 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:11,333 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:11,333 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:11,333 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:11,333 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:11,334 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:11,371 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:12,538 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:12,637 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsk76chrg_/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsk76chrg_/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpcqegth9s/parcellationsva0zcxm3/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:19,881 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:20,994 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:21,156 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:13:21,156 - JUNIFER - INFO - Getting element sub-09
- 2024-04-08 12:13:21,156 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:13:21,156 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0010_MR1/mwrc1OAS1_0010_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:13:21,156 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:13:21,157 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:13:21,157 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:21,158 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:21,158 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:21,158 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:21,158 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:21,158 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:21,160 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:21,195 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:22,361 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:22,460 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationszgqdrexc/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationszgqdrexc/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp9vqwl_yi/parcellationsanppsimu/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:29,795 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:30,957 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:31,110 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:31,112 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:31,145 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:32,320 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:32,419 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsq5_qremz/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsq5_qremz/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp9vqwl_yi/parcellationsrr1okd1k/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:39,751 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:40,878 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:41,037 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:41,039 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:41,072 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:42,239 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:42,338 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsgtaav7e2/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsgtaav7e2/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp9vqwl_yi/parcellationslj0sgw53/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:49,627 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:13:50,764 - JUNIFER - INFO - Storing in
- 2024-04-08 12:13:50,924 - JUNIFER - INFO - Marker collection fitting done
- 2024-04-08 12:13:50,925 - JUNIFER - INFO - Getting element sub-10
- 2024-04-08 12:13:50,925 - JUNIFER - INFO - Fitting pipeline
- 2024-04-08 12:13:50,925 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0011_MR1/mwrc1OAS1_0011_MR1_mpr_anon_fslswapdim_bet.nii.gz
- 2024-04-08 12:13:50,925 - JUNIFER - INFO - VBM_GM is type NIFTI
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - Fitting marker Schaefer1000x7_TrimMean80
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:13:50,926 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:13:50,928 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:13:50,960 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:13:52,125 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:13:52,224 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsb3zxhk_z/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsb3zxhk_z/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpszs5dtn9/parcellations7woq2tbm/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:13:59,467 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:00,577 - JUNIFER - INFO - Storing in
- 2024-04-08 12:14:00,731 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Mean
- 2024-04-08 12:14:00,731 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:14:00,732 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:00,732 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:00,732 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:14:00,732 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:14:00,732 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:14:00,734 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:00,766 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:01,940 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:02,039 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsicuxxndl/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsicuxxndl/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpszs5dtn9/parcellationsk58spyo6/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:09,304 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:10,410 - JUNIFER - INFO - Storing in
- 2024-04-08 12:14:10,568 - JUNIFER - INFO - Fitting marker Schaefer1000x7_Std
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - Computing VBM_GM
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - Parcellation parameters:
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - resolution: 2.0
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - n_rois: 1000
- 2024-04-08 12:14:10,569 - JUNIFER - INFO - yeo_networks: 7
- 2024-04-08 12:14:10,571 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_1000Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
- 2024-04-08 12:14:10,603 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
- 2024-04-08 12:14:11,770 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
- 2024-04-08 12:14:11,869 - JUNIFER - INFO - antsApplyTransforms command to be executed:
- antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmp1m1i0723/parcellationsqd30fin3/Schaefer1000x7.nii.gz -r /tmp/tmp1m1i0723/parcellationsqd30fin3/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmpszs5dtn9/parcellationsodaf03d3/Schaefer1000x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
- 2024-04-08 12:14:19,202 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
- b''
- 2024-04-08 12:14:20,306 - JUNIFER - INFO - Storing in
- 2024-04-08 12:14:20,467 - JUNIFER - INFO - Marker collection fitting done
-
-
-
-
-
-
-|
-
-.. code-block:: default
-
- import tempfile
-
- import junifer.testing.registry # noqa: F401
- from junifer.api import run
-
-
- datagrabber = {
- "kind": "OasisVBMTestingDataGrabber",
- }
-
- markers = [
- {
- "name": "Schaefer1000x7_TrimMean80",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "trim_mean",
- "method_params": {"proportiontocut": 0.2},
- },
- {
- "name": "Schaefer1000x7_Mean",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "mean",
- },
- {
- "name": "Schaefer1000x7_Std",
- "kind": "ParcelAggregation",
- "parcellation": "Schaefer1000x7",
- "method": "std",
- },
- ]
-
- storage = {
- "kind": "SQLiteFeatureStorage",
- }
-
- with tempfile.TemporaryDirectory() as tmpdir:
- uri = f"{tmpdir}/test.sqlite"
- storage["uri"] = uri
- run(
- workdir="/tmp",
- datagrabber=datagrabber,
- markers=markers,
- storage=storage,
- )
-
-
-.. rst-class:: sphx-glr-timing
-
- **Total running time of the script:** (13 minutes 33.446 seconds)
-
-
-.. _sphx_glr_download_auto_examples_run_run_gmd_mean.py:
-
-.. only:: html
-
- .. container:: sphx-glr-footer sphx-glr-footer-example
-
-
-
-
- .. container:: sphx-glr-download sphx-glr-download-python
-
- :download:`Download Python source code: run_run_gmd_mean.py `
-
- .. container:: sphx-glr-download sphx-glr-download-jupyter
-
- :download:`Download Jupyter notebook: run_run_gmd_mean.ipynb `
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
- `Gallery generated by Sphinx-Gallery `_
diff --git a/pr-preview/pr-273/_sources/auto_examples/sg_execution_times.rst.txt b/pr-preview/pr-273/_sources/auto_examples/sg_execution_times.rst.txt
deleted file mode 100644
index bc26dc93d..000000000
--- a/pr-preview/pr-273/_sources/auto_examples/sg_execution_times.rst.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-
-:orphan:
-
-.. _sphx_glr_auto_examples_sg_execution_times:
-
-
-Computation times
-=================
-**15:38.234** total execution time for **auto_examples** files:
-
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_run_run_gmd_mean.py` (``run_run_gmd_mean.py``) | 13:33.446 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_run_junifer_julearn.py` (``run_junifer_julearn.py``) | 01:19.572 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_run_compute_parcel_mean.py` (``run_compute_parcel_mean.py``) | 00:22.662 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_run_ets_rss_marker.py` (``run_ets_rss_marker.py``) | 00:13.174 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_run_datagrabber_bids_datalad.py` (``run_datagrabber_bids_datalad.py``) | 00:09.379 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_norun_hcpfc_pearson.py` (``norun_hcpfc_pearson.py``) | 00:00.000 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_auto_examples_norun_ukbvm_gmd.py` (``norun_ukbvm_gmd.py``) | 00:00.000 | 0.0 MB |
-+-----------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/pr-preview/pr-273/_sources/builtin.rst.txt b/pr-preview/pr-273/_sources/builtin.rst.txt
deleted file mode 100644
index cc8d8eb40..000000000
--- a/pr-preview/pr-273/_sources/builtin.rst.txt
+++ /dev/null
@@ -1,746 +0,0 @@
-.. include:: links.inc
-
-.. _builtin:
-
-Built-in Pipeline Components
-============================
-
-
-Data Grabber
-------------
-
-..
- Provide a list of the DataGrabbers that are implemented or planned.
- Access: Valid options are
- - Open
- - Open with registration
- - Restricted
-
- Type/config: this should mention whether the class is built-in in the
- core of junifer or needs to be imported from a specific configuration in
- the `junifer.configs` module.
-
- State: this should indicate the state of the dataset. Valid options are
- - Planned
- - In Progress
- - Done
-
- Version added: If the status is "Done", the junifer version in which the
- dataset was added. Else, a link to the Github issue or pull request
- implementing the dataset. Links to github can be added by using the
- following syntax: :gh:``
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Class
- - Description
- - Access
- - Type/Config
- - State
- - Version Added
- * - :class:`.DataladHCP1200`
- - `HCP OpenAccess dataset `_
- - Open with registration
- - Built-in
- - Done
- - 0.0.1
- * - :class:`.JuselessDataladUKBVBM`
- - | UKB VBM dataset preprocessed with CAT.
- | Available for Juseless only.
- - Restricted
- - ``junifer.configs.juseless``
- - Done
- - 0.0.1
- * - :class:`.JuselessDataladCamCANVBM`
- - | CamCAN VBM dataset preprocessed with CAT.
- | Available for Juseless only.
- - Restricted
- - ``junifer.configs.juseless``
- - Done
- - 0.0.1
- * - :class:`.DataladAOMICID1000`
- - `AOMIC 1000 dataset `_
- - Open without registration
- - Built-in
- - Done
- - 0.0.1
- * - :class:`.DataladAOMICPIOP1`
- - `AOMIC PIOP1 dataset `_
- - Open without registration
- - Built-in
- - Done
- - 0.0.1
- * - :class:`.DataladAOMICPIOP2`
- - `AOMIC PIOP2 dataset `_
- - Open without registration
- - Built-in
- - Done
- - 0.0.1
- * - :class:`.JuselessDataladAOMICID1000VBM`
- - | AOMIC ID1000 VBM dataset.
- | Available for Juseless only.
- - Restricted
- - ``junifer.configs.juseless``
- - Done
- - 0.0.1
- * - :class:`.JuselessDataladIXIVBM`
- - | `IXI VBM dataset `_.
- | Available for Juseless only.
- - Restricted
- - ``junifer.configs.juseless``
- - Done
- - 0.0.1
- * - :class:`.JuselessUCLA`
- - | UCLA fMRIPrep dataset.
- | Available for Juseless only.
- - Restricted
- - ``junifer.configs.juseless``
- - Done
- - 0.0.1
-
-Planned
-~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Description
- - Access
- - Type/Config
- - Reference
- * - ENKI
- - ENKI dataset for Juseless
- - Restricted
- - ``junifer.configs.juseless``
- - :gh:`47`
-
-
-Preprocessor
-------------
-
-..
- Provide a list of the Preprocessors that are implemented or planned.
-
- State: this should indicate the state of the preprocessor. Valid options are
- - Planned
- - In Progress
- - Done
-
- Version added: If the status is "Done", the junifer version in which the
- preprocessor was added. Else, a link to the Github issue or pull request
- implementing the preprocessor. Links to github can be added by using the
- following syntax: :gh:``
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Class
- - Description
- - State
- - Version Added
- * - :class:`.fMRIPrepConfoundRemover`
- - Remove confounds from ``fMRIPrep``-ed data
- - Done
- - 0.0.1
- * - :class:`.SpaceWarper`
- - | Warp / transform data from one space to another
- | (subject-native or other template spaces)
- - Done
- - 0.0.4
- * - ``Smoothing``
- - | Apply smoothing to data, particularly useful when dealing with
- | ``fMRIPrep``-ed data
- - In Progress
- - :gh:`161`
-
-
-..
- Planned
- ~~~~~~~
-
-
-Marker
-------
-
-..
- Provide a list of the Markers that are implemented or planned.
-
- State: this should indicate the state of the marker. Valid options are
- - Planned
- - In Progress
- - Done
-
- Version added: If the status is "Done", the junifer version in which the
- marker was added. Else, a link to the Github issue or pull request
- implementing the marker. Links to github can be added by using the
- following syntax: :gh:``
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Class
- - Description
- - State
- - Version Added
- * - :class:`.ParcelAggregation`
- - Apply parcellation and perform aggregation function
- - Done
- - 0.0.1
- * - :class:`.FunctionalConnectivityParcels`
- - Compute functional connectivity over parcellation
- - Done
- - 0.0.1
- * - :class:`.CrossParcellationFC`
- - Compute functional connectivity across two parcellations
- - Done
- - 0.0.1
- * - :class:`.SphereAggregation`
- - Spherical aggregation using mean
- - Done
- - 0.0.1
- * - :class:`.FunctionalConnectivitySpheres`
- - Compute functional connectivity over spheres placed on coordinates
- - Done
- - 0.0.1
- * - :class:`.RSSETSMarker`
- - Compute root sum of squares of edgewise timeseries
- - Done
- - 0.0.1
- * - :class:`.ReHoParcels`
- - Calculate regional homogeneity over parcellation
- - Done
- - 0.0.1
- * - :class:`.ReHoSpheres`
- - Calculate regional homogeneity over spheres placed on coordinates
- - Done
- - 0.0.1
- * - :class:`.ALFFParcels`
- - Calculate (f)ALFF and aggregate using parcellations
- - Done
- - 0.0.1
- * - :class:`.ALFFSpheres`
- - Calculate (f)ALFF and aggregate using spheres placed on coordinates
- - Done
- - 0.0.1
- * - :class:`.EdgeCentricFCParcels`
- - | Calculate edge-centric functional connectivity over parcellation, as
- | found in
- | `Jo et al. (2021) `_
- - Done
- - 0.0.2
- * - :class:`.EdgeCentricFCSpheres`
- - | Calculate edge-centric functional connectivity over spheres placed on
- | coordinates, as found in
- | `Jo et al. (2021) `_
- - Done
- - 0.0.2
- * - :class:`.TemporalSNRParcels`
- - Calculate temporal signal-to-noise ratio using parcellations
- - Done
- - 0.0.2
- * - :class:`.TemporalSNRSpheres`
- - | Calculate temporal signal-to-noise ratio using spheres placed on
- | coordinates
- - Done
- - 0.0.2
- * - :class:`.HurstExponent`
- - | Calculate Hurst exponent of a time series as found in
- | `Peng et al. (1995) `_
- - Done
- - 0.0.4
- * - :class:`.MultiscaleEntropyAUC`
- - | Calculate AUC of multiscale entropy of a time series as found in
- | `Costa et al. (2002) `_
- - Done
- - 0.0.4
- * - :class:`.PermEntropy`
- - | Calculate permutation entropy of a time series as found in
- | `Bandt at al. (2002) `_
- - Done
- - 0.0.4
- * - :class:`.RangeEntropy`
- - | Calculate range entropy of a time series as found in
- | `Omidvarnia et al. (2018) `_
- - Done
- - 0.0.4
- * - :class:`.RangeEntropyAUC`
- - | Calculate AUC of range entropy of a time series as found in
- | `Omidvarnia et al. (2018) `_
- - Done
- - 0.0.4
- * - :class:`.SampleEntropy`
- - | Calculate sample entropy of a time series as found in
- | `Richman et al. (2000) `_
- - Done
- - 0.0.4
-
-Planned
-~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Description
- - Reference
- * - Connectedness
- - Compute connectedness
- - :gh:`34`
-
-Parcellation
-------------
-
-..
- Provide a list of the Parcellations that are implemented or planned.
-
- Version added: The junifer version in which the parcellation was added.
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Options
- - Keys
- - Template Spaces
- - Version Added
- - Publication
- * - Schaefer
- - ``n_rois``, ``yeo_networks``
- - | ``Schaefer900x7``, ``Schaefer1000x7``, ``Schaefer100x17``,
- | ``Schaefer200x17``, ``Schaefer300x17``, ``Schaefer400x17``,
- | ``Schaefer500x17``, ``Schaefer600x17``, ``Schaefer700x17``,
- | ``Schaefer800x17``, ``Schaefer900x17``, ``Schaefer1000x17``
- - ``MNI152NLin6Asym``
- - 0.0.1
- - | Schaefer, A., Kong, R., Gordon, E.M. et al.
- | Local-Global Parcellation of the Human Cerebral Cortex from
- | Intrinsic Functional Connectivity MRI
- | Cerebral Cortex, Volume 28(9), Pages 3095–3114 (2018).
- | https://doi.org/10.1093/cercor/bhx179
- * - SUIT
- - ``space``
- - ``SUITxMNI``, ``SUITxSUIT``
- - ``SUIT``, ``MNI152Lin6Asym``
- - 0.0.1
- - | Diedrichsen, J.
- | A spatially unbiased atlas template of the human cerebellum.
- | NeuroImage, Volume 33(1), Pages 127–138 (2006).
- | https://doi.org/10.1016/j.neuroimage.2006.05.056
- * - Tian
- - ``scale``, ``space``, ``magneticfield``
- - | ``TianxS1x3TxMNI6thgeneration``, ``TianxS1x7TxMNI6thgeneration``,
- | ``TianxS2x3TxMNI6thgeneration``, ``TianxS2x7TxMNI6thgeneration``,
- | ``TianxS3x3TxMNI6thgeneration``, ``TianxS3x7TxMNI6thgeneration``,
- | ``TianxS4x3TxMNI6thgeneration``, ``TianxS4x7TxMNI6thgeneration``,
- | ``TianxS1x3TxMNInonlinear2009cAsym``,
- | ``TianxS2x3TxMNInonlinear2009cAsym``,
- | ``TianxS3x3TxMNInonlinear2009cAsym``,
- | ``TianxS4x3TxMNInonlinear2009cAsym``
- - ``MNI152NLin6Asym``, ``MNI152NLin2009cAsym``
- - 0.0.1
- - | Tian, Y., Margulies, D.S., Breakspear, M. et al.
- | Topographic organization of the human subcortex
- | unveiled with functional connectivity gradients.
- | Nature Neuroscience, Volume 23, Pages 1421–1432 (2020).
- | https://doi.org/10.1038/s41593-020-00711-6
- * - AICHA
- - ``version``
- - ``AICHA_v1``, ``AICHA_v2``
- - ``MNI152Lin6Asym``
- - 0.0.3
- - | Joliot, M., Jobard, G., Naveau, M. et al.
- | AICHA: An atlas of intrinsic connectivity of homotopic areas.
- | Journal of Neuroscience Methods, Volume 254, Pages 46-59 (2015).
- | https://doi.org/10.1016/j.jneumeth.2015.07.013
- * - Shen
- - ``year``, ``n_rois``
- - | ``Shen_2013_50``, ``Shen_2013_100``, ``Shen_2013_150``,
- | ``Shen_2015_268``, ``Shen_2019_368``
- - ``MNI152NLin2009cAsym``
- - 0.0.3
- - | Shen, X., Tokoglu, F., Papademetris, X., Constable, R.T.
- | Groupwise whole-brain parcellation from resting-state fMRI data
- | for network node identification.
- | NeuroImage, Volume 82 (2013).
- | https://doi.org/10.1016/j.neuroimage.2013.05.081.
- | Finn, E.S., Shen, X., Scheinost, D., et al.
- | Functional connectome fingerprinting: identifying individuals using
- | patterns of brain connectivity.
- | Nature Neuroscience, Volume 18(11), Pages 1664-1671 (2015).
- | https://doi:10.1038/nn.4135
- * - Yan
- - ``n_rois``, ``yeo_networks``, ``kong_networks``
- - | ``Yan100xYeo7``, ``Yan200xYeo7``, ``Yan300xYeo7``,
- | ``Yan400xYeo7``, ``Yan500xYeo7``, ``Yan600xYeo7``,
- | ``Yan700xYeo7``, ``Yan800xYeo7``, ``Yan900xYeo7``,
- | ``Yan1000xYeo7``,
- | ``Yan100xYeo17``, ``Yan200xYeo17``, ``Yan300xYeo17``,
- | ``Yan400xYeo17``, ``Yan500xYeo17``, ``Yan600xYeo17``,
- | ``Yan700xYeo17``, ``Yan800xYeo17``, ``Yan900xYeo17``,
- | ``Yan1000xYeo17``,
- | ``Yan100xKong17``, ``Yan200xKong17``, ``Yan300xKong17``,
- | ``Yan400xKong17``, ``Yan500xKong17``, ``Yan600xKong17``,
- | ``Yan700xKong17``, ``Yan800xKong17``, ``Yan900xKong17``,
- | ``Yan1000xKong17``
- - ``MNI152NLin6Asym``
- - 0.0.3
- - | Yan, X., Kong, R., Xue, A., et al.
- | Homotopic local-global parcellation of the human cerebral cortex from
- | resting-state functional connectivity.
- | NeuroImage, Volume 273 (2023).
- | https://doi.org/10.1016/j.neuroimage.2023.120010
- * - Brainnetome
- - ``threshold``
- - ``Brainnetome_thr0``, ``Brainnetome_thr25``, ``Brainnetome_thr50``
- - ``MNI152NLin6Asym``
- - 0.0.4
- - | Fan, L., Li, H., Zhuo, J., et al.
- | The Human Brainnetome Atlas: A New Brain Atlas Based on Connectional
- | Architecture
- | Cerebral Cortex, Volume 26(8), Pages 3508–3526 (2016).
- | https://doi.org/10.1093/cercor/bhw157
-
-
-Planned
-~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Publication
- * - Desikan-Killiany
- - | Desikan, R.S., Ségonne, F., Fischl, B. et al.
- | An automated labeling system for subdividing the human cerebral cortex
- | on MRI scans into gyral based regions of interest.
- | NeuroImage, Volume 31(3), Pages 968-980 (2006).
- | http://doi.org/10.1016/j.neuroimage.2006.01.021
- * - Glasser
- - | Glasser, M.F., Coalson, T.S., Robinson, E.C. et al.
- | A multi-modal parcellation of human cerebral cortex.
- | Nature (2016).
- | http://doi.org/10.1038/nature18933
- * - AAL
- - | Rolls, E.T., Huang, C.C., Lin, C.P., et al.
- | Automated anatomical labelling atlas 3.
- | NeuroImage, Volume 206 (2020).
- | https://doi.org/10.1016/j.neuroimage.2019.116189
- * - Mindboggle 101
- - | Klein, A., & Tourville, J.
- | 101 labeled brain images and a consistent human cortical labeling
- | protocol.
- | Frontiers in Neuroscience (2012).
- | http://doi.org/10.3389/fnins.2012.00171/abstract
- * - Destrieux
- - | Destrieux, C., Fischl, B., Dale, A., & Halgren, E.
- | Automatic parcellation of human cortical gyri and sulci using standard
- | anatomical nomenclature.
- | NeuroImage, Volume 53(1), Pages 1–15 (2010).
- | http://doi.org/10.1016/j.neuroimage.2010.06.010.
- * - Fan
- - | Fan, L., Li, H., Zhuo, J. et al.
- | The human brainnetome atlas: a new brain atlas based on connectional
- | architecture.
- | Cerebral cortex, Volume 26(8), Pages 3508-3526 (2016).
- | https://doi.org/10.1093/cercor/bhw157
- * - Buckner
- - | Buckner, R.L., Krienen, F.M., Castellanos, A., Diaz, J.C., Yeo, B.T.T.
- | The organization of the human cerebellum estimated by intrinsic
- | functional connectivity.
- | Journal of Neurophysiology, Volume 106(5), Pages 2322–2345 (2011).
- | https://doi.org/10.1152/jn.00339.2011
- | Yeo, B.T.T., Krienen, F.M., Sepulcre, J. et al.
- | The organization of the human cerebral cortex estimated by intrinsic
- | functional connectivity.
- | Journal of Neurophysiology, Volume 106(3), Pages 1125–1165 (2011).
- | https://doi.org/10.1152/jn.00338.2011
-
-
-Coordinates
------------
-
-..
- Provide a list of the Coordinates that are implemented or planned.
-
- Version added: The junifer version in which the parcellation was added.
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Keys
- - Version Added
- - Publication
- * - Cognitive action control
- - ``CogAC``
- - 0.0.1
- - | Cieslik, E.C., Mueller, V.I., Eickhoff, C.R., Langner, R.,
- | Eickhoff, S.B.
- | Three key regions for supervisory attentional control: Evidence from
- | neuroimaging meta-analyses.
- | Neuroscience & Biobehavioral Reviews, Volume 48, Pages 22-34 (2015).
- | https://doi.org/10.1016/j.neubiorev.2014.11.003.
- * - Cognitive action regulation
- - ``CogAR``
- - 0.0.1
- - | Langner, R., Leiberg, S., Hoffstaedter, F., Eickhoff, S.B.
- | Towards a human self-regulation system: Common and distinct neural
- | signatures of emotional and behavioural control.
- | Neuroscience & Biobehavioral Reviews, Volume 90, Pages 400-410 (2018).
- | https://doi.org/10.1016/j.neubiorev.2018.04.022.
- * - Default mode network
- - ``DMNBuckner``
- - 0.0.1
- - | Van Dijk, K.R., Hedden, T., Venkataraman, A. et al.
- | Intrinsic functional connectivity as a tool for human connectomics:
- | theory, properties, and optimization.
- | Journal of neurophysiology, Volume 103(1), Pages 297-321 (2010).
- | https://doi.org/10.1152/jn.00783.2009
- | Buckner, R.L., Andrews‐Hanna, J.R., & Schacter, D.L.
- | The brain's default network: anatomy, function, and relevance to
- | disease.
- | Annals of the New York Academy of Sciences, Volume 1124(1), Pages 1-38
- | (2008).
- | https://doi.org/10.1196/annals.1440.011
- * - Missing formal name
- - ``extDMN``
- - 0.0.1
- - Missing publication details
- * - Empathic processing
- - ``Empathy``
- - 0.0.1
- - | Bzdok, D., Schilbach, L., Vogeley, K. et al.
- | Parsing the neural correlates of moral cognition: ALE meta-analysis on
- | morality, theory of mind, and empathy.
- | Brain Structure and Function, Volume 217(4), Pages 783-796 (2012).
- | https://doi.org/10.1007/s00429-012-0380-y
- * - Extended social-affective default
- - ``eSAD``
- - 0.0.1
- - | Amft, M., Bzdok, D., Laird, A.R. et al.
- | Definition and characterization of an extended social-affective default
- | network.
- | Brain structure & function, Volume 220, Pages 1031–1049 (2015).
- | https://doi.org/10.1007/s00429-013-0698-0
- * - Extended multiple-demand network
- - ``eMDN``
- - 0.0.1
- - | Camilleri, J.A., Müller, V.I., Fox, P. et al.
- | Definition and characterization of an extended multiple-demand network.
- | NeuroImage, Volume 165, Pages 138-147 (2018).
- | https://doi.org/10.1016/j.neuroimage.2017.10.020.
- * - Motor execution
- - ``Motor``
- - 0.0.1
- - | Witt, S.T., Laird, A.R., Meyerand, M.E.
- | Functional neuroimaging correlates of finger-tapping task variations:
- | An ALE meta-analysis,
- | NeuroImage, Volume 42(1), Pages 343-356 (2008).
- | https://doi.org/10.1016/j.neuroimage.2008.04.025.
- * - Multitasking
- - ``MultiTask``
- - 0.0.1
- - | Worringer, B., Langner, R., Koch, I. et al.
- | Common and distinct neural correlates of dual-tasking and
- | task-switching: a meta-analytic review and a neuro-cognitive processing
- | model of human multitasking.
- | Brain structure & function, Volume 224(5), Pages 1845–1869 (2019).
- | https://doi.org/10.1007/s00429-019-01870-4
- * - Physiological stress
- - ``PhysioStress``
- - 0.0.1
- - | Kogler, L., Müller, V.I., Chang, A. et al.
- | Psychosocial versus physiological stress — Meta-analyses on
- | deactivations and activations of the neural correlates of stress
- | reactions.
- | NeuroImage, Volume 119, Pages 235-251 (2015).
- | https://doi.org/10.1016/j.neuroimage.2015.06.059.
- * - Reward-related decision making
- - ``Rew``
- - 0.0.1
- - | Liu, X., Hairston, J., Schrier, M., Fan, J.
- | Common and distinct networks underlying reward valence and processing
- | stages: A meta-analysis of functional neuroimaging studies.
- | Neuroscience & Biobehavioral Reviews, Volume 35(5), Pages 1219-1236
- | (2011).
- | https://doi.org/10.1016/j.neubiorev.2010.12.012.
- * - Missing formal name
- - ``Somatosensory``
- - 0.0.1
- - Missing publication details
- * - Theory-of-mind cognition
- - ``ToM``
- - 0.0.1
- - | Bzdok, D., Schilbach, L., Vogeley, K. et al.
- | Parsing the neural correlates of moral cognition: ALE meta-analysis on
- | morality, theory of mind, and empathy.
- | Brain Structure and Function, Volume 217(4), Pages 783-796 (2012).
- | https://doi.org/10.1007/s00429-012-0380-y
- * - Vigilant attention
- - ``VigAtt``
- - 0.0.1
- - | Langner, R., & Eickhoff, S.B.
- | Sustaining attention to simple tasks: a meta-analytic review of the
- | neural mechanisms of vigilant attention.
- | Psychological bulletin, Volume 139 4, Pages 870-900 (2013).
- | https://doi.org/10.1037/a0030694
- * - Working memory
- - ``WM``
- - 0.0.1
- - | Rottschy, C., Langner, R., Dogan, I. et al.
- | Modelling neural correlates of working memory: A coordinate-based
- | meta-analysis.
- | NeuroImage, Volume 60, Pages 830-846 (2012).
- | https://doi.org/10.1016/j.neuroimage.2011.11.050.
- * - Areal functional network from Power et al. (2011)
- - ``Power2011``
- - 0.0.2
- - | Power, J. D., Cohen, A. L., Nelson, S. M. et al.
- | Functional network organization of the human brain.
- | Neuron, Volume 72(4), Pages 665–678 (2011).
- | https://doi.org/10.1016/j.neuron.2011.09.006
- * - Brain maturity functional connections from Dosenbach et al. (2010)
- - ``Dosenbach``
- - 0.0.2
- - | Dosenbach, N.U.F., Nardos, B., Cohen, A.L. et al.
- | Prediction of Individual Brain Maturity Using fMRI
- | Science, Volume 329(5997), Pages 1358-1361 (2010).
- | https://doi.org/10.1126/science.1194144
- * - Areal functional network from Power et al. (2013)
- - ``Power2013``
- - 0.0.4
- - | Power, J. D., Schlaggar, B. L., Lessov-Schlaggar, C. N., &
- | Petersen, S. E.
- | Evidence for hubs in human functional brain networks.
- | Neuron, Volume 79(4), Pages 798–813 (2013).
- | https://doi.org/10.1016/j.neuron.2013.07.035
- * - Autobiographical Memory from Spreng et al. (2009)
- - ``AutobiographicalMemory``
- - 0.0.4
- - | Spreng, R. N., Mar, R. A., Kim, A. S. N.
- | The Common Neural Basis of Autobiographical Memory, Prospection,
- | Navigation, Theory of Mind, and the Default Mode: A Quantitative
- | Meta-analysis.
- | Journal of Cognitive Neuroscience, Volume 21(3), Pages 489–510 (2009).
- | https://doi.org/10.1162/jocn.2008.21029
-
-
-Planned
-~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Publication
- * - Emotional scene and face processing (EmoSF)
- - | Sabatinelli, D., Fortune, E.E., Li, Q. et al.
- | Emotional perception: Meta-analyses of face and natural scene
- | processing.
- | NeuroImage, Volume 54(3), Pages 2524-2533 (2011).
- | https://doi.org/10.1016/j.neuroimage.2010.10.011.
- * - Perceptuo-motor network
- - | Heckner, M.K., Cieslik, E.C., Eickhoff, S.B. et al.
- | The Aging Brain and Executive Functions Revisited: Implications from
- | Meta-analytic and Functional-Connectivity Evidence.
- | Journal of Cognitive Neuroscience, Volume 33(9), Pages 1716–1752 (2021).
- | https://doi.org/10.1162/jocn_a_01616
-
-
-Mask
-----
-
-..
- Provide a list of the masks that are implemented or planned.
-
- Version added: The junifer version in which the mask was added.
-
-Available
-~~~~~~~~~
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Keys
- - Template Space
- - Version Added
- - Description - Publication
- * - Vickery-Patil (Gray Matter)
- - | ``GM_prob0.2``
- - ``MNI152Lin6Asym``
- - 0.0.1
- - | Vickery, Sam, & Patil, Kaustubh. (2022).
- | Chimpanzee and Human Gray Matter Masks [Data set]. Zenodo.
- | https://doi.org/10.5281/zenodo.6463123
- * - Vickery-Patil (Cortex + Basal Ganglia)
- - | ``GM_prob0.2_cortex``
- - ``MNI152Lin6Asym``
- - 0.0.1
- - | Vickery, Sam, & Patil, Kaustubh. (2022).
- | Chimpanzee and Human Gray Matter Masks [Data set]. Zenodo.
- | https://doi.org/10.5281/zenodo.6463123
- * - ``junifer``'s custom brain mask
- - | ``compute_brain_mask``
- - Adapts to the target data
- - 0.0.2
- - | Compute the whole-brain, gray-matter or white-matter mask using
- | the template and the resolution from the target image. The
- | templates are obtained via ``templateflow``.
- * - ``nilearn``'s mask computed from fMRI data
- - | ``compute_epi_mask``
- - Adapts to the target data
- - 0.0.2
- - | Compute a brain mask from fMRI data. This is based on an heuristic
- | proposed by T.Nichols: find the least dense point of the histogram,
- | between fractions ``lower_cutoff`` and ``upper_cutoff`` of the total
- | image histogram. See :func:`nilearn.masking.compute_epi_mask`
- * - ``nilearn``'s background mask
- - | ``compute_background_mask``
- - Adapts to the target data
- - 0.0.2
- - | Compute a brain mask for the images by guessing the value of the
- | background from the border of the image.
- | See :func:`nilearn.masking.compute_background_mask`
- * - ``nilearn``'s ICBM152 template gray-matter mask
- - | ``fetch_icbm152_brain_gm_mask``
- - ``MNI152NLin2009aAsym``
- - 0.0.2
- - | Compute a gray-matter mask from the asymmetrical ICBM152 2009 template,
- | release a.
- | See :func:`nilearn.datasets.fetch_icbm152_brain_gm_mask`
-
-
-..
- Planned
- ~~~~~~~
-
-..
- helpful site for creating tables: https://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html#tables
diff --git a/pr-preview/pr-273/_sources/contribution.rst.txt b/pr-preview/pr-273/_sources/contribution.rst.txt
deleted file mode 100644
index bbf8b6d56..000000000
--- a/pr-preview/pr-273/_sources/contribution.rst.txt
+++ /dev/null
@@ -1,263 +0,0 @@
-.. include:: links.inc
-
-.. _contribution_guidelines:
-
-Contributing
-============
-
-Setting up the local development environment
---------------------------------------------
-
-#. Fork the https://github.com/juaml/junifer repository on GitHub. If you
- have never done this before, `follow the official guide
- `_.
-#. Clone your fork locally as described in the same guide but also add the
- flag to sync the submodules as well by appending the following to the
- clone command:
-
- .. code-block:: bash
-
- ... --recurse-submodules
-
-#. Install your local copy into a Python virtual environment. You can `read
- this guide to learn more
- `_ about them
- and how to create one.
-
- .. code-block:: bash
-
- pip install -e ".[dev]"
-
-#. Create a branch for local development using the ``main`` branch as a
- starting point. Use ``fix``, ``refactor``, or ``feat`` as a prefix.
-
- .. code-block:: bash
-
- git checkout main
- git checkout -b /
-
- Now you can make your changes locally.
-
-#. Make sure you install git pre-commit hooks like so:
-
- .. code-block:: bash
-
- pre-commit install
-
-#. When making changes locally, it is helpful to ``git commit`` your work
- regularly. On one hand to save your work and on the other hand, the smaller
- the steps, the easier it is to review your work later. Please use `semantic
- commit messages
- `_.
-
- .. code-block:: bash
-
- git add .
- git commit -m ": "
-
- In case, you want to commit some WIP (work-in-progress) code, please indicate
- that in the commit message and use the flag ``--no-verify`` with
- ``git commit`` like so:
-
- .. code-block:: bash
-
- git commit --no-verify -m "WIP: "
-
-#. When you're done making changes, check that your changes pass our test suite.
- This is all included with ``tox``.
-
- .. code-block:: bash
-
- tox
-
- You can also run all ``tox`` tests in parallel. As of ``tox 3.7``, you can run
-
- .. code-block:: bash
-
- tox --parallel
-
-#. Push your branch to GitHub.
-
- .. code-block:: bash
-
- git push origin /
-
-#. Open the link displayed in the message when pushing your new branch in order
- to submit a pull request. Please follow the template presented to you in the
- web interface to complete your pull request.
-
-
-GitHub Pull Request guidelines
-------------------------------
-
-Before you submit a pull request, check that it meets these guidelines:
-
-#. The pull request should include tests in the respective ``tests`` directory.
- Except in rare circumstances, code coverage must not decrease (as reported
- by codecov which runs automatically when you submit your pull request).
-#. If the pull request adds functionality, the docs should be
- updated. Consider creating a Python file that demonstrates the usage in
- ``examples/`` directory.
-#. Make sure to create a Draft Pull Request. If you are not sure how to do it,
- check
- `here `_.
-#. Note the pull request ID assigned after completing the previous step and
- create a short one-liner file of your contribution named as
- ``.`` in ``docs/changes/newsfragments/``, ````
- being as per the following convention:
-
- * API change : ``change``
- * Bug fix : ``bugfix``
- * Enhancement : ``enh``
- * Feature : ``feature``
- * Documentation improvement : ``doc``
- * Miscellaneous : ``misc``
- * Deprecation and API removal : ``removal``
-
- For example, a basic documentation improvement can be recorded in a file
- ``101.doc`` with the content:
-
- .. code-block::
-
- Fixed a typo in intro by `junifer's biggest fan`_
-
-#. If it's your first contribution, also add yourself to
- ``docs/changes/contributors.inc``.
-#. The pull request will be tested against several Python versions.
-#. Someone from the core team will review your work and guide you to a successful
- contribution.
-
-
-Running unit tests
-------------------
-
-junifer uses `pytest `_ for its
-unit-tests and new features should in general always come with new
-tests that make sure that the code runs as intended.
-
-To run all tests
-
-.. code-block:: bash
-
- tox -e test
-
-
-Adding and building documentation
----------------------------------
-
-Building the documentation requires some extra packages and can be installed by
-
-.. code-block:: bash
-
- pip install -e ".[docs]"
-
-To build the docs
-
-.. code-block:: bash
-
- cd docs
- make local
-
-To view the documentation, open ``docs/_build/html/index.html``.
-
-In case you remove some files or change their filenames, you can run into
-errors when using ``make local``. In this situation you can use ``make clean``
-to clean up the already build files and then re-run ``make local``.
-
-Also, we follow British English for the documentation.
-
-
-Writing Examples
-----------------
-
-The format used for text is reST. Check the `sphinx reST reference`_ for more
-details. The examples are run and displayed in HTML format using
-`sphinx gallery`_. To add an example, just create a ``.py`` file that starts
-either with ``plot_`` or ``run_``, depending on whether the example generates
-a figure or not.
-
-The first lines of the example should be a Python block comment with a title,
-a description of the example, authors and license name.
-
-The following is an example of how to start an example
-
-.. code-block:: python
-
- """
- Generic BIDS datagrabber for datalad.
- =====================================
-
- This example uses a generic BIDS datagraber to get the data from a BIDS dataset
- store in a datalad remote sibling.
-
- Authors: Federico Raimondo
-
- License: BSD 3 clause
- """
-
-The rest of the script will be executed as normal Python code. In order to
-render the output and embed formatted text within the code, you need to add
-a 79 ``#`` (a full line) at the point in which you want to render and add text.
-Each line of text shall be preceded with ``#``. The code that is not
-commented will be executed.
-
-The following example will create texts and render the output between the
-texts.
-
-.. code-block:: python
-
- from junifer.datagrabber import PatternDataladDataGrabber
- from junifer.utils import configure_logging
-
-
- ###############################################################################
- # Set the logging level to info to see extra information
- configure_logging(level="INFO")
-
-
- ###############################################################################
- # The BIDS datagrabber requires three parameters: the types of data we want,
- # the specific pattern that matches each type, and the variables that will be
- # replaced in the patterns.
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": "{subject}/anat/{subject}_T1w.nii.gz",
- "BOLD": "{subject}/func/{subject}_task-rest_bold.nii.gz",
- }
- replacements = ["subject"]
- ###############################################################################
- # Additionally, a datalad datagrabber requires the URI of the remote sibling
- # and the location of the dataset within the remote sibling.
- repo_uri = "https://gin.g-node.org/juaml/datalad-example-bids"
- rootdir = "example_bids"
-
- ###############################################################################
- # Now we can use the datagrabber within a `with` context
- # One thing we can do with any datagrabber is iterate over the elements.
- # In this case, each element of the datagrabber is one session.
- with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
- ) as dg:
- for elem in dg:
- print(elem)
-
- ###############################################################################
- # Another feature of the datagrabber is the ability to get a specific
- # element by its name. In this case, we index `sub-01` and we get the file
- # paths for the two types of data we want (T1w and bold).
- with PatternDataladDataGrabber(
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- uri=repo_uri,
- replacements=replacements,
- ) as dg:
- sub01 = dg["sub-01"]
- print(sub01)
-
-Finally, when the example is done, you can run it as a normal Python script.
-To generate the HTML, just build the docs.
diff --git a/pr-preview/pr-273/_sources/extending/coordinates.rst.txt b/pr-preview/pr-273/_sources/extending/coordinates.rst.txt
deleted file mode 100644
index f56c29708..000000000
--- a/pr-preview/pr-273/_sources/extending/coordinates.rst.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-.. include:: ../links.inc
-
-.. _adding_coordinates:
-
-Adding Coordinates
-==================
-
-Instead of using whole-brain parcellations to aggregate voxel-wise signals from
-MR images (as for example in the :class:`.ParcelAggregation` marker), ``junifer``
-allows you to specify a set of coordinates around which to draw spheres to
-aggregate (for example using the :class:`.SphereAggregation` marker) the MR
-signals from individual voxels. Now, before you start specifying your own sets
-of coordinates, check the coordinates that ``junifer`` already has
-:ref:`built in `. If you simply want to use a well known set of
-coordinates from the literature, there is a reasonable chance, that ``junifer``
-provides them already.
-
-If you checked the in-built coordinates, and they are not there already (for
-example if you came up with your own set of coordinates), then ``junifer``
-provides an easy way for you to register them using the
-:func:`.register_coordinates` function, so you can use your own set of
-coordinates within a ``junifer`` pipeline.
-
-From the API reference, we can see that it has 4 positional arguments
-(``name``, ``coordinates``, ``voi_names`` and ``space``) as well as one
-optional keyword argument (``overwrite``).
-
-The ``name`` argument takes a string indicating the name you want to give to
-this set of coordinates. This ``name`` can be used to obtain and operate on a
-set of coordinates in ``junifer``. For example, you can obtain your coordinates
-after registration by providing ``name`` to :func:`.load_coordinates`. We could
-simply call it ``"my_set_of_coordinates"``, but likely you want a more
-descriptive and more informative name most of the time.
-
-The ``coordinates`` argument takes the actual coordinates as a 2-dimensional
-:class:`numpy.ndarray`. It contains one row for every location, and three
-columns (one for each spatial dimension). That is, the first, second, and third
-columns indicate the x-, y-, and z-coordinates in MNI space respectively.
-The number of rows in the array correspond to the number of coordinates that
-belong to this set.
-
-The ``voi_names`` argument takes a list of strings
-indicating the names of each coordinate (i.e. volume-of-interest) in the
-``coordinates`` array. Therefore, the length of this list should correspond to
-the number of rows in the coordinates array. Now, we know everything we need to
-know to register a set of coordinates.
-
-Lastly, we specify the ``space`` that the coordinates are in, for example,
-``"MNI"`` or ``"native"`` (scanner-native space).
-
-Step 1: Prepare code to register a set of coordinates
------------------------------------------------------
-
-Let's make a simple script to register our coordinates. We could simply call it
-``register_custom_coordinates.py``. We may start by importing the appropriate
-packages:
-
-.. code-block:: python
-
- from junifer.data import register_coordinates
- import numpy as np
-
-For the sake of this example, we can create a set of coordinates that belong
-to the Default Mode Network (DMN), and register this set of coordinates with
-``junifer``. Note, that ``junifer`` already has a
-:ref:`set of coordinates built-in ` ("DMNBuckner") that is associated
-with the DMN. Here, we use the DMN coordinates used in a
-`nilearn example `_.
-
-.. code-block:: python
-
- dmn_coords = np.array(
- [[0, -52, 18],
- [-46, -68, 32],
- [46, -68, 32],
- [1, 50, -5]]
- )
- voi_names = [
- "Posterior Cingulate Cortex",
- "Left Temporoparietal junction",
- "Right Temporoparietal junction",
- "Medial prefrontal cortex",
- ]
-
-As you can see, we have four rows, and therefore four locations in the brain
-associated with this set of coordinates. The variable ``voi_names`` reflects this
-as it contains four strings indicating the name of each location. We can now
-simply use this to register our coordinates:
-
-.. code-block:: python
-
- register_coordinates(
- name="DMNCustom",
- coordinates=dmn_coords,
- voi_names=voi_names,
- space="MNI"
- )
-
-Now, when we run this script, ``junifer`` registers these coordinates and we can
-use them in subsequent analyses. Let's now consider how to use coordinate
-registration in combination with
-:ref:`codeless configuration using a YAML file `.
-
-Step 2: Add coordinate registration to the YAML file
-----------------------------------------------------
-
-In order to register your coordinates for a pipeline configured by a YAML file,
-you can use the ``with`` keyword provided by ``junifer``:
-
-.. code-block:: yaml
-
- with:
- - register_custom_coordinates.py
-
-Afterwards continue configuring the rest of your pipeline in this YAML file,
-and you will be able to use this set of coordinates using the name you gave it
-during registration (in our example "DMNCustom"). We can add a
-:class:`.SphereAggregation` to demonstrate how this can be done:
-
-.. code-block:: yaml
-
- markers:
- - name: DMNCustom_mean
- kind: SphereAggregation
- coords: DMNCustom
- radius: 5
- method: mean
-
-This will aggregate signals from a sphere around each of our coordinates with a
-radius of 5mm.
diff --git a/pr-preview/pr-273/_sources/extending/datagrabber.rst.txt b/pr-preview/pr-273/_sources/extending/datagrabber.rst.txt
deleted file mode 100644
index 5db379caa..000000000
--- a/pr-preview/pr-273/_sources/extending/datagrabber.rst.txt
+++ /dev/null
@@ -1,505 +0,0 @@
-.. include:: ../links.inc
-
-.. _extending_datagrabbers:
-
-Creating Data Grabbers
-======================
-
-Data Grabbers are the first step of the pipeline. Its purpose is to interpret
-the structure of a dataset and provide two specific functionalities:
-
-#. Given an *element*, provide the path to each kind of data available for this
- element (e.g. the path to the T1 image, the path to the T2 image, etc.)
-#. Provide the list of *elements* available in the dataset.
-
-In this section, we will see how to create a DataGrabber for a dataset. Basic
-aspects of DataGrabbers are covered in the
-:ref:`Understanding Data Grabbers ` section.
-
-.. _extending_datagrabbers_think:
-
-Step 1: Think about the element
--------------------------------
-
-Like with any programming-related task, the first step is to think. When
-creating a DataGrabber, we need to first define what an *element* is.
-The *element* should be the smallest unit of data that can be processed. That
-is, for each element, there should be a set of data that can be processed, but
-only one of each *data type* (see :ref:`data_types`).
-
-For example, if we have a dataset from a fMRI study in which:
-
-a. both T1w and fMRI was acquired
-b. 20 subjects went through an experiment twice
-c. the experiment included resting-stage fMRI and a task named *stroop*
-
-then the *element* should be composed of 3 items:
-
-* ``subject``: The subject IDs, e.g. ``sub001``, ``sub002``, ... ``sub020``
-* ``session``: The session number, e.g. ``ses1``, ``ses2``
-* ``task``: The task performed, e.g. ``rest``, ``stroop``
-
-If any of these items were not part of the element, then we will have more than
-one ``T1w`` and / or ``BOLD`` image for each subject, which is not allowed.
-
-Importantly, nothing prevents that one image being part of two different
-elements. For example, it is usually the case that the ``T1w`` image is not
-acquired for each task, but once in the entire session. So in this case, the
-``T1w`` image for the element (``sub001``, ``ses1``, ``rest``) will be the same
-as the ``T1w`` image for the element (``sub001``, ``ses1``, ``stroop``).
-
-We will now continue this section using as an example, a dataset in BIDS format
-in which 9 subjects (``sub-01`` to ``sub-09``) were scanned each during 3
-sessions (``ses-01``, ``ses-02``, ``ses-03``) and each session included a
-``T1w`` and a ``BOLD`` image (resting-state), except for ``ses-03`` which was
-only anatomical data.
-
-Step 2: Think about the dataset's structure
--------------------------------------------
-
-Now that we have our element defined, we need to think about the structure of
-the dataset. Mainly, because the structure of the dataset will determine how
-the DataGrabber needs to be implemented.
-
-``junifer`` provides a concrete class to deal with datasets that can be thought
-in terms of *patterns*. A *pattern* is a string that contains placeholders that
-are replaced by the actual values of the element. In our BIDS example, the path
-to the T1w image of subject ``sub-01`` and session ``ses-01``, relative to the
-dataset location, is ``sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz``. By
-replacing ``sub-01`` with ``sub-02``, we can obtain the T1w image of the first
-session of the second subject. Indeed, the path to the T1w images can be
-expressed as a pattern:
-
-``{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz``
-
-where ``{subject}`` is the replacement for the subject id and ``{session}``
-is the replacement for the session id.
-
-Since it is a BIDS dataset, the same happens with the BOLD images. The path to
-the BOLD images can be expressed as a pattern:
-
-``{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz``
-
-This will be the norm in most of the datasets. If your dataset can be expressed
-in terms of patterns, then follow :ref:`extending_datagrabbers_pattern`.
-Otherwise, we recommend that you take time to re-think about your dataset
-structure and why it does not have clear *patterns*. Feel free to open a
-discussion in the `junifer Discussions`_ page. Most probably we can help you
-get your dataset in order.
-
-If there is no other way, then you can follow :ref:`extending_datagrabbers_base`
-to create a DataGrabber from scratch.
-
-.. _extending_datagrabbers_pattern:
-
-Step 3: Create a Data Grabber
------------------------------
-
-Option A: Extending from PatternDataGrabber
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :class:`.PatternDataGrabber` class is a concrete class that has the
-functionality of understanding patterns embedded in it.
-
-Before creating the DataGrabber, we need to define 3 variables:
-
-* ``types``: A list with the available :ref:`data_types` in our dataset.
-* ``patterns``: A dictionary that specifies the pattern and some additional
- information for each data type.
-* ``replacements``: A list indicating which of the elements in the patterns
- should be replaced by the values of the element.
-
-For example, in our BIDS example, the variables will be:
-
-.. code-block:: python
-
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": {
- "pattern": "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- replacements = ["subject", "session"]
-
-An additional fourth variable is the ``datadir``, which should be the path to
-where the dataset is located. For example, if the dataset is located in
-``/data/project/test/data``, then ``datadir`` should be
-``/data/project/test/data``. Or, if we want to allow the user to specify the
-location of the dataset, we can expose the variable in the constructor, as in
-the following example.
-
-With the variables defined above, we can create our DataGrabber and name it
-``ExampleBIDSDataGrabber``:
-
-.. code-block:: python
-
- from pathlib import Path
-
- from junifer.datagrabber import PatternDataGrabber
-
-
- class ExampleBIDSDataGrabber(PatternDataGrabber):
-
- def __init__(self, datadir: str | Path) -> None:
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": {
- "pattern": "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- replacements = ["subject", "session"]
- super().__init__(
- datadir=datadir,
- types=types,
- patterns=patterns,
- replacements=replacements,
- )
-
-Our DataGrabber is ready to be used by ``junifer``. However, it is still unknown
-to the library. We need to register it in the library. To do so, we need to
-use the :func:`.register_datagrabber` decorator.
-
-
-.. code-block:: python
-
- from pathlib import Path
-
- from junifer.api.decorators import register_datagrabber
- from junifer.datagrabber import PatternDataGrabber
-
-
- @register_datagrabber
- class ExampleBIDSDataGrabber(PatternDataGrabber):
-
- def __init__(self, datadir: str | Path) -> None:
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": {
- "pattern": "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- replacements = ["subject", "session"]
- super().__init__(
- datadir=datadir,
- types=types,
- patterns=patterns,
- replacements=replacements,
- )
-
-
-Now, we can use our DataGrabber in ``junifer``, by setting the ``datagrabber``
-kind in the yaml file to ``ExampleBIDSDataGrabber``. Remember that we still need
-to set the ``datadir``.
-
-.. code-block:: yaml
-
- datagrabber:
- kind: ExampleBIDSDataGrabber
- datadir: /data/project/test/data
-
-
-Optional: Using datalad
-~~~~~~~~~~~~~~~~~~~~~~~
-
-If you are using `datalad`_, you can use the :class:`.PatternDataladDataGrabber`
-instead of the :class:`.PatternDataGrabber`. This class will not only
-interpret patterns, but also use `datalad`_ to ``clone`` and ``get`` the data.
-
-The main difference between the two is that the ``datadir`` is not the actual
-location of the dataset, but the location where the dataset will be cloned. It
-can now be ``None``, which means that the data will be downloaded to a
-temporary directory. To set the location of the dataset, you can use the
-``uri`` argument in the constructor. Additionally, a ``rootdir`` argument can
-be used to specify the path to the root directory of the dataset after doing
-``datalad clone``.
-
-In the example, the dataset is hosted in Gin
-(``https://gin.g-node.org/juaml/datalad-example-bids``).
-
-When we clone this dataset, we will see the following structure:
-
-.. code-block::
-
- .
- └── example_bids_ses
- ├── sub-01
- │ ├── ses-01
- │ ├── ses-02
- │ └── ses-03
- ├── sub-02
- │ ├── ses-01
- │ ├── ses-02
- │ └── ses-03
- ├── sub-03
- ...
-
-So the patterns will start after ``example_bids_ses``. This is our ``rootdir``.
-
-Now we have our 2 additional variables:
-
-.. code-block:: python
-
- uri = "https://gin.g-node.org/juaml/datalad-example-bids"
- rootdir = "example_bids_ses"
-
-And we can create our DataGrabber:
-
-.. code-block:: python
-
- from junifer.api.decorators import register_datagrabber
- from junifer.datagrabber import PatternDataladDataGrabber
-
-
- @register_datagrabber
- class ExampleBIDSDataGrabber(PatternDataladDataGrabber):
-
- def __init__(self) -> None:
- types = ["T1w", "BOLD"]
- patterns = {
- "T1w": {
- "pattern": "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "pattern": "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- replacements = ["subject", "session"]
- uri = "https://gin.g-node.org/juaml/datalad-example-bids"
- rootdir = "example_bids_ses"
- super().__init__(
- datadir=None,
- uri=uri,
- rootdir=rootdir,
- types=types,
- patterns=patterns,
- replacements=replacements,
- )
-
-This approach can be used directly from the YAML, like so:
-
-.. code-block:: yaml
-
- datagrabber:
- - kind: PatternDataladDataGrabber
- types:
- - BOLD
- - T1w
- patterns:
- BOLD:
- pattern: "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz"
- space: MNI152NLin6Asym
- T1w:
- pattern: "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz"
- space: native
- replacements:
- - subject
- - session
- uri: "https://gin.g-node.org/juaml/datalad-example-bids"
- rootdir: example_bids_ses
-
-.. _extending_datagrabbers_base:
-
-Option B: Extending from BaseDataGrabber
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-While we could not think of a use case in which the pattern-based DataGrabber
-would not be suitable, it is still possible to create a DataGrabber extending
-from the :class:`.BaseDataGrabber` class.
-
-In order to create a DataGrabber extending from :class:`.BaseDataGrabber`, we
-need to implement the following methods:
-
-- ``get_item``: to get a single item from the dataset.
-- ``get_elements``: to get the list of all elements present in the dataset
-- ``get_element_keys``: to get the keys of the elements in the dataset.
-
-.. note::
-
- The ``__init__`` method could also be implemented, but it is not mandatory.
- This is required if the DataGrabber requires any extra parameter.
-
-We will now implement our BIDS example with this method.
-
-The first method, ``get_item``, needs to obtain a single
-item from the dataset. Since this dataset requires two variables, ``subject``
-and ``session``, we will use them as parameters of ``get_item``:
-
-.. code-block:: python
-
- def get_item(self, subject: str, session: str) -> dict[str, dict[str, str]]:
- out = {
- "T1w": {
- "path": f"{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "path": f"{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- return out
-
-
-The second method, ``get_elements``, needs to return a list of all the elements
-in the dataset. In this case, we know that the dataset contains 3 subjects and 3
-sessions, so we can create a list of all the possible combinations. However, we
-need to remember that for session *ses-03* there is no BOLD data.
-
-.. code-block:: python
-
- from itertools import product
-
-
- def get_elements(self) -> list[str]:
- subjects = ["sub-01", "sub-02", "sub-03"]
- sessions = ["ses-01", "ses-02"]
-
- # If we are not working on BOLD data, we can add "ses-03"
- if "BOLD" not in self.types:
- sessions.append("ses-03")
- elements = []
- for subject, element in product(subjects, sessions):
- elements.append({"subject": subject, "session": session})
- return elements
-
-
-And finally, we can implement the ``get_element_keys`` method. This method needs
-to return a list of the keys that represent each of the items in the element
-tuple. As a rule of thumb, they should be the parameters of the ``get_item``
-method, in the same order.
-
-.. code-block:: python
-
- def get_element_keys(self) -> list[str]:
- return ["subject", "session"]
-
-
-So, to summarise, our DataGrabber will look like this:
-
-.. code-block:: python
-
- from junifer.api.decorators import register_datagrabber
- from junifer.datagrabber import BaseDataGrabber
-
-
- @register_datagrabber
- class ExampleBIDSDataGrabber(BaseDataGrabber):
-
- def get_item(self, subject: str, session: str) -> dict[str, dict[str, str]]:
- out = {
- "T1w": {
- "path": f"{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
- "space": "native",
- },
- "BOLD": {
- "path": f"{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- }
- return out
-
- def get_elements(self) -> list[str]:
- subjects = ["sub-01", "sub-02", "sub-03"]
- sessions = ["ses-01", "ses-02"]
-
- # If we are not working on BOLD data, we can add "ses-03"
- if "BOLD" not in self.types:
- sessions.append("ses-03")
- elements = []
- for subject in subjects:
- for session in sessions:
- elements.append({"subject": subject, "session": session})
- return elements
-
- def get_element_keys(self) -> list[str]:
- return ["subject", "session"]
-
-Optional: Using datalad
-~~~~~~~~~~~~~~~~~~~~~~~
-
-If this dataset is in a datalad dataset, we can extend from
-:class:`.DataladDataGrabber` instead of :class:`.BaseDataGrabber`. This will
-allow us to use the datalad API to obtain the data.
-
-Step 4: Optional: Adding *BOLD confounds*
------------------------------------------
-
-For some analyses, it is useful to have the confounds associated with the BOLD
-data. This corresponds to the ``BOLD_confounds`` item in the
-:ref:`Data Object ` (see :ref:`data_types`). However, the
-``BOLD_confounds`` element does not only consists of a ``path``, but it requires
-more information about the format of the confounds file. Thus, the
-``BOLD_confounds`` element is a dictionary with the following keys:
-
-- ``path``: the path to the confounds file.
-- ``format``: the format of the confounds file. Currently, this can be either
- ``fmriprep`` or ``adhoc``.
-
-The ``fmriprep`` format corresponds to the format of the confounds files
-generated by `fMRIPrep`_. The ``adhoc`` format corresponds to a format that is
-not standardised.
-
-.. note::
-
- The ``mappings`` key is only required if the ``format`` is ``adhoc``. If the
- ``format`` is ``fmriprep``, the ``mappings`` key is not required.
-
-Currently, ``junifer`` provides only one confound remover step
-(:class:`.fMRIPrepConfoundRemover`), which relies entirely on the ``fmriprep``
-confound variable names. Thus, if the confounds are not in ``fmriprep`` format,
-the user will need to provide the mappings between the *ad-hoc* variable names
-and the ``fmriprep`` variable names. This is done by specifying the ``adhoc``
-format and providing the mappings as a dictionary in the ``mappings`` key.
-
-In the following example, the confounds file has 3 variables that are not in the
-``fmriprep`` format. Thus, we will provide the mappings for these variables to
-the ``fmriprep`` format. For example, the ``get_item`` method could look like
-this:
-
-.. code-block:: python
-
- def get_item(
- self, subject: str, session: str
- ) -> dict:
- out = {
- "BOLD": {
- "path": f"{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
- "space": "MNI152NLin6Asym",
- },
- "BOLD_confounds": {
- "path": f"{subject}/{session}/func/{subject}_{session}_confounds.tsv",
- "format": "adhoc",
- "mappings": {
- "fmriprep": {
- "variable1": "rot_x",
- "variable2": "rot_z",
- "variable3": "rot_y",
- },
- },
- },
- }
-
-.. note::
-
- Not all of the mappings need to be provided. For the moment, this is used
- only by the :class:`.fMRIPrepConfoundRemover` step, which requires variables
- based on the strategy selected. However, it is recommended to provide all the
- mappings, as this will allow the user to choose different strategies with the
- same dataset.
diff --git a/pr-preview/pr-273/_sources/extending/dependencies.rst.txt b/pr-preview/pr-273/_sources/extending/dependencies.rst.txt
deleted file mode 100644
index 1e44f3535..000000000
--- a/pr-preview/pr-273/_sources/extending/dependencies.rst.txt
+++ /dev/null
@@ -1,141 +0,0 @@
-.. include:: ../links.inc
-
-.. _specifying_dependencies:
-
-Specifying Dependencies
-=======================
-
-This section describes how you can tackle different situations when writing
-your custom Marker and / or Preprocessor and take care of the dependencies for
-them.
-
-You might have already come across listing out dependencies for your
-:ref:`custom Markers ` and / or
-:ref:`custom Preprocessors `, if not, check them out
-first. If you have already gone through them, you are already familiar with using
-class attribute ``_DEPENDENCIES`` to keep track of its dependencies. ``junifer``
-is a bit more sophisticated about them and we will see here how you can make the
-best use of them.
-
-.. _component_dependencies:
-
-Handling dependencies that come as Python packages
---------------------------------------------------
-
-You have already seen this case handled by having a class attribute
-``_DEPENDENCIES`` whose value is a set of all the package names that the
-component depends on. For example, for :class:`.RSSETSMarker`, we have:
-
-.. code-block:: python
-
- _DEPENDENCIES: ClassVar[Set[str]] = {"nilearn"}
-
-The type annotation is for documentation and static type checking purposes.
-Although not required, we highly recommend you use them, your future self
-and others who use it will thank you.
-
-.. _component_external_dependencies:
-
-Handling external dependencies from toolboxes
----------------------------------------------
-
-You can also specify dependencies of external toolboxes like AFIN, FSL and ANTs,
-by having a class attribute like so:
-
-.. code-block:: python
-
- _EXT_DEPENDENCIES: ClassVar[List[Dict[str, Union[str, List[str]]]]] = [
- {
- "name": "afni",
- "commands": ["3dReHo", "3dAFNItoNIFTI"],
- },
- ]
-
-The above example is taken from the class which computes regional homogeneity
-(ReHo) using AFNI. The general pattern is that you need to have the value of
-``_EXT_DEPENDENCIES`` as a list of dictionary with two keys:
-
-* ``name`` (str) : lowercased name of the toolbox
-* ``commands`` (list of str) : actual names of the commands you need to use
-
-This is simple but powerful as we will see in the following sub-sections.
-
-.. _component_conditional_dependencies:
-
-Handling conditional dependencies
----------------------------------
-
-You might encounter situations where your Marker or Preprocessor needs to have
-option for the user to either use a dependency that comes as a package or
-use a dependency that relies on external toolboxes. With the foundation we laid
-above, it is really simple to solve it while having validation before running
-and letting the user know if some dependency is missing.
-
-Let's look at an actual implementation, in this case :class:`.SpaceWarper`, so
-that it shows the problem a bit better and how we solve it:
-
-.. code-block:: python
-
- class SpaceWarper(BasePreprocessor):
- # docstring
- _CONDITIONAL_DEPENDENCIES: ClassVar[List[Dict[str, Union[str, Type]]]] = [
- {
- "using": "fsl",
- "depends_on": FSLWarper,
- },
- {
- "using": "ants",
- "depends_on": ANTsWarper,
- },
- ]
-
- def __init__(
- self, using: str, reference: str, on: Union[List[str], str]
- ) -> None:
- # validation and setting up
-
-
-Here, you see a new class attribute ``_CONDITIONAL_DEPENDENCIES`` which is a
-list of dictionaries with two keys:
-
-* ``using`` (str) : lowercased name of the toolbox
-* ``depends_on`` (object) : a class which implements the particular tool's use
-
-It is mandatory to have the ``using`` positional argument in the constructor in
-this case as the validation starts with this and moves further. It is also
-mandatory to only allow the value of ``using`` argument to be one of them
-specified in the ``using`` key of ``_CONDITIONAL_DEPENDENCIES`` entries.
-
-For brevity, we only show the ``FSLWarper`` here but ``ANTsWarper`` looks very
-similar. ``FSLWarper`` looks like this (only the relevant part is shown here):
-
-.. code-block:: python
-
- class FSLWarper:
- # docstring
-
- _EXT_DEPENDENCIES: ClassVar[List[Dict[str, Union[str, List[str]]]]] = [
- {
- "name": "fsl",
- "commands": ["flirt", "applywarp"],
- },
- ]
-
- _DEPENDENCIES: ClassVar[Set[str]] = {"numpy", "nibabel"}
-
- def preprocess(
- self,
- input: Dict[str, Any],
- extra_input: Dict[str, Any],
- ) -> Dict[str, Any]:
- # implementation
-
-Here you can see the familiar ``_DEPENDENCIES`` and ``_EXT_DEPENDENCIES`` class
-attributes. The validation process starts by looking up the ``using`` value of
-the ``_CONDITIONAL_DEPENDENCIES`` entries and then retrieves the object pointed
-by ``depends_on``. After that, the ``_DEPENDENCIES`` and ``_EXT_DEPENDENCIES``
-class attributes are checked.
-
-This might be a bit too much to get it right away so feel free to check the code
-for a better understanding. You can also check ``ALFFBase`` for a Marker
-having this pattern.
diff --git a/pr-preview/pr-273/_sources/extending/extension.rst.txt b/pr-preview/pr-273/_sources/extending/extension.rst.txt
deleted file mode 100644
index cc8a624f1..000000000
--- a/pr-preview/pr-273/_sources/extending/extension.rst.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-.. include:: ../links.inc
-
-.. _extending_extension:
-
-Creating a ``junifer`` extension
-================================
-
-``junifer`` is designed to be easily extensible. Through the use of a registry
-and decorators, you can easily add new functionality to ``junifer`` during
-runtime. This is done by creating a new Python module and importing it before
-running ``junifer``.
-
-A special consideration has to be made when using the
-:ref:`code-less configuration`. In this case, the
-``with`` statement can be used to import a module or run a Python file.
-
-In the following example, we instruct ``junifer`` to first import ``my_module``
-and then run the ``my_file.py`` file:
-
-.. code-block:: yaml
-
- with:
- - my_module
- - my_file.py
-
-Thus, the code from ``my_file.py`` will be executed before running ``junifer``.
-This is the ideal place to include ``junifer`` extensions.
-
-.. important::
-
- Some ``junifer`` commands will not consider files imported from files included
- in the ``with`` statement. If ``my_file.py`` imports ``my_other_file.py``,
- some of the ``junifer`` commands will not consider ``my_other_file.py``. Either
- place all the code in one file or add multiple files to the ``with``
- statement.
diff --git a/pr-preview/pr-273/_sources/extending/index.rst.txt b/pr-preview/pr-273/_sources/extending/index.rst.txt
deleted file mode 100644
index ac441aa34..000000000
--- a/pr-preview/pr-273/_sources/extending/index.rst.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-.. include:: ../links.inc
-
-.. _extending:
-
-Extending ``junifer``
-=====================
-
-While we aim to provide as many datasets and markers as possible, we are also
-interested in allowing users to extend the functionality with their own
-DataGrabbers, Preprocessors, Markers, etc., .
-
-It's not necessary to have the new functionality included in ``junifer`` before
-the user can use them. The user can simply create a new Python file, code the
-desired functionality and use it with ``junifer``. This is the first step towards
-including the new functionality in the ``junifer`` pipeline.
-
-In this section we will show how to extend ``junifer``, by creating new
-DataGrabbers, Preprocessors, Markers, etc., following the *junifer* way.
-
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- extension
- datagrabber
- marker
- preprocessor
- dependencies
- parcellations
- coordinates
- masks
diff --git a/pr-preview/pr-273/_sources/extending/marker.rst.txt b/pr-preview/pr-273/_sources/extending/marker.rst.txt
deleted file mode 100644
index 90a8d0c73..000000000
--- a/pr-preview/pr-273/_sources/extending/marker.rst.txt
+++ /dev/null
@@ -1,292 +0,0 @@
-.. include:: ../links.inc
-
-.. _extending_markers:
-
-Creating Markers
-================
-
-Computing a marker (a.k.a. *feature*) is the main goal of ``junifer``. While we
-aim to provide as many Markers as possible, it might be the case that the Marker
-you are looking for is not available. In this case, you can create your own Marker
-by following this tutorial.
-
-Most of the functionality of a ``junifer`` Marker has been taken care by the
-:class:`.BaseMarker` class. Thus, only a few methods are required:
-
-#. ``get_valid_inputs``: The method to obtain the list of valid inputs for the
- Marker. This is used to check that the inputs provided by the user are
- valid. This method should return a list of strings, representing
- :ref:`data types `.
-#. ``get_output_type``: The method to obtain the output type of the Marker.
- This is used to check that the output of the Marker is compatible with the
- storage. This method should return a string, representing
- :ref:`storage types `.
-#. ``compute``: The method that given the data, computes the Marker.
-#. ``__init__``: The initialisation method, where the Marker is configured.
-
-As an example, we will develop a ``ParcelMean`` Marker, a Marker that first
-applies a parcellation and then computes the mean of the data in each parcel.
-This is a very simple example, but it will show you how to create a new Marker.
-
-.. _extending_markers_input_output:
-
-Step 1: Configure input and output
-----------------------------------
-
-This step is quite simple: we need to define the input and output of the Marker.
-Based on the current :ref:`data types `, we can have ``BOLD``,
-``VBM_WM`` and ``VBM_GM`` as valid inputs.
-
-.. code-block:: python
-
- def get_valid_inputs(self) -> list[str]:
- return ["BOLD", "VBM_WM", "VBM_GM"]
-
-The output of the Marker depends on the input. For ``BOLD``, it will be
-``timeseries``, while for the rest of the inputs, it will be ``vector``. Thus,
-we can define the output as:
-
-.. code-block:: python
-
- def get_output_type(self, input_type: str) -> str:
- if input_type == "BOLD":
- return "timeseries"
- else:
- return "vector"
-
-.. _extending_markers_init:
-
-Step 2: Initialise the Marker
------------------------------
-
-In this step we need to define the parameters of the Marker the user can provide
-to configure how the Marker will behave.
-
-The parameters of the Marker are defined in the ``__init__`` method. The
-:class:`.BaseMarker` class requires two optional parameters:
-
-1. ``name``: the name of the Marker. This is used to identify the Marker in the
- configuration file.
-2. ``on``: a list or string with the data types that the Marker will be applied
- to.
-
-.. attention::
-
- Only basic types (*int*, *bool* and *str*), lists, tuples and dictionaries
- are allowed as parameters. This is because the parameters are stored in
- JSON format, and JSON only supports these types.
-
-In this example, only parameter required for the computation is the name of the
-parcellation to use. Thus, we can define the ``__init__`` method as follows:
-
-.. code-block:: python
-
- def __init__(
- self,
- parcellation: str,
- on: str | list[str] | None = None,
- name: str | None = None,
- ) -> None:
- self.parcellation = parcellation
- super().__init__(on=on, name=name)
-
-.. caution::
-
- Parameters of the Marker must be stored as object attributes without using
- ``_`` as prefix. This is because any attribute that starts with ``_`` will
- not be considered as a parameter and not stored as part of the metadata of
- the Marker.
-
-.. _extending_markers_compute:
-
-Step 3: Compute the Marker
---------------------------
-
-In this step, we will define the method that computes the Marker. This method
-will be called by ``junifer`` when needed, using the data provided by the
-DataGrabber, as configured by the user. The method ``compute`` has two
-arguments:
-
-* ``input``: a dictionary with the data to be used to compute the Marker. This
- will be the corresponding element in the :ref:`Data Object`
- already indexed. Thus, the dictionary has at least two keys: ``data`` and
- ``path``. The first one contains the data, while the second one contains the
- path to the data. The dictionary can also contain other keys, depending on the
- data type.
-* ``extra_input``: the rest of the :ref:`Data Object`. This is
- useful if you want to use other data to compute the Marker
- (e.g.: ``BOLD_confounds`` can be used to de-confound the ``BOLD`` data).
-
-Following the example, we will compute the mean of the data in each parcel using
-:class:`nilearn.maskers.NiftiLabelsMasker`. Importantly, the output of the
-compute function must be a dictionary. This dictionary will later be passed onto
-the ``store`` method.
-
-.. hint::
-
- To simplify the ``store`` method, define keys of the dictionary based on the
- corresponding store functions in the :ref:`storage types `.
- For example, if the output is a ``vector``, the keys of the dictionary should
- be ``data`` and ``col_names``.
-
-.. code-block:: python
-
- from typing import Any
-
- from junifer.data import get_parcellation
- from nilearn.maskers import NiftiLabelsMasker
-
-
- def compute(
- self,
- input: dict[str, Any],
- extra_input: dict[str, Any] | None = None,
- ) -> dict[str, Any]:
- # Get the data
- data = input["data"]
-
- # Get the parcellation tailored for the target
- t_parcellation, t_labels, _ = get_parcellation(
- name=self.parcellation_name,
- target_data=input,
- extra_input=extra_input,
- )
-
- # Create a masker
- masker = NiftiLabelsMasker(
- labels_img=t_parcellation,
- standardize=True,
- memory="nilearn_cache",
- verbose=5,
- )
-
- # mask the data
- out_values = masker.fit_transform([data])
-
- # Create the output dictionary
- out = {"data": out_values, "col_names": t_labels}
-
- return out
-
-
-.. _extending_markers_finalize:
-
-Step 4: Finalise the Marker
----------------------------
-
-Once all of the above steps are done, we just need to give our Marker a name,
-state its *dependencies* and register it using the ``@register_marker``
-decorator.
-
-The :ref:`dependencies ` are the core packages that are
-required to compute the Marker. This will be later used to keep track of the
-versions of the packages used to compute the Marker. To inform ``junifer``
-about the dependencies of a Marker, we need to define a ``_DEPENDENCIES``
-attribute in the class. This attribute must be a set, with the names of the
-packages as strings. For example, the ``ParcelMean`` marker has the
-following dependencies:
-
-.. code-block:: python
-
- _DEPENDENCIES = {"nilearn", "numpy"}
-
-Finally, we need to register the Marker using the ``@register_marker`` decorator.
-
-.. code-block:: python
-
- from typing import Any
-
- from junifer.api.decorators import register_marker
- from junifer.data import get_parcellation
- from junifer.markers.base import BaseMarker
- from nilearn.maskers import NiftiLabelsMasker
-
-
- @register_marker
- class ParcelMean(BaseMarker):
-
- _DEPENDENCIES = {"nilearn", "numpy"}
-
- def __init__(
- self,
- parcellation: str,
- on: str | list[str] | None = None,
- name: str | None = None,
- ) -> None:
- self.parcellation = parcellation
- super().__init__(on=on, name=name)
-
- def get_valid_inputs(self) -> list[str]:
- return ["BOLD", "VBM_WM", "VBM_GM"]
-
- def get_output_type(self, input_type: str) -> str:
- if input_type == "BOLD":
- return "timeseries"
- else:
- return "vector"
-
- def compute(
- self,
- input: dict[str, Any],
- extra_input: dict[str, Any] | None = None,
- ) -> dict[str, Any]:
- # Get the data
- data = input["data"]
-
- # Get the parcellation tailored for the target
- t_parcellation, t_labels, _ = get_parcellation(
- name=self.parcellation_name,
- target_data=input,
- extra_input=extra_input,
- )
-
- # Create a masker
- masker = NiftiLabelsMasker(
- labels_img=t_parcellation,
- standardize=True,
- memory="nilearn_cache",
- verbose=5,
- )
-
- # mask the data
- out_values = masker.fit_transform([data])
-
- # Create the output dictionary
- out = {"data": out_values, "col_names": t_labels}
-
- return out
-
-
-.. _extending_markers_template:
-
-Template for a custom Marker
-----------------------------
-
-.. code-block:: python
-
- from junifer.api.decorators import register_marker
- from junifer.markers import BaseMarker
-
-
- @register_marker
- class TemplateMarker(BaseMarker):
-
- def __init__(self, on=None, name=None):
- # TODO: add marker-specific parameters
- super().__init__(on=on, name=name)
-
- def get_valid_inputs(self):
- # TODO: Complete with the valid inputs
- valid = []
- return valid
-
- def get_output_type(self, input_type):
- # TODO: Return the valid output type for each input type
- pass
-
- def compute(self, input, extra_input):
- # TODO: compute the marker and create the output dictionary
-
- # Create the output dictionary
- out = {"data": None, "col_names": None}
- return out
diff --git a/pr-preview/pr-273/_sources/extending/masks.rst.txt b/pr-preview/pr-273/_sources/extending/masks.rst.txt
deleted file mode 100644
index 980d3475b..000000000
--- a/pr-preview/pr-273/_sources/extending/masks.rst.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-.. include:: ../links.inc
-
-.. _adding_masks:
-
-Adding Masks
-============
-
-Many processing steps and Markers in ``junifer`` allow you to specify a binary
-mask to select voxels you want to include in the analysis. There are a number
-of masks :ref:`in-built in junifer already `, so check if any of them
-suit your needs. Check how to use these masks :ref:`here `. Once
-you know how to use these masks, and you checked whether the in-built masks
-suit your needs, and you have found that they don't, you can come back here to
-learn how to use your own masks.
-
-The principle is fairly simple and quite similar to :ref:`adding_parcellations`
-and :ref:`adding_coordinates`. ``junifer`` provides a :func:`.register_mask`
-function that lets you register your own custom masks. It consists of three
-positional arguments (``name``, ``mask_path`` and ``space``) and one optional
-keyword argument (``overwrite``).
-
-The ``name`` argument is a string indicating the name of the mask. This name
-is used to refer to that mask in ``junifer`` internally in order to obtain the
-actual mask data and perform operations on it. For example, using the name you
-can load a mask after registration using the
-:func:`.load_mask` function.
-
-The ``mask_path`` should contain the path to a valid NIfTI image with binary
-voxel values (i.e. 0 or 1). This data can then be used by ``junifer`` to mask
-other MR images.
-
-Lastly, we specify the ``space`` that the coordinates are in, for example,
-``"MNI152NLin6Asym"`` or ``"native"`` (scanner-native space).
-
-Step 1: Prepare code to register a mask
----------------------------------------
-
-A simple script called ``register_custom_mask.py`` to register a mask could
-look as follows:
-
-.. code-block:: python
-
- from pathlib import Path
-
- from junifer.data import register_mask
-
-
- # this path is only an example, of course use the correct path
- # on your system:
- mask_path = Path("..") / ".." / "my_custom_mask.nii.gz"
-
- register_mask(name="my_custom_mask", mask_path=mask_path, space="native")
-
-Simple, right? Now we just have to configure a YAML file to register this mask
-so we can use it for :ref:`codeless configuration of junifer `.
-
-Step 2: Configure a YAML file for registration of a mask
---------------------------------------------------------
-
-In order to do this, we can use the ``with`` keyword provided by ``junifer``:
-
-.. code-block:: yaml
-
- with:
- - register_custom_mask.py
-
-Then we can use this mask for any processing step or Marker that takes in a
-mask as an argument. For example:
-
-.. code-block:: yaml
-
- markers:
- - name: CustomMaskParcelAggregation_mean
- kind: ParcelAggregation
- parcellation: Schaefer200x17
- method: mean
- masks: "my_custom_mask"
-
-Now, you can simply use this YAML file to run your pipeline.
-
-.. important::
-
- It's important to keep in mind that if the paths given in
- ``register_custom_mask.py`` are relative paths, they will be interpreted
- by junifer as relative to the jobs directory (i.e. where ``junifer`` will
- create submit files, logs directory and so on). For simplicity, you may just
- want to use absolute paths to avoid confusion, yet using relative paths is
- likely a better way to make your pipeline directory / repository more portable
- and therefore more reproducible for others. Really, once you understand how
- paths are interpreted by ``junifer``, it is quite easy.
diff --git a/pr-preview/pr-273/_sources/extending/parcellations.rst.txt b/pr-preview/pr-273/_sources/extending/parcellations.rst.txt
deleted file mode 100644
index 6c1a197cd..000000000
--- a/pr-preview/pr-273/_sources/extending/parcellations.rst.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-.. include:: ../links.inc
-
-.. _adding_parcellations:
-
-Adding Parcellations
-====================
-
-Before you start adding your own parcellations, check whether ``junifer`` has
-the parcellation :ref:`in-built already `. Perhaps, what is available
-there will suffice to achieve your goals. However, of course ``junifer`` will not
-have every parcellation available that you may want to use, and if so, it will
-be nice to be able to add it yourself using a format that ``junifer`` understands.
-Similarly, you may even be interested in creating your own custom parcellations
-and then adding them to ``junifer``, so you can use ``junifer`` to obtain
-different Markers to assess and validate your own parcellation. So, how can you do
-this?
-
-Since both of these use-cases are quite common, and not being able to use your
-favourite parcellation is of course quite a buzzkill, ``junifer`` actually
-provides the easy-to-use :func:`.register_parcellation` function to do just that.
-Let's try to understand the API reference and then use this function to register our
-own parcellation.
-
-From the API reference, we can see that it has 4 positional arguments
-(``name``, ``parcellation_path``, ``parcels_labels`` and ``space``) as well as
-one optional keyword argument (``overwrite``).
-
-The ``name`` of the parcellation is up to you and will be the name that
-``junifer`` will use to refer to this particular parcellation. You can think of
-this as being similar to a key in a Python dictionary, i.e. a key that is used to
-obtain and operate on the actual parcellation data. This ``name`` must always
-be a string. For example, we could call our parcellation
-``"my_custom_parcellation"`` (Note, that in a real-world use case this is
-likely not a good name, and you should try to choose a meaningful name that
-conveys as much relevant information about your parcellation as necessary).
-
-The ``parcellation_path`` must be a ``str`` or ``Path`` object indicating a
-path to a valid NIfTI image, which contains integer labels indicating the
-individual regions-of-interest (ROIs) of your parcellation. The background in
-this parcellation should be indicated by 0, and the labels of ROIs should go
-from 1 to N (where N is the total number of ROIs in your parcellation). Now,
-we nearly have everything we need.
-
-We also want to make sure that we can associate each integer label with
-a human readable name (i.e. the name for each ROI). This serves naming the
-features that parcellation-based markers produce in an unambiguous way, such
-that a user can easily identify which ROIs were used to produce a specific
-feature (multiple ROIs, because some features consist of information from two
-or more ROIs, as for example in functional connectivity). Therefore, we provide
-junifer with a list of strings, that contains the names for each ROI. In this
-list, the label at the i-th position indicates the i-th integer label (i.e. the
-first label in this list corresponds to the first integer label in the
-parcellation and so on).
-
-Lastly, we specify the ``space`` that the parcellation is in, for example,
-``"MNI152NLin2009cAsym"`` or ``"native"`` (scanner-native space).
-
-Step 1: Prepare code to register a parcellation
------------------------------------------------
-
-Now we know everything that we need to know to make sure ``junifer`` can use our
-own parcellation to compute any parcellation-based Marker. A simple example could
-look like this:
-
-.. code-block:: python
-
- from junifer.data import register_parcellation
-
- from pathlib import Path
- import numpy as np
-
- # these are of course just example paths, replace it with your own:
- path_to_parcellation = (
- Path("..") / ".." / "parcellations" / "my_custom_parcellation.nii.gz"
- )
- path_to_labels = (
- Path("..") / ".." / "labels" / "my_custom_parcellation_labels.txt"
- )
-
- my_labels = list(np.loadtxt(path_to_labels, dtype=str))
-
- register_parcellation(
- name="my_custom_parcellation",
- parcellation_path=path_to_parcellation,
- parcels_labels=my_labels,
- space="MNI152NLin2009cAsym"
- )
-
-We can run this code and it seems to work, however, how can we actually
-include the custom parcellation in a ``junifer`` pipeline using a
-:ref:`code-less YAML configuration `?
-
-Step 2: Add parcellation registration to the YAML file
-------------------------------------------------------
-
-In order to use the parcellation in a ``junifer`` pipeline configured by a YAML
-file, we can save the above code in a Python file, say
-``registering_my_parcellation.py``. We can then simply add this file using the
-``with`` keyword provided by ``junifer``:
-
-.. code-block:: yaml
-
- with:
- - registering_my_parcellation.py
-
-Afterwards continue configuring the rest of the pipeline in this YAML file, and
-you will be able to use this parcellation using the name you gave the
-parcellation when registering it. For example, we can add a
-:class:`.ParcelAggregation` Marker to demonstrate how this can be done:
-
-.. code-block:: yaml
-
- markers:
- - name: CustomParcellation_mean
- kind: ParcelAggregation
- parcellation: my_custom_parcellation
- method: mean
-
-Now, you can simply use this YAML file to run your pipeline.
-
-.. important::
-
- It's important to keep in mind that if the paths given in
- ``registering_my_parcellation.py`` are relative paths, they will be interpreted
- by ``junifer`` as relative to the jobs directory (i.e. where ``junifer`` will
- create submit files, logs directory and so on). For simplicity, you may just
- want to use absolute paths to avoid confusion, yet using relative paths is
- likely a better way to make your pipeline directory / repository more portable
- and therefore more reproducible for others. Really, once you understand how
- these paths are interpreted by ``junifer``, it is quite easy.
diff --git a/pr-preview/pr-273/_sources/extending/preprocessor.rst.txt b/pr-preview/pr-273/_sources/extending/preprocessor.rst.txt
deleted file mode 100644
index e94c6f3df..000000000
--- a/pr-preview/pr-273/_sources/extending/preprocessor.rst.txt
+++ /dev/null
@@ -1,246 +0,0 @@
-.. include:: ../links.inc
-
-.. _extending_preprocessors:
-
-Creating Preprocessors
-======================
-
-As already mentioned in the introduction, ``junifer`` does not do traditional
-MRI pre-processing but can perform minimal preprocessing of the data that the
-DataGrabber provides, for example, smoothing after confound regression or
-transforming data to subject-native space before feature extraction. While
-there are a few Preprocessors available already and we are constantly adding
-new ones, you might need something specific and then you can create your
-own Preprocessor.
-
-While implementing your own Preprocessor, you need to always inherit from
-:class:`.BasePreprocessor` and implement a few methods:
-
-#. ``get_valid_inputs``: This method should return a list of strings
- representing the valid data types that the Preprocessor can work on.
- Check :ref:`data types ` for reference.
-#. ``get_output_type``: This method should just return the input as it
- is unused as of now.
-#. ``preprocess``: The method that given the data, preprocesses the data.
-#. ``__init__``: The initialisation method, where the Preprocessor is
- configured.
-
-As an example, we will develop a ``NilearnSmoothing`` Preprocessor, which
-smoothens the data using :func:`nilearn.image.smooth_img`. This is often
-desirable in cases where your data is preprocessed using ``fMRIPrep``, as
-``fMRIPrep`` does not perform smoothing.
-
-.. _extending_preprocessors_input_output:
-
-Step 1: Configure input and output
-----------------------------------
-
-In this step, we define the input and output data types of the Preprocessor.
-For input we can accept ``T1w``, ``T2w`` and ``BOLD``
-:ref:`data types `.
-
-.. code-block:: python
-
- ...
-
- def get_valid_inputs(self) -> list[str]:
- return ["T1w", "T2w", "BOLD"]
-
- ...
-
-The output definition of the Preprocessor is unused now but is kept for
-completeness.
-
-.. code-block:: python
-
- ...
-
- def get_output_type(self, input_type: str) -> str:
- return input_type
-
- ...
-
-.. _extending_preprocessors_init:
-
-Step 2: Initialise the Preprocessor
------------------------------------
-
-Now we need to define our Preprocessor class' constructor which is also how
-you configure it. Our class will have the following arguments:
-
-1. ``fwhm``: The smoothing strength as a full-width at half maximum
- (in millimetres). Since we depend on :func:`nilearn.image.smooth_img`, we
- pass the value to it.
-2. ``on``: The data type we want the Preprocessor to work on. If the user does
- not specify, it will work on all the data types given by the
- ``get_valid_inputs`` function.
-
-.. attention::
-
- Only basic types (*int*, *bool* and *str*), lists, tuples and dictionaries
- are allowed as parameters. This is because the parameters are stored in
- JSON format, and JSON only supports these types.
-
-.. code-block:: python
-
- from typing import Literal
-
- from numpy.typing import ArrayLike
-
-
- ...
-
- def __init__(
- self,
- fwhm: int | float | ArrayLike | Literal["fast"] | None,
- on: str | list[str] | None = None,
- ) -> None:
- self.fwhm = fwhm
- super().__init__(on=on)
-
- ...
-
-.. caution::
-
- Parameters of the Preprocessor must be stored as object attributes without
- using ``_`` as prefix. This is because any attribute that starts with ``_``
- will not be considered as a parameter and not stored as part of the metadata
- of the Preprocessor.
-
-.. _extending_preprocessors_preprocess:
-
-Step 3: Preprocess the data
----------------------------
-
-Finally, we will write the actual logic of the Preprocessor. This method will
-be called by ``junifer`` when needed, using the data provided by the
-DataGrabber, as configured by the user. The method ``preprocess`` has two
-arguments:
-
-* ``input``: A dictionary with the data to be used by the Preprocessor. This
- will be the corresponding element in the :ref:`Data Object`
- already indexed. Thus, the dictionary has at least two keys: ``data`` and
- ``path``. The first one contains the data, while the second one contains the
- path to the data. The dictionary can also contain other keys, depending on the
- data type.
-* ``extra_input``: The rest of the :ref:`Data Object`. This is
- useful if you want to use other data (e.g., ``Warp`` can be used to provide
- the transformation matrix file for transformation to subject-native space).
-
-and it has two return values:
-
-* First is the ``input`` dictionary with necessary data modified. Usually, you
- want to replace the ``input["data"]`` with the preprocessed data.
-* Second is a dictionary just like ``input`` or ``extra_input`` but with only
- specific key-value pairs which you would like to pass down to the Markers.
- For example, if your Preprocessor computes some mask with the preprocessed
- data, you could pass it through this which would be added and available
- in the Marker step with the same key you pass here. Usually, you would
- want to pass ``None``.
-
-.. code-block:: python
-
- from typing import Any
-
- from nilearn import image as nimg
-
-
- ...
-
- def preprocess(
- self,
- input: dict[str, Any],
- extra_input: dict[str, Any] | None = None,
- ) -> tuple[dict[str, Any], dict[str, Any] | None]:
- input["data"] = nimg.smooth_img(imgs=input["data"], fwhm=self.fwhm)
- return input, None
-
- ...
-
-Step 4: Finalise the Preprocessor
----------------------------------
-
-Now we just need to combine everything we have above and throw in a couple of
-other stuff to get our Preprocessor ready.
-
-First, we specify the :ref:`dependencies ` for our
-class, which are basically the packages that are required by the class. This is
-used for validation before running to ensure all the packages are installed and
-also to keep track of the dependencies and their versions in the metadata. We
-define it using a class attribute like so:
-
-.. code-block:: python
-
- _DEPENDENCIES = {"nilearn"}
-
-Then, we just need to register the Preprocessor using ``@register_preprocessor``
-decorator and our final code should look like this:
-
-.. code-block:: python
-
- from typing import Any, Literal
-
- from junifer.api.decorators import register_preprocessor
- from junifer.preprocess import BasePreprocessor
-
- from nilearn import image as nimg
- from numpy.typing import ArrayLike
-
-
- @register_preprocessor
- class NilearnSmoothing(BasePreprocessor):
-
- _DEPENDENCIES = {"nilearn"}
-
- def __init__(
- self,
- fwhm: int | float | ArrayLike | Literal["fast"] | None,
- on: str | list[str] | None = None,
- ) -> None:
- self.fwhm = fwhm
- super().__init__(on=on)
-
- def get_valid_inputs(self) -> list[str]:
- return ["T1w", "T2w", "BOLD"]
-
- def get_output_type(self, input_type: str) -> str:
- return input_type
-
- def preprocess(
- self,
- input: dict[str, Any],
- extra_input: dict[str, Any] | None = None,
- ) -> tuple[dict[str, Any], dict[str, Any] | None]:
- input["data"] = nimg.smooth_img(imgs=input["data"], fwhm=self.fwhm)
- return input, None
-
-
-.. _extending_preprocessors_template:
-
-Template for a custom Preprocessor
-----------------------------------
-
-.. code-block:: python
-
- from junifer.api.decorators import register_preprocessor
- from junifer.preprocess import BasePreprocessor
-
-
- @register_preprocessor
- class TemplatePreprocessor(BasePreprocessor):
-
- def __init__(self, on=None):
- # TODO: add preprocessor-specific parameters
- super().__init__(on=on)
-
- def get_valid_inputs(self):
- # TODO: Complete with the valid inputs
- valid = []
- return valid
-
- def get_output_type(self, input_type):
- return input_type
-
- def preprocess(self, input, extra_input):
- # TODO: add the preprocessor logic
- return input, None
diff --git a/pr-preview/pr-273/_sources/faq.rst.txt b/pr-preview/pr-273/_sources/faq.rst.txt
deleted file mode 100644
index 0a7a7a5dc..000000000
--- a/pr-preview/pr-273/_sources/faq.rst.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-.. include:: links.inc
-
-FAQs
-====
-
-How do I contribute to junifer?
--------------------------------
-Please follow the :ref:`contribution guidelines `.
-
-
-How do I set up VSCode for contribution?
-----------------------------------------
-
-The :ref:`contribution guidelines `
-apply in general when using VSCode as your IDE as well.
-
-The following steps are specific to VSCode and you can choose to go with it:
-
-1. After forking the repository on GitHub, you can clone the forked repository
- using the internal version control tool.
-
-2. We recommend using ``conda`` to create your virtual environment
-
- .. code-block:: bash
-
- conda env create -n -f conda-env.yml
- conda activate
-
- The ``conda-env.yml`` can be found at the root of the repository.
-
-The required development tools should be installed and you should be good to go.
diff --git a/pr-preview/pr-273/_sources/help.rst.txt b/pr-preview/pr-273/_sources/help.rst.txt
deleted file mode 100644
index 39c65de0d..000000000
--- a/pr-preview/pr-273/_sources/help.rst.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-.. include:: links.inc
-
-.. _help:
-
-Getting Help
-============
-
- | Help! I need somebody
- | Help! not just anybody
- | Help! you know I need someone
- | Help!
-
- -- The Beatles, Help!
-
-This fragment of the song originally appeared in the 1965 film Help! and was
-written by Lennon and McCartney, just a few years after the development of
-Mark 1, the first commercial computer. Maybe just a random coincidence, or maybe
-Lennon was just trying to write an email to McCartney.
-
-While the song might have been written with another meaning in mind, it is a good
-way to describe the situation of many researchers who are presented with a new
-toolbox. Indeed, the situation of many researchers is that the projects they are
-working on are becoming more and more complex in terms of methods and data. Thus,
-we *open up the doors* to new possibilities:
-
- | When I was younger, so much younger than today
- | I never needed anybody's help in any way
- | But now these days are gone, I'm not so self assured
- | Now I find I've changed my mind and opened up the doors
-
- -- The Beatles, Help!
-
-The setback with modern research is that current methods are often more complex
-and require more computing, which means that we need to learn concepts from
-computer science, mathematics, statistics, etc. This is a good thing, but it
-also means that we need to learn new tools and new ways of thinking, which can be
-a bit overwhelming, to the point that we start relying more and more on other
-researchers. In the end, we might feel like we lose our independence:
-
- | And now my life has changed in oh so many ways
- | My independence seems to vanish in the haze
- | But every now and then I feel so insecure
- | I know that I just need you like I've never done before
-
- -- The Beatles, Help!
-
-We can continue with the song, but we think you get the point. The point is that
-we will need help, and we will need to ask for it. We will need to ask for help
-from our colleagues, from our supervisors, from our friends.
-
-We are a small team of researchers and developers, and we are not experts in
-*everything at once*. Each one of us has a specific expertise, and we are trying
-to use this expertise to create Junifer. When we conceived Junifer, we thought
-of researchers' problems and tried to come up with the best way to help them, by
-building a tool that is easy to understand, learn and use. Most importantly, we
-made it to help. We are here to help you and your research.
-
-If you have any questions, problems and / or suggestions, please do not hesitate
-to contact us. We will be happy to help you and we will be happy to hear from
-you.
-
-Seems nice, no? But we have one condition: **help us help you**.
-
-Communication is the key for you to help us and in turn help you solve your
-problems. We cannot know what you are trying to do, unless you tell us.
-**The more detailed explanation you give us, the faster we can help you**.
-We have opened several communication channels so that you can contact us in
-the way that is most convenient for you.
-
-Some people prefer to **write, in detail, with code and figures**. If you are
-one of those, use the `junifer Discussions`_. site on GitHub. This is a place
-where you can ask questions, and where you can discuss topics such as
-potential new features, or potential new methods.
-
-Some people do **not have a clear idea of what they want**, but they know that
-they need help. This is not a problem, but it is a bit more involved. Since it
-will require more frequent interactions to try to understand what you are trying
-to do, we have the `junifer matrix channel`_ in which you can chat with us and
-other junifer users.
-
-Finally, some people **prefer to communicate verbally**. If you are one of those,
-you might want to join our *office hours*. Given that our agenda might vary,
-office hours will be announced on the `junifer matrix channel`_ chat. Feel free
-to join and just *listen in* if you are too shy to write.
-
-In short, these are the 3 communication channels to get help:
-
-#. Discussions on Github (`junifer Discussions`_):
-
- Pros:
-
- * You can write your question in detail.
- * Your question will not get mixed with other conversations.
- * Likely to be the fastest way to solve the issue in the long-run.
-
- Cons:
-
- * You need to write your question in detail.
-
-#. Chat (`junifer matrix channel`_):
-
- Pros:
-
- * You can ask questions in real-time.
- * You can including code and figures in your question.
-
- Cons:
-
- * Real-time depends on the availability of the other users.
- * It might be difficult to follow if several conversation happens at the same
- time.
-
-#. Video Calls (*office hours*)
-
- Pros:
-
- * You can get real-time feedback.
- * You will get our undivided attention (no overlapping discussions).
-
- Cons:
-
- * We can't read or write code, or even propose solutions for you to test.
- * You will need to wait for the next *office hour*.
diff --git a/pr-preview/pr-273/_sources/index.rst.txt b/pr-preview/pr-273/_sources/index.rst.txt
deleted file mode 100644
index f267fcee9..000000000
--- a/pr-preview/pr-273/_sources/index.rst.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-.. include:: links.inc
-
-.. image:: images/junifer_logo.png
- :width: 300px
- :alt: junifer logo
-
-Welcome to junifer's documentation!
-===================================
-
-junifer (JUelich NeuroImaging FEature extractoR) is a data handling and feature
-extraction library targeted towards neuroimaging data specifically functional
-MRI data.
-
-It is currently being developed and maintained at the Applied Machine Learning
-(`AML`_) group at Forschungszentrum Juelich, Germany. Although the library is
-designed for people working at Institute of Neuroscience and Medicine - Brain
-and Behaviour (`INM-7`_), it is designed to be as modular as possible thus
-enabling others to extend it easily.
-
-.. toctree::
- :numbered: 3
- :maxdepth: 2
- :caption: Contents:
-
- installation
- starting
- understanding/index.rst
- using/index.rst
- builtin
- extending/index.rst
- auto_examples/index.rst
- api/index.rst
- help
- contribution
- maintaining
- faq
- whats_new
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
-
-Funding
-=======
-
-We thank the `Helmholtz Imaging Platform `_,
-`SMHB `_ and
-`eBRAIN Health `_ (HORIZON-INFRA-2021-TECH-01)
-for supporting development of ``junifer``.
-(The funding sources had no role in the design, implementation and evaluation of
-the pipeline.)
diff --git a/pr-preview/pr-273/_sources/installation.rst.txt b/pr-preview/pr-273/_sources/installation.rst.txt
deleted file mode 100644
index 26f78e902..000000000
--- a/pr-preview/pr-273/_sources/installation.rst.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-.. include:: links.inc
-
-Installing ``junifer``
-======================
-
-Depending on your use-case, ``junifer`` can be installed differently:
-
-* Install the :ref:`latest stable release `. This is the most suitable approach
- for end users.
-* Install from :ref:`latest development release `. This is the most suitable approach
- for developers.
-
-
-Either way, we strongly recommend using
-`virtual environments `_.
-
-
-.. _install_latest_release:
-
-Using a package manager
------------------------
-
-Use ``pip`` to install ``junifer`` from `PyPI `_, like so:
-
-.. code-block:: bash
-
- pip install junifer
-
-You can also install via ``conda``, like so:
-
-.. code-block:: bash
-
- conda install -c conda-forge junifer
-
-.. attention::
-
- Installation on macOS and Windows might fail via ``conda`` due to ``datalad``.
- In that case, please refer to
- `Datalad installation instructions
- `_ for solutions.
- In case the problem persists, please install it via ``pip`` as mentioned earlier.
-
-.. _install_development_git:
-
-From the source
----------------
-
-Follow the `detailed contribution guidelines `_.
-
-
-.. _installation_ext:
-
-Installing external dependencies
-================================
-
-Some preprocessors and markers will require optional external dependencies to
-be installed. In this section you will find a list of all external dependencies
-that are required for specific markers.
-
-.. important::
-
- The Docker container wrappers add the commands required by ``junifer``. Using
- these commands have some limitations, mostly related to handling files and
- paths. ``junifer`` knows about this and uses these commands in the proper way.
- Keep this in mind if you try to use the Docker wrappers outside of
- ``junifer``. These caveats and limitations are not documented.
-
-AFNI
-----
-
-To install AFNI, you can always follow the `AFNI official instructions
-`_.
-Additionally, you can also follow the following steps to install and configure
-the AFNI Docker container in your local system.
-
-1. Install Docker. You can follow the
- `Docker official instructions `_.
-2. Pull the AFNI Docker image from
- `Docker Hub AFNI `_:
-
-.. code-block:: bash
-
- docker pull afni/afni_make_build
-
-3. Add the Junifer AFNI scripts to your PATH environment variable. Run the
- following command:
-
-.. code-block:: bash
-
- junifer setup afni-docker
-
-Take the last line and copy it to your ``.bashrc`` or ``.zshrc`` file.
-
-Or, alternatively, you can execute this command which will update the
-``~/.bashrc`` for you:
-
-.. code-block:: bash
-
- junifer setup afni-docker | grep "PATH=" | xargs | >> ~/.bashrc
-
-FSL
----
-
-To install FSL, you can always follow the `FSL official instructions
-`_.
-Additionally, you can also follow the following steps to install and configure
-the FSL Docker container in your local system.
-
-1. Install Docker. You can follow the
- `Docker official instructions `_.
-2. Pull the FSL Docker image from
- `Docker Hub FSL `_:
-
-.. code-block:: bash
-
- docker pull brainlife/fsl
-
-3. Add the Junifer FSL scripts to your PATH environment variable. Run the
- following command:
-
-.. code-block:: bash
-
- junifer setup fsl-docker
-
-Take the last line and copy it to your ``.bashrc`` or ``.zshrc`` file.
-
-Or, alternatively, you can execute this command which will update the
-``~/.bashrc`` for you:
-
-.. code-block:: bash
-
- junifer setup fsl-docker | grep "PATH=" | xargs | >> ~/.bashrc
-
-ANTs
-----
-
-To install ANTs, you can always follow the `ANTs official instructions
-`_. Additionally, you can also follow the
-following steps to install and configure the ANTs Docker container in your
-local system.
-
-1. Install Docker. You can follow the
- `Docker official instructions `_.
-2. Pull the ANTs Docker image from
- `Docker Hub ANTs `_:
-
-.. code-block:: bash
-
- docker pull antsx/ants
-
-3. Add the Junifer ANTs scripts to your PATH environment variable. Run the
- following command:
-
-.. code-block:: bash
-
- junifer setup ants-docker
-
-Take the last line and copy it to your ``.bashrc`` or ``.zshrc`` file.
-
-Or, alternatively, you can execute this command which will update the
-``~/.bashrc`` for you:
-
-.. code-block:: bash
-
- junifer setup ants-docker | grep "PATH=" | xargs | >> ~/.bashrc
diff --git a/pr-preview/pr-273/_sources/maintaining.rst.txt b/pr-preview/pr-273/_sources/maintaining.rst.txt
deleted file mode 100644
index 2f0122b05..000000000
--- a/pr-preview/pr-273/_sources/maintaining.rst.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-.. include:: links.inc
-
-Maintaining
-===========
-
-Versioning
-----------
-
-Version numbers are as follows: *MAJOR.MINOR.MICRO*. Additionally,
-development version append *devN* where N is the distance (in commits) to
-the last release.
-
-This is done automatically by `setuptools_scm`_.
-
-This plugin reads the latest tagged version from git and automatically
-increments the *MICRO* segment and appends *devN*. This is considered a
-pre-release.
-
-The CI scripts will publish every tag with the format *v.X.Y.Z* to PyPI as
-version "X.Y.Z". Additionally, for every push to main, it will be published
-as pre-release to PyPI.
-
-Releasing a new version
------------------------
-
-Once the milestone is reached (all issues closed), it is time to do a new
-release. Make sure you have
-`towncrier `_ installed
-before proceeding.
-
-#. Make sure you are in sync with the main branch.
-
- .. code-block:: bash
-
- git checkout main
- git pull --rebase origin main
-
-#. Run the following to check changelog is properly generated:
-
- .. code-block:: bash
-
- towncrier build --draft
-
-#. Then, run:
-
- .. code-block:: bash
-
- towncrier
-
- to generate the proper changelog that should be reflected in
- ``docs/whats_new.rst``.
-
-#. Commit the changes, make a PR and merge via a merge commit.
-
-#. Make sure you are in sync with the main branch.
-
- .. code-block:: bash
-
- git checkout main
- git pull --rebase origin main
-
-#. Create tag (replace ``X.Y.Z`` with the proper version) on the merged PR's
- merge commit.
-
- .. code-block:: bash
-
- git tag -a vX.Y.Z -m "Release X.Y.Z"
-
-#. Check that the build system is creating the proper version
-
- .. code-block:: bash
-
- SETUPTOOLS_SCM_DEBUG=1 python -m build --outdir dist/ .
-
-#. Push the tag
-
- .. code-block:: bash
-
- git push origin --follow-tags
-
-#. Optional: bump the *MAJOR* or *MINOR* segment of next release (replace
- ``D.E.0`` with the proper version).
-
- .. code-block:: bash
-
- git tag -a vD.E.0.dev -m "Set next release to D.E.0"
- git push origin --follow-tags
diff --git a/pr-preview/pr-273/_sources/starting.rst.txt b/pr-preview/pr-273/_sources/starting.rst.txt
deleted file mode 100644
index d09bcb20c..000000000
--- a/pr-preview/pr-273/_sources/starting.rst.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-.. include:: links.inc
-
-.. _starting:
-
-First steps with ``junifer``
-============================
-
-.. note::
-
- To scroll the graph left and right, click on the graph and use the arrows on your keyboard.
-
-.. mermaid::
-
- flowchart TD
- start((( Start )))
- read_understanding(Read Understanding junifer)
- start --> read_understanding
- question_features{Can I compute\nthe features I want\nusing junifer?}
- read_understanding --> question_features
- question_features -->|Yes| read_using_final
- question_features -->|I'm not sure| read_using
- question_features -->|No| question_feature_type
- read_using --> question_features
-
- read_using(Read Using junifer)
-
- question_feature_type{"What am I missing\nfrom junifer"}
- question_feature_type --> missing_datagrabber
- question_feature_type --> missing_preprocessing
- question_feature_type --> missing_marker
- question_feature_type --> missing_other
- missing_datagrabber("A Dataset/DataGrabber")
- missing_preprocessing("A Preprocessor")
- missing_marker("A Marker")
- missing_other("Something else")
-
- missing_datagrabber --> question_datagrabber_junifarm
- question_datagrabber_junifarm{Is the\ndataset/datagrabber\nin juni-farm?}
- question_datagrabber_junifarm -->|Yes| read_using_final
- question_datagrabber_junifarm -->|No| read_extending_datagrabber_start
- read_extending_datagrabber_start(Read Creating a junifer extension)
- read_extending_datagrabber_start --> read_extending_datagrabber
- read_extending_datagrabber(Read Creating Data Grabbers)
- read_extending_datagrabber --> question_datagrabber_kind
- question_datagrabber_kind{Is your dataset\na datalad one?}
- question_datagrabber_kind -->|Yes| extend_datagrabber_datalad
- question_datagrabber_kind -->|No| extend_datagrabber_pattern
- extend_datagrabber_pattern(Use\nPatternDataGrabber)
- extend_datagrabber_datalad(Use\nPatternDataladDataGrabber)
- extend_datagrabber_pattern --> question_datagrabber_solved
- extend_datagrabber_datalad --> question_datagrabber_solved
- question_datagrabber_solved{Can you use\nyour data now?}
- question_datagrabber_solved -->|Yes| question_contribute_datagrabber
- question_datagrabber_solved -->|No| contact_help
- question_contribute_datagrabber{Do you think\nyour DataGrabber\nis useful for other users?}
- question_contribute_datagrabber -->|Yes| contribute_datagrabber
- question_contribute_datagrabber -->|No| final_run
- contribute_datagrabber(Create a\nDATASET REQUEST\nissue on GitHub)
- contribute_datagrabber --> final_run
-
- missing_marker --> question_marker_junifarm
- question_marker_junifarm{Is the marker\nin juni-farm?}
- question_marker_junifarm -->|Yes| read_using_final
- question_marker_junifarm -->|No| read_extending_marker_start
- read_extending_marker_start(Read Creating a junifer extension)
- read_extending_marker_start --> read_extending_marker
- read_extending_marker(Read Creating Markers)
- read_extending_marker --> question_marker_solved
- question_marker_solved{Can you use\nyour marker now?}
- question_marker_solved -->|Yes| question_contribute_marker
- question_marker_solved -->|No| contact_help
- question_contribute_marker{Do you think\nyour Marker\nis useful for other users?}
- question_contribute_marker -->|Yes| contribute_marker
- question_contribute_marker -->|No| final_run
- contribute_marker(Create a\nMARKER REQUEST\nissue on GitHub)
- contribute_marker --> final_run
-
- missing_preprocessing --> contact_help
-
- missing_mask{"A Mask?"}
- missing_parcellation{"A Parcellation?"}
- missing_coordinates{"Coordinates?"}
- missing_other_other{"Something else?"}
- missing_other --> missing_mask
- missing_other --> missing_parcellation
- missing_other --> missing_coordinates
- missing_other --> missing_other_other
- missing_other_other --> contact_help
-
- contact_help(((Contact the\njunifer team)))
-
- missing_mask --> read_adding_mask_start
- read_adding_mask_start("Read Creating a junifer extension")
- read_adding_mask_start --> read_adding_mask
- read_adding_mask("Read Adding Masks")
- read_adding_mask --> missing_other_solved
-
- missing_parcellation --> read_adding_parcellation_start
- read_adding_parcellation_start("Read Creating a junifer extension")
- read_adding_parcellation_start --> read_adding_parcellation
- read_adding_parcellation("Read Adding Parcellations")
- read_adding_parcellation --> missing_other_solved
-
- missing_coordinates --> read_adding_coordinates_start
- read_adding_coordinates_start("Read Creating a junifer extension")
- read_adding_coordinates_start --> read_adding_coordinates
- read_adding_coordinates("Read Adding Coordinates")
- read_adding_coordinates --> missing_other_solved
-
- missing_other_solved{Did you solve your issue?}
- missing_other_solved -->|Yes| read_using_final
- missing_other_solved -->|No| missing_other_contact
- missing_other_contact(Contact the\njunifer team)
- missing_other_contact --> missing_other_issue
- missing_other_issue(((Submit a\nFEATURE REQUEST\nissue in GitHub)))
-
- read_using_final(Read Using junifer)
- read_using_final --> final_yaml
- final_yaml(Create/edit the YAML file)
- final_yaml --> final_run
- final_run(Use junifer run to test your YAML configuration)
- final_run --> question_final_run_worked
- question_final_run_worked{"Did it work?"}
- question_final_run_worked -->|No| question_error_run
- question_error_run{"Is it an issue\nwith my YAML file?"}
- question_error_run -->|Yes| final_yaml
- question_error_run -->|No| error_contact
- error_contact(Contact the\njunifer team)
- error_contact --> error_issue
- error_issue(((Submit a\nBUG REPORT issue\nin GitHub)))
- question_final_run_worked -->|Yes| final_queue
- final_queue(Use junifer queue to compute your features)
- final_queue --> final_magic
- final_magic(((Let junifer do its magic!)))
-
- click read_understanding href "https://juaml.github.io/junifer/main/understanding/index.html"
- click read_using href "https://juaml.github.io/junifer/main/using/index.html"
- click read_using_final href "https://juaml.github.io/junifer/main/using/index.html"
- click read_extending_datagrabber_start href "https://juaml.github.io/junifer/main/extending/extension.html"
- click read_extending_datagrabber href "https://juaml.github.io/junifer/main/extending/datagrabber.html"
- click read_extending_marker_start href "https://juaml.github.io/junifer/main/extending/extension.html"
- click read_extending_marker href "https://juaml.github.io/junifer/main/extending/marker.html"
- click read_adding_mask_start href "https://juaml.github.io/junifer/main/extending/extension.html"
- click read_adding_mask href "https://juaml.github.io/junifer/main/extending/masks.html"
- click read_adding_parcellation_start href "https://juaml.github.io/junifer/main/extending/extension.html"
- click read_adding_parcellation href "https://juaml.github.io/junifer/main/extending/parcellations.html"
- click read_adding_coordinates_start href "https://juaml.github.io/junifer/main/extending/extension.html"
- click read_adding_coordinates href "https://juaml.github.io/junifer/main/extending/coordinates.html"
-
- click error_issue href "https://github.com/juaml/junifer/issues/new/choose" _blank
- click missing_other_issue href "https://github.com/juaml/junifer/issues/new/choose" _blank
- click contribute_marker href "https://github.com/juaml/junifer/issues/new/choose" _blank
- click contribute_datagrabber href "https://github.com/juaml/junifer/issues/new/choose" _blank
-
- click error_contact href "https://juaml.github.io/junifer/main/help.html"
- click contact_help href "https://juaml.github.io/junifer/main/help.html"
- click missing_other_contact href "https://juaml.github.io/junifer/main/help.html"
diff --git a/pr-preview/pr-273/_sources/understanding/data.rst.txt b/pr-preview/pr-273/_sources/understanding/data.rst.txt
deleted file mode 100644
index f71c8bb0c..000000000
--- a/pr-preview/pr-273/_sources/understanding/data.rst.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-.. include:: ../links.inc
-
-.. _data_object:
-
-The Data Object
-===============
-
-Description
------------
-
-This is the *object* that traverses the steps of the pipeline. It is indeed a
-dictionary of dictionaries. The first level of keys are the :ref:`data types `
-and the values are the corresponding information as dictionaries.
-
-.. code-block:: python
-
- {'BOLD': {...}, 'T1w': {...}}
-
-The second level of keys are the actual data. A special second-level key named
-``meta`` is present in each step, that contains all the information on the
-data type including source and previous transformation steps.
-
-The :ref:`Data Grabber ` step adds the ``path`` second-level key
-which gives the path to the file containing the data. The ``meta`` key in this
-step only contains information about the DataGrabber used.
-
-.. code-block:: python
-
- {'BOLD': {'meta': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber',
- 'types': ['BOLD', 'T1w']},
- 'dependencies': set(),
- 'element': {'subject': 'sub001'}},
- 'path': PosixPath('/var/folders/dv/2lbr8f8j0q12zrx3mz3ll5m40000gp/T/tmpgxcyjfo1/sub001_bold.nii.gz')},
- 'T1w': {'meta': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber',
- 'types': ['BOLD', 'T1w']},
- 'dependencies': set(),
- 'element': {'subject': 'sub001'}},
- 'path': PosixPath('/var/folders/dv/2lbr8f8j0q12zrx3mz3ll5m40000gp/T/tmpgxcyjfo1/sub001_T1w.nii.gz')}}
-
-The :ref:`Data Reader ` step adds the ``data`` second-level key
-which is the actual data loaded into memory. The ``meta`` key in this step
-adds information about the DataReader used to read the data.
-
-.. code-block:: python
-
- {'BOLD': {'data': ,
- 'meta': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber',
- 'types': ['BOLD', 'T1w']},
- 'datareader': {'class': 'DefaultDataReader'},
- 'dependencies': {'nilearn'},
- 'element': {'subject': 'sub001'}},
- 'path': PosixPath('/var/folders/dv/2lbr8f8j0q12zrx3mz3ll5m40000gp/T/tmpe49321ce/sub001_bold.nii.gz')},
- 'T1w': {'data': ,
- 'meta': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber',
- 'types': ['BOLD', 'T1w']},
- 'datareader': {'class': 'DefaultDataReader'},
- 'dependencies': set(),
- 'element': {'subject': 'sub001'}},
- 'path': PosixPath('/var/folders/dv/2lbr8f8j0q12zrx3mz3ll5m40000gp/T/tmpe49321ce/sub001_T1w.nii.gz')}}
-
-The :ref:`Preprocess ` step, if used, modifies the ``data``
-second-level key's value and appends the ``meta`` key with information about
-the preprocessor.
-
-The :ref:`Marker ` step removes the ``path`` second-level key,
-replaces the ``data`` second-level key's value with the marker's computed value
-and adds further keys needed for the storage, for example, ``col_names``.
-
-.. code-block:: python
-
- {'BOLD': {'col_names': ['root_sum_of_squares_ets'],
- 'data': ...,
- 'meta': {'datagrabber': {'class': 'SPMAuditoryTestingDataGrabber',
- 'types': ['BOLD', 'T1w']},
- 'datareader': {'class': 'DefaultDataReader'},
- 'dependencies': {'nilearn'},
- 'element': {'subject': 'sub001'},
- 'marker': {'agg_method': 'mean',
- 'agg_method_params': None,
- 'class': 'RSSETSMarker',
- 'masks': None,
- 'name': 'RSSETSMarker',
- 'parcellation': 'Schaefer100x17'},
- 'type': 'BOLD'}}}
-
-.. note::
-
- You never directly interact with the *data object* but it's important to know
- where and how the object is being manipulated to reason about your pipeline.
-
-.. _data_types:
-
-Data Types
-----------
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Description
- - Example
- * - ``T1w``
- - T1w image (3D)
- - Preprocessed or Raw T1w image
- * - ``T2w``
- - T2w image (3D)
- - Preprocessed or Raw T2w image
- * - ``BOLD``
- - BOLD image (4D)
- - Preprocessed or Denoised BOLD image (fMRIPrep output)
- * - ``BOLD_confounds``
- - BOLD image confounds (CSV/TSV file)
- - Confounds that can be applied to the BOLD image.
- * - ``VBM_GM``
- - VBM Gray Matter segmentation (3D)
- - CAT output (`m0wp1` images)
- * - ``VBM_WM``
- - VBM White Matter segmentation (3D)
- - CAT output (`m0wp2` images)
- * - ``fALFF``
- - Voxel-wise fALFF image (3D)
- - fALFF computed with CONN toolbox
- * - ``GCOR``
- - Global Correlation image (3D)
- - GCOR computed with CONN toolbox
- * - ``LCOR``
- - Local Correlation image (3D)
- - LCOR computed with CONN toolbox
diff --git a/pr-preview/pr-273/_sources/understanding/datagrabber.rst.txt b/pr-preview/pr-273/_sources/understanding/datagrabber.rst.txt
deleted file mode 100644
index 8fce71e8d..000000000
--- a/pr-preview/pr-273/_sources/understanding/datagrabber.rst.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-.. include:: ../links.inc
-
-.. _datagrabber:
-
-Data Grabber
-============
-
-Description
------------
-
-The ``DataGrabber`` is an object that can provide an interface to datasets you
-want to work with in ``junifer``. Every concrete implementation of a DataGrabber
-is aware of a particular dataset's structure and thus allows you to fetch
-specific elements of interest from the dataset. It adds the ``path`` key to each
-:ref:`data type ` in the :ref:`Data object `.
-
-DataGrabbers are intended to be used as context managers. When used within a
-context, a DataGrabber takes care of any pre and post steps for interacting with
-the dataset, for example, downloading and cleaning up. As the interface
-is consistent, you always use the same procedure to interact with the DataGrabber.
-
-For example, a concrete implementation of :class:`.DataladDataGrabber` can
-provide ``junifer`` with data from a Datalad dataset. Of course, DataGrabbers are
-not only meant to work with Datalad datasets but any dataset.
-
-If you are interested in using already provided DataGrabbers, please go to
-:doc:`../builtin`. And, if you want to implement your own DataGrabber, you need
-to provide concrete implementations of abstract base classes already provided.
-
-Base Classes
-------------
-
-In this section, we showcase different abstract and concrete base classes you
-might want to use to implement your own DataGrabber.
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Name
- - Description
- * - :class:`.BaseDataGrabber`
- - | The abstract base class providing you an interface to implement your
- | own DataGrabber. You should try to avoid using this directly and
- | instead use :class:`.PatternDataGrabber` or
- | :class:`.DataladDataGrabber`. To build your own custom *low-level*
- | DataGrabber, you need to override the ``get_elements_keys``,
- | ``get_elements`` and ``get_item`` methods, and most of the time you
- | should also override other existing methods like ``__enter__`` and
- | ``__exit__``.
- * - :class:`.PatternDataGrabber`
- - | It implements functionality to help you define the pattern of the
- | dataset you want to get. For example, you know that T1w images are
- | found in a directory following the pattern:
- | ``{subject}/anat/{subject}_T1w.nii.gz`` inside of the dataset. Now you
- | can provide this to the :class:`.PatternDataGrabber` and it will be
- | able to get the file.
- * - :class:`.DataladDataGrabber`
- - | It implements functionality to deal with Datalad datasets. Specifically,
- | the ``__enter__`` and ``__exit__`` methods take care of cloning and
- | removing the Datalad dataset.
- * - :class:`.PatternDataladDataGrabber`
- - | It is a combination of :class:`.PatternDataGrabber` and
- | :class:`.DataladDataGrabber`. This is probably the class you are looking
- | for when using Datalad datasets.
diff --git a/pr-preview/pr-273/_sources/understanding/datareader.rst.txt b/pr-preview/pr-273/_sources/understanding/datareader.rst.txt
deleted file mode 100644
index 9876515bc..000000000
--- a/pr-preview/pr-273/_sources/understanding/datareader.rst.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-.. include:: ../links.inc
-
-.. _datareader:
-
-Data Reader
-===========
-
-Description
------------
-
-The ``DataReader`` is an object that is responsible for actually reading data
-files in ``junifer``. It reads the value of the key ``path`` for each
-:ref:`data type ` in the :ref:`Data object ` and loads
-them into memory. After reading the data into memory, it adds the key ``data``
-to the same level as ``path`` and the value is the actual data in the memory.
-
-DataReaders are meant to be used inside the DataGrabber context but you can
-operate on them outside the context as long as the actual data is in the memory
-and the Python runtime has not garbage-collected it.
-
-For data formats not supported by ``junifer`` yet, you can either make your own
-DataReader or open an issue on `junifer Github`_ and we can help you out.
-
-File Formats
-------------
-
-We already provide a concrete implementation :class:`.DefaultDataReader` which
-knows how to read the following file formats:
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - File extension
- - File type
- - Description
- * - ``.nii``
- - NIfTI (uncompressed)
- - Uncompressed NIfTI
- * - ``.nii.gz``
- - NIfTI (compressed)
- - Compressed NIfTI
- * - ``.csv``
- - CSV
- - Comma-separated values file
- * - ``.tsv``
- - TSV
- - Tab-separated values file
diff --git a/pr-preview/pr-273/_sources/understanding/index.rst.txt b/pr-preview/pr-273/_sources/understanding/index.rst.txt
deleted file mode 100644
index 0757a3065..000000000
--- a/pr-preview/pr-273/_sources/understanding/index.rst.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-.. include:: ../links.inc
-
-.. _understanding:
-
-Understanding ``junifer``
-=========================
-
-Before you start, you should understand how ``junifer`` works. ``junifer`` is a
-tool conceived to extract features from neuroimaging data in an easy-to-use
-manner, with minimal coding and minimal user expertise in the internal aspects.
-
-Unlike other tools like FSL, SPM, AFNI, etc., ``junifer`` is not a toolbox to
-pre-process data, but a toolbox to extract features from previously
-pre-processed data.
-
-The main idea is that you have a set of images (e.g. a set of functional MRI,
-structural MRI, diffusion MRI, etc.) and you want to extract features to
-later use in statistical analyses or machine learning (for example, using
-julearn_).
-
-.. important::
-
- ``junifer`` is not a toolbox to create pipelines, but a tool to configure the
- ``junifer`` pipeline, which is intended to be fixed and not to be changed. If
- you want to create a pipeline, you should use other tools like nipype_.
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- pipeline
- data
- datagrabber
- datareader
- preprocess
- marker
- storage
diff --git a/pr-preview/pr-273/_sources/understanding/marker.rst.txt b/pr-preview/pr-273/_sources/understanding/marker.rst.txt
deleted file mode 100644
index 4ae5f564b..000000000
--- a/pr-preview/pr-273/_sources/understanding/marker.rst.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-.. include:: ../links.inc
-
-.. _marker:
-
-Marker
-======
-
-Description
------------
-
-The ``Marker`` is an object that is responsible for feature extraction. It
-primarily operates on data loaded into memory by :ref:`Data Reader `
-and stored in the ``data`` key of each :ref:`data type ` in the
-:ref:`Data object `. In some cases, it can also operate on
-pre-processed data as obtained from the :ref:`Preprocess ` step of
-the pipeline.
-
-.. important::
-
- This pre-process is not similar to pre-processing done by tools like FSL,
- SPM, AFNI, etc., . For example, one can perform confound removal on loaded
- data and then perform feature extraction.
-
-Markers are meant to be used inside the DataGrabber context but you can operate
-on them outside the context as long as the actual data is in the memory and the
-Python runtime has not garbage-collected it.
-
-If you are interested in using already provided Markers, please go to
-:doc:`../builtin`. And, if you want to implement your own Marker, you need to
-provide concrete implementation of :class:`.BaseMarker`. Specifically, you
-need to override ``get_valid_inputs``, ``get_output_type`` and ``compute``
-methods.
diff --git a/pr-preview/pr-273/_sources/understanding/pipeline.rst.txt b/pr-preview/pr-273/_sources/understanding/pipeline.rst.txt
deleted file mode 100644
index 600304069..000000000
--- a/pr-preview/pr-273/_sources/understanding/pipeline.rst.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-.. include:: ../links.inc
-
-.. _pipeline:
-
-The ``junifer`` Pipeline
-========================
-
-The junifer pipeline is the main execution path of junifer. It consists of five
-steps:
-
-1. :ref:`Data Grabber `: Interpret the dataset and provide a list
- of files.
-2. :ref:`Data Reader `: Read the files.
-3. :ref:`Preprocess `: Prepare the files' data for marker
- computation.
-4. :ref:`Marker Computation `: Compute the marker(s).
-5. :ref:`Storage `: Store the marker(s) values.
-
-The element that is passed across the pipeline is called the
-:ref:`Data Object`.
-
-The following is a graphical representation of the pipeline:
-
-.. mermaid::
-
- flowchart LR
- dg[Data Grabber]
- dr[Data Reader]
- pp[Preprocess]
- mc[Marker Computation]
- st[Storage]
- dg --> dr
- dr --> pp
- pp --> mc
- mc --> st
-
-
-However, it is usually the case that several markers are computed for the same
-data. Thus, the ``Marker Computation`` step of the pipeline is defined as a list
-of markers. The following is a graphical representation of the pipeline execution
-on multiple markers:
-
-.. mermaid::
-
- flowchart LR
- dg[Data Grabber]
- dr[Data Reader]
- pp[Preprocess]
- mc1[Marker Computation]
- mc2[Marker Computation]
- mc3[Marker Computation]
- mc4[Marker Computation]
- mc5[Marker Computation]
- st1[Storage]
- st2[Storage]
- st3[Storage]
- st4[Storage]
- st5[Storage]
- dg --> dr
- dr --> pp
- pp --> mc1
- pp --> mc2
- pp --> mc3
- pp --> mc4
- pp --> mc5
- mc1 --> st1
- mc2 --> st2
- mc3 --> st3
- mc4 --> st4
- mc5 --> st5
-
-.. note::
-
- To avoid keeping in memory all of the computed marker, the storage step is
- called after each marker computation, releasing the memory used to compute
- each marker.
diff --git a/pr-preview/pr-273/_sources/understanding/preprocess.rst.txt b/pr-preview/pr-273/_sources/understanding/preprocess.rst.txt
deleted file mode 100644
index afbf28ce9..000000000
--- a/pr-preview/pr-273/_sources/understanding/preprocess.rst.txt
+++ /dev/null
@@ -1,196 +0,0 @@
-.. include:: ../links.inc
-
-.. _preprocess:
-
-Preprocess
-==========
-
-Description
------------
-
-The ``Preprocess`` is an object meant for pre-processing before or after
-:ref:`Marker ` step depending on the use-case. For example, you might
-want to perform confound removal on ``BOLD`` data before feature extraction.
-
-
-.. note::
-
- This step is optional for the pipeline to work.
-
-.. _preprocess_confounds:
-
-Confound Removal
-----------------
-
-This step is meant to remove *confounds* from the ``BOLD`` data. The confounds
-are extracted from the ``BOLD_confounds`` data (must be provided by the
-:ref:`Data Grabber `). The confounds are then regressed out from
-the ``BOLD`` data using :func:`nilearn.image.clean_img`.
-
-Currently, ``junifer`` supports only one confound removal class:
-:class:`.fMRIPrepConfoundRemover`. This class is meant to remove confounds as
-described before, using the output of `fMRIPrep`_ as reference.
-
-Strategy
-~~~~~~~~
-
-This confound remover uses the `nilearn`_ API from
-:func:`nilearn.interfaces.fmriprep.load_confounds`. That is, define a *strategy*
-to extract the confounds from the ``BOLD_confounds`` data. The *strategy* is
-defined by choosing the *noise components* to be used and the *confounds* to be
-extracted from each noise components. The *noise components* currently supported
-are:
-
-* ``motion``
-* ``wm_csf``
-* ``global_signal``
-
-The confounds options for each *noise component* are:
-
-* ``basic``: the basic confounds for each *noise component*. For example, for
- ``motion``, the basic confounds are the 6 motion parameters (3 translations
- and 3 rotations). For ``wm_csf``, the basic confounds are the mean signal of
- the white matter and CSF regions. For ``global_signal``, the basic confound
- is the mean signal of the whole brain.
-* ``power2``: the basic confounds plus the square of each basic confound.
-* ``derivatives``: the basic confounds plus the derivative of each basic
- confound.
-* ``full``: the basic confounds, the derivative of each basic confound, the
- square of each basic confound and the square of each derivative of each basic
- confound.
-
-The *strategy* is defined as a dictionary, with the *noise components* as keys
-and the *confounds* as values.
-
-Example in python format:
-
-.. code-block:: python
-
- strategy = {
- "motion": "basic",
- "wm_csf": "full",
- "global_signal": "derivatives"
- }
-
-or in YAML format:
-
-.. code-block:: yaml
-
- strategy:
- motion: basic
- wm_csf: full
- global_signal: derivatives
-
-The default value is to use all the *noise components* with the ``full`` *confounds*:
-
-.. code-block:: python
-
- strategy = {
- "motion": "full",
- "wm_csf": "full",
- "global_signal": "full"
- }
-
-Other Parameters
-~~~~~~~~~~~~~~~~
-
-Additionally, the :class:`.fMRIPrepConfoundRemover` supports the following
-parameters:
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Parameter
- - Description
- - Default
- * - ``spike``
- - | Add a spike regressor in the timepoints when the framewise
- | displacement exceeds this threshold.
- - deactivated
- * - ``detrend``
- - Apply detrending on timeseries, before confound removal.
- - activated
- * - ``standardize``
- - Scale signals to unit variance.
- - activated
- * - ``low_pass``
- - Low cutoff frequencies, in Hertz.
- - deactivated
- * - ``high_pass``
- - High cutoff frequencies, in Hertz.
- - deactivated
- * - ``t_r``
- - Repetition time, in second (sampling period).
- - from NIfTI header
- * - ``mask``
- - | If provided, signal is only cleaned from voxels inside the mask.
- | If not, a mask is computed using
- | :func:`nilearn.masking.compute_brain_mask`.
- - compute
-
-.. _preprocess_warping:
-
-Warping or Transformation to other spaces
------------------------------------------
-
-``junifer`` can also warp or transform any supported
-:ref:`data type ` from the template space provided by the dataset
-(e.g., ``MNI152NLin6Asym``) to either the subject's
-:ref:`native space ` or to any other
-:ref:`template space `
-(e.g., ``MNI152NLin2009cAsym``). This functionality is provided by
-:class:`.SpaceWarper` and depends on external tools like FSL and / or ANTs.
-
-.. _preprocess_warping_native:
-
-Warping to subject's native space
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To warp to subject's native space, the dataset needs to provide ``T1w`` and
-``Warp`` data types and the DataGrabber needs to at least have
-``["BOLD", "T1w", "Warp"]`` (if you are warping ``BOLD``) as the ``types``
-parameter's value. The :class:`.SpaceWarper`'s ``reference`` parameter needs
-to be set to ``T1w``, which means that the ``BOLD`` data will be transformed
-using the ``T1w`` as reference (it's resampled internally to match the
-resolution of the ``BOLD``). The ``Warp`` data type is new and it's only purpose
-is to provide the warp or transformation file (can be linear, non-linear or
-linear + non-linear transform) for the purpose. For ``using`` parameter, you can
-pass either ``"fsl"`` or ``"ants"`` depending on the warp or transformation file
-format.
-
-An example YAML might look like this:
-
-.. code-block:: yaml
-
- preprocess:
- - kind: SpaceWarper
- using: fsl
- reference: T1w
-
-.. _preprocess_warping_template:
-
-Warping to other template space
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In a situation where your dataset might provide the ``BOLD`` data (or any other
-data type that you want to work on) in ``MNI152NLin6Asym`` template space but
-you would like to compute features in ``MNI152NLin2009cAsym`` template space,
-you can also use the :class:`.SpaceWarper` by setting the ``reference``
-parameter to the template space's name, in this case,
-``reference="MNI152NLin2009cAsym"``. The ``using`` parameter needs to be set
-to ``"ants"`` as we need it to warp the data.
-
-.. note::
-
- We only support template spaces provided by `templateflow`_ and the naming
- is similar except that we omit the ``tpl-`` prefix used by ``templateflow``.
-
-For an YAML example:
-
-.. code-block:: yaml
-
- preprocess:
- - kind: SpaceWarper
- using: ants
- reference: MNI152NLin2009cAsym
diff --git a/pr-preview/pr-273/_sources/understanding/storage.rst.txt b/pr-preview/pr-273/_sources/understanding/storage.rst.txt
deleted file mode 100644
index 36d407e04..000000000
--- a/pr-preview/pr-273/_sources/understanding/storage.rst.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-.. include:: ../links.inc
-
-.. _storage:
-
-Storage
-=======
-
-Description
------------
-
-The ``Storage`` is an object that is responsible for storing extracted features
-as computed from :ref:`Marker ` step of the pipeline. If the pipeline is
-provided with a ``storage-like`` object, the extracted features are stored via
-that object else they are kept in memory.
-
-Storage is meant to be used inside the DataGrabber context but you can operate
-on them outside the context as long as the processed data is in the memory and
-the Python runtime has not garbage-collected it.
-
-The :ref:`Markers ` are responsible for defining what *storage kind*
-(``matrix``, ``vector``, ``timeseries``) they support for which
-:ref:`data type ` by overriding its ``get_output_type`` method. The
-storage object in turn declares and provides implementation for specific
-*storage kind*. For example, :class:`.SQLiteFeatureStorage` supports saving
-``matrix``, ``vector`` and ``timeseries`` via ``store_matrix``, ``store_vector``
-and ``store_timeseries`` methods respectively.
-
-For storage interfaces not supported by ``junifer`` yet, you can either make
-your own ``Storage`` by providing a concrete implementation of
-:class:`.BaseFeatureStorage` or open an issue on `junifer Github`_ and we can
-help you out.
-
-.. _storage_types:
-
-Storage Types
--------------
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Storage Type
- - Description
- - Options
- - Reference
- * - ``matrix``
- - A 2D matrix with row and column names
- - ``col_names``, ``row_names``, ``matrix_kind``, ``diagonal``
- - :meth:`.BaseFeatureStorage.store_matrix`
- * - ``vector``
- - A 1D row vector of values with column names
- - ``col_names``
- - :meth:`.BaseFeatureStorage.store_vector`
- * - ``timeseries``
- - A 2D matrix of values with column names
- - ``col_names``
- - :meth:`.BaseFeatureStorage.store_timeseries`
-
-.. _storage_interfaces:
-
-Storage Interfaces
-------------------
-
-.. list-table::
- :widths: auto
- :header-rows: 1
-
- * - Storage class
- - File extension
- - File type
- - Storage kinds
- * - :class:`.SQLiteFeatureStorage`
- - ``.sqlite``
- - SQLite
- - ``matrix``, ``vector``, ``timeseries``
- * - :class:`.HDF5FeatureStorage`
- - ``.hdf5``
- - HDF5
- - ``matrix``, ``vector``, ``timeseries``
diff --git a/pr-preview/pr-273/_sources/using/codeless.rst.txt b/pr-preview/pr-273/_sources/using/codeless.rst.txt
deleted file mode 100644
index 0a075c4fe..000000000
--- a/pr-preview/pr-273/_sources/using/codeless.rst.txt
+++ /dev/null
@@ -1,236 +0,0 @@
-.. include:: ../links.inc
-
-.. _codeless:
-
-Code-less Configuration
-=======================
-
-One of the most important features of ``junifer`` is its capacity to run without
-writing a single line of code. This is achieved by using a configuration file
-that is written in YAML_. In this file, we configure the different steps of
-:ref:`pipeline`.
-
-As a reminder, this is how the pipeline looks like:
-
-.. mermaid::
-
- flowchart LR
- dg[Data Grabber]
- dr[Data Reader]
- pp[Preprocess]
- mc[Marker Computation]
- st[Storage]
- dg --> dr
- dr --> pp
- pp --> mc
- mc --> st
-
-
-Thus, the configuration file must configure each of the sections of the pipeline,
-as well as some general parameters.
-
-As an example, we will generate the configuration file for a pipeline that will
-extract the mean ``VBM_GM`` values using two different parcellations and one set
-of coordinates, from the ``Oasis VBM Testing dataset`` included in ``junifer``.
-
-
-General Parameters
-------------------
-
-The general parameters are the ones that are not specific to any of the sections
-of the pipeline, but configure ``junifer`` as a whole. These parameters are:
-
-* ``with``: A section used to specify modules and ``junifer`` extensions to use.
-* ``workdir``: The working directory where ``junifer`` will store temporary files.
-
-Since the example uses a specific DataGrabber for testing, we need to add
-``junifer.testing.registry`` to the ``with`` section. This will allow ``junifer``
-to find the DataGrabber. We will set the ``workdir`` to ``/tmp``.
-
-.. code-block:: yaml
-
- with: junifer.testing.registry
-
- workdir: /tmp
-
-Step-by-step Configuration
---------------------------
-
-In order to configure the pipeline, we need to configure each step:
-
-* ``datagrabber``
-* ``datareader``
-* ``preprocess``
-* ``markers``
-* ``storage``
-
-.. important::
-
- The ``datareader`` step configuration is optional, as ``junifer`` only
- provides one DataReader. Nevertheless, it is possible to extend ``junifer``
- with custom DataReaders, and thus, it is also possible to configure this step.
-
-
-Data Grabber
-^^^^^^^^^^^^
-
-The ``datagrabber`` section must be configured using the ``kind`` key to specify
-the DataGrabber to use. Additional keys correspond to the parameters of the
-DataGrabber constructor.
-
-For example, to use the :class:`.DataladAOMICPIOP1` DataGrabber, we just need to
-specify its name as the ``kind`` key.
-
-.. code-block:: yaml
-
- datagrabber:
- kind: DataladAOMICPIOP1
-
-However, it is also possible to pass parameters to the DataGrabber constructor.
-In this case, we can restrict the DataGrabber to fetch only the ``restingstate``
-task.
-
-.. code-block:: yaml
-
- datagrabber:
- kind: DataladAOMICPIOP1
- tasks: restingstate
-
-In the ``Oasis VBM Testing dataset`` example, the section will look like this:
-
-.. code-block:: yaml
-
- datagrabber:
- kind: OasisVBMTestingDataGrabber
-
-
-Data Reader
-^^^^^^^^^^^
-
-As mentioned before, this section is entirely optional, as ``junifer`` only
-provides one DataReader (:class:`.DefaultDataReader`), which is the default in
-case the section is not specified.
-
-In any case, the syntax of the section is the same as for the ``datagrabber``
-section, using the ``kind`` key to specify the DataReader to use, and additional
-keys to pass parameters to the DataReader constructor:
-
-.. code-block:: yaml
-
- datareader:
- kind: DefaultDataReader
-
-
-For the ``Oasis VBM Testing dataset`` example, we will not specify a
-``datareader`` step.
-
-Preprocess
-^^^^^^^^^^
-
-``preprocess`` is also an optional step, as it might be the case that no
-pre-processing is needed. As we can perform multiple preprocessing steps, it's
-passed as a list of Preprocessors. In the case that pre-processing is needed,
-each Preprocessord must be configured using the ``kind`` key to specify the
-Preprocessor to use, and additional keys to pass parameters to the Preprocessor.
-
-For example, to use the :class:`.fMRIPrepConfoundRemover` Preprocessor, we just
-need to specify its name as the ``kind`` key, as well as its parameters.
-
-.. code-block:: yaml
-
- preprocess:
- - kind: fMRIPrepConfoundRemover
- strategy:
- motion: full
- wm_csf: full
- global_signal: basic
- spike: 0.2
- detrend: false
- standardize: true
-
-
-For the ``Oasis VBM Testing dataset`` example, we will not specify a
-preprocessing step.
-
-
-Marker
-^^^^^^
-
-The ``markers`` section like the ``preprocess`` section expects a list of
-markers. Each Marker has a name that we can use to refer to it later,
-and a set of parameters that will be passed to the Marker.
-
-For the ``Oasis VBM Testing dataset`` example, we want to compute the mean
-``VBM_GM`` value for each parcel using the ``Schaefer parcellation (100 parcels,
-7 networks)``, ``Schaefer parcellation (200 parcels, 7 networks)``, and the
-``DMNBuckner`` network, using ``5mm`` spheres. Thus, we will configure the
-``markers`` section as follows:
-
-.. code-block:: yaml
-
- markers:
- - name: Schaefer100x7_mean
- kind: ParcelAggregation
- parcellation: Schaefer100x7
- method: mean
- - name: Schaefer200x7_mean
- kind: ParcelAggregation
- parcellation: Schaefer200x7
- method: mean
- - name: DMNBuckner_5mm_mean
- kind: SphereAggregation
- coords: DMNBuckner
- radius: 5
- method: mean
-
-
-Storage
-^^^^^^^
-
-Finally, we need to define how and where the results will be stored. This is
-done using the ``storage`` section, which must be configured using the ``kind``
-key to specify the storage to use, and additional keys to pass parameters.
-
-For example, to use the :class:`.HDF5FeatureStorage` storage, we just need to
-specify where we want to store the results:
-
-.. code-block:: yaml
-
- storage:
- kind: HDF5FeatureStorage
- uri: /data/junifer/example/oasis_vbm_testing.hdf5
-
-
-Complete Example
-----------------
-
-This is how the full ``Oasis VBM Testing dataset`` example configuration file
-looks like:
-
-.. code-block:: yaml
-
- with: junifer.testing.registry
-
- workdir: /tmp
-
- datagrabber:
- kind: OasisVBMTestingDataGrabber
-
- markers:
- - name: Schaefer100x7_mean
- kind: ParcelAggregation
- parcellation: Schaefer100x7
- method: mean
- - name: Schaefer200x7_mean
- kind: ParcelAggregation
- parcellation: Schaefer200x7
- method: mean
- - name: DMNBuckner_5mm_mean
- kind: SphereAggregation
- coords: DMNBuckner
- radius: 5
- method: mean
-
- storage:
- kind: HDF5FeatureStorage
- uri: /data/junifer/example/oasis_vbm_testing.hdf5
diff --git a/pr-preview/pr-273/_sources/using/index.rst.txt b/pr-preview/pr-273/_sources/using/index.rst.txt
deleted file mode 100644
index 545f57035..000000000
--- a/pr-preview/pr-273/_sources/using/index.rst.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-.. include:: ../links.inc
-
-.. _using:
-
-Using ``junifer``
-=================
-
-In this section, we will cover the main aspects behind using ``junifer``. We
-will first explain the basics behind junifer's code-less configuration. Then we
-will show how to use the command line interface to ``run`` the pipeline and
-``collect`` the results. Finally, we will show how to use the ``queue`` command
-to interact with HPC and HTC systems.
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- codeless
- running
- queueing
-
-
-.. _using_components:
-
-Using Common Components
------------------------
-
-The following sections explains common components of ``junifer`` that can be used
-across many steps of the pipeline.
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- masks
diff --git a/pr-preview/pr-273/_sources/using/masks.rst.txt b/pr-preview/pr-273/_sources/using/masks.rst.txt
deleted file mode 100644
index b0c6ba933..000000000
--- a/pr-preview/pr-273/_sources/using/masks.rst.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-.. include:: ../links.inc
-
-.. _using_masks:
-
-Masks
-=====
-
-Masks are essentially boolean arrays that are used to constrain the extraction
-of features to voxels that are meaningful. For example, in an fMRI imaging
-study, a mask can be used to constrain the extraction of features to voxels that
-contain a certain ratio of gray matter to white matter / cerebrospinal fluid,
-ensuring that the features are not extracted from voxels that contain mostly
-white matter or cerebrospinal fluid, which could add noise to the BOLD signal.
-
-``junifer`` provides a number of built-in masks, which can be listed using
-:func:`.list_masks`. Some masks are images, while other masks can be computed
-using :ref:`nilearn` functions.
-
-For markers and steps that accept ``masks`` as an argument, the mask can be
-specified as a string, which will be the name of a built-in mask, or as a
-dictionary in which the **only** key is the built-in mask name and the value is
-a dictionary of keyword arguments to pass to the mask function.
-
-For example, the following is a valid mask specification that specified the
-``GM_prob0.2`` mask:
-
-.. code-block:: yaml
-
- masks: GM_prob0.2
-
-The following is a valid mask specification that specifies the
-``compute_brain_mask`` mask, with a threshold of ``0.5``.
-
-.. code-block:: yaml
-
- masks:
- compute_brain_mask:
- threshold: 0.5
-
-Furthermore, junifer allows you to combine several masks using
-:func:`nilearn.masking.intersect_masks`. This is done by specifying a list of
-masks, where each mask is a string or dictionary as described above. For example,
-the following is a valid mask specification that specifies the intersection of
-the ``GM_prob0.2`` and ``compute_brain_mask`` masks.
-
-.. code-block:: yaml
-
- masks:
- - GM_prob0.2
- - compute_brain_mask:
- threshold: 0.5
-
-We can also specify the arguments of :func:`nilearn.masking.intersect_masks`
-(``threshold`` and ``connected``). The following example combines the same masks
-as the previous one, but computing the full intersection.
-
-.. code-block:: yaml
-
- masks:
- - GM_prob0.2
- - compute_brain_mask:
- threshold: 0.5
- - threshold: 1 # intersection
-
-Alternatively, we can also compute the union, even if the voxels do not form a
-connected component:
-
-.. code-block:: yaml
-
- masks:
- - GM_prob0.2
- - compute_brain_mask:
- threshold: 0.5
- - threshold: 0 # union
- - connected: False # keep disconnected components
diff --git a/pr-preview/pr-273/_sources/using/queueing.rst.txt b/pr-preview/pr-273/_sources/using/queueing.rst.txt
deleted file mode 100644
index 413ea09cb..000000000
--- a/pr-preview/pr-273/_sources/using/queueing.rst.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-.. include:: ../links.inc
-
-.. _queueing:
-
-Queueing Jobs (HPC, HTC)
-========================
-
-Yet another interesting feature of ``junifer`` is the ability to queue jobs on
-computational clusters. This is done by adding the ``queue`` section in the
-:ref:`codeless` file and executing the ``junifer queue`` command.
-
-While junifer is meant to support `HTCondor`_, `SLURM`_ and local queueing
-using `GNU Parallel`_, only HTCondor is currently supported. This will be
-implemented in future releases of ``junifer``. If you are in immediate need of
-any of these schedulers, please create an issue on the `junifer github`_
-repository.
-
-The ``queue`` section of the :ref:`codeless` must start by defining the
-following general parameters:
-
-* ``jobname``: Name of the job to be queued. This will be used to name the
- folder where the job files will be created, as well as any relevant file.
- Depending on the scheduler, it will also be listed in the queueing system
- with this name.
-* ``kind``: The kind of scheduler to be used. Currently, only ``HTCondor`` is
- supported.
-
-Example in YAML:
-
-.. code-block:: yaml
-
- queue:
- jobname: TestHTCondorQueue
- kind: HTCondor
-
-
-The rest of the parameters depend on the scheduler you are using.
-
-.. _queueing_condor:
-
-HTCondor
---------
-
-When using HTCondor, ``junifer`` will use a DAG to queue one job per element
-(``junifer run``). As an option, the DAG can include a final job
-(``junifer collect``) to collect the results once all of the individual element
-jobs are finished.
-
-The following parameters are available for HTCondor:
-
-* ``env``: Definition of the Python environment. It must provide two variables:
-
- * ``kind``: This is the kind of virtual environment to use:
-
- * ``conda``
- * ``venv``
- * ``local`` (no virtual environment)
-
- * ``name``: This is the name of the environment to use in case a virtual
- environment is used. It should be the name when ``conda`` is used and
- the absolute or relative path to the virtualenv when ``venv`` is used.
- If relative path is used then it should be relative to the YAML.
-
-* ``mem``: Memory to be used by the job. It must be provided as a string with
- the units (e.g., ``"2GB"``).
-* ``cpus``: Number of CPUs to be used by the job. It must be provided as an
- integer (e.g., ``1``).
-* ``disk``: Disk space to be used by the job. It must be provided as a string
- with the units (e.g., ``"2GB"``). Keep in mind that ``junifer`` uses a local
- working directory for each job, and datalad datasets might be cloned in this
- temporary directory.
-* ``extra_preamble``: Extra lines to be added to the HTCondor submit file. This
- can be used to add extra parameters to the job, such as ``requirements``.
-* ``collect``: This parameter allows to include a collect to the DAG to collect
- the results once all of the individual element jobs are finished. This is
- useful if you want to run a ``junifer collect`` job only once all of the
- individual element jobs are finished. Valid options are:
-
- * ``yes``: Include a collect job in the DAG that will be executed even if some
- of the individual element jobs fail.
- * ``on_success_only``: Include a collect job to the DAG, but will only run if
- all of the individual element jobs are successful.
- * ``no``: Do not include a collect job to the DAG.
-
-
-Example in YAML:
-
-.. code-block:: yaml
-
- queue:
- jobname: TestHTCondorQueue
- kind: HTCondor
- env:
- kind: conda
- name: junifer
- mem: 8G
- disk: 2G
- collect: "yes" # wrap it in string to avoid boolean
-
-Once the :ref:`codeless` file is ready, including the ``queue`` section, you can
-queue the jobs by executing the ``junifer queue`` command.
-
-The ``queue`` command will create a folder with the name of the job (``jobname``)
-under the ``junifer_jobs`` directory in the current working directory.
-
-The ``queue`` command accepts the following arguments:
-
-* ``--help``: Show a help message.
-* ``--verbose``: Set the verbosity level. Options are ``warning``, ``info``,
- ``debug``.
-* ``--submit``: Submit the jobs to the queueing system. If not specified, the
- job submit files will be created but not submitted.
-* ``--overwrite``: Overwrite the job folder if it already exists. If not
- specified, the command will fail if the job folder already exists.
-* ``--element``: Queue only the specified element(s). If not specified, all
- elements will be queued.
diff --git a/pr-preview/pr-273/_sources/using/running.rst.txt b/pr-preview/pr-273/_sources/using/running.rst.txt
deleted file mode 100644
index 118e01a3a..000000000
--- a/pr-preview/pr-273/_sources/using/running.rst.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-.. include:: ../links.inc
-
-.. _running:
-
-Running Jobs
-============
-
-Once we have the :ref:`code-less configuration file `, we can use the
-command line interface to extract the features. This is achieved in a two-step
-process: ``run`` and ``collect``.
-
-The ``run`` command is used to extract the features from each element in the
-dataset. However, depending on the storage interface, this may create one file
-per subject. The ``collect`` command is then used to collect all of the
-individual results into a single file.
-
-Assuming that we have a configuration file named ``config.yaml``, the following
-commands will extract the features:
-
-.. code-block:: bash
-
- junifer run config.yaml
-
-The ``run`` command accepts the following additional arguments:
-
-* ``--help``: Show a help message.
-* ``--verbose``: Set the verbosity level. Options are ``warning``, ``info``,
- ``debug``.
-* ``--element``: The *element* to run. If not specified, all elements will be
- run. This parameter can be specified multiple times to run multiple elements.
- If the *element* requires several parameters, they can be specified by
- separating them with ``,``. It also accepts a file (e.g., ``elements.txt``)
- containing complete or partial element(s).
-
-Example of running two elements:
---------------------------------
-
-.. code-block:: bash
-
- junifer run config.yaml --element sub-01 --element sub-02
-
-You can also specify the elements via a text file like so:
-
-.. code-block:: bash
-
- junifer run config.yaml --element elements.txt
-
-And the corresponding ``elements.txt`` would be like so:
-
-.. code-block:: text
-
- sub-01
- sub-02
-
-Example of elements with multiple parameters and verbose output:
-----------------------------------------------------------------
-
-.. code-block:: bash
-
- junifer run --verbose info config.yaml --element sub-01,ses-01
-
-You can also specify the elements via a text file like so:
-
-.. code-block:: bash
-
- junifer run --verbose info config.yaml --element elements.txt
-
-And the corresponding ``elements.txt`` would be like so:
-
-.. code-block:: text
-
- sub-01,ses-01
-
-In case you wanted to run for all possible sessions (e.g., ``ses-01``,
-``ses-02``, ``ses-03``) but only for ``sub-01``, you could also do:
-
-.. code-block:: bash
-
- junifer run --verbose info config.yaml --element sub-01
-
-or,
-
-.. code-block:: bash
-
- junifer run --verbose info config.yaml --element elements.txt
-
-and then the ``elements.txt`` would be like so:
-
-.. code-block:: text
-
- sub-01
-
-
-.. _collect:
-
-Collecting Results
-==================
-
-Once the ``run`` command has been executed, the results are stored in the output
-directory. However, depending on the storage interface, this may create one file
-per subject. The ``collect`` command is then used to collect all of the
-individual results into a single file.
-
-Assuming that we have a configuration file named ``config.yaml``, the following
-commands will collect the results:
-
-.. code-block:: bash
-
- junifer collect config.yaml
-
-The ``collect`` command accepts the following additional arguments:
-
-* ``--help``: Show a help message.
-* ``--verbose``: Set the verbosity level. Options are ``warning``, ``info``,
- ``debug``.
diff --git a/pr-preview/pr-273/_sources/whats_new.rst.txt b/pr-preview/pr-273/_sources/whats_new.rst.txt
deleted file mode 100644
index d19d16505..000000000
--- a/pr-preview/pr-273/_sources/whats_new.rst.txt
+++ /dev/null
@@ -1,617 +0,0 @@
-.. include:: links.inc
-.. include:: changes/contributors.inc
-
-.. _whats_new:
-
-What's new
-==========
-
-.. towncrier release notes start
-
-Junifer 0.0.5.dev11 (2024-04-08)
---------------------------------
-
-Features
-^^^^^^^^
-
-- Add support for choosing between ``bash`` and ``zsh`` shells when queueing by
- `Synchon Mandal`_ (:gh:`273`)
-
-
-Junifer 0.0.4 (2024-04-05)
---------------------------
-
-Bugfixes
-^^^^^^^^
-
-- Make copying of assets in ``with`` block of YAML, relative to YAML and not to
- current working directory by `Fede Raimondo`_ and `Synchon Mandal`_
- (:gh:`224`)
-- Adapt ``junifer queue`` to properly use HTCondor >=10.4.0
- ``condor_submit_dag`` by `Fede Raimondo`_ and `Synchon Mandal`_ (:gh:`233`)
-- Use 1 instead of 0 for successful FSL commands in ``_check_fsl()`` by
- `Synchon Mandal`_ (:gh:`272`)
-- Store native warped parcellations, coordinates and masks in element-scoped
- tempdirs for the pipeline to work by `Synchon Mandal`_ (:gh:`274`)
-- Change interpolation scheme for parcel and mask native space transformation
- to nearest neighbour by `Synchon Mandal`_ (:gh:`276`)
-- Bypass FSL ``std2imgcoord`` stdin bug and use recommended piped input for
- coordinates transformation by `Synchon Mandal`_ (:gh:`278`)
-- Add ``-std`` to FSL ``std2imgcoord`` for coordinates transformation by
- `Synchon Mandal`_ (:gh:`280`)
-- Replace FSL ``std2imgcoord`` with ``img2imgcoord`` as the former is incorrect
- for coordinates transformation to other template spaces. (:gh:`281`)
-- Propagate ReHo and fALFF maps, for aggregation to convert to other template
- spaces when required by `Synchon Mandal`_ (:gh:`282`)
-- Allow :class:`junifer.pipeline.WorkDirManager` to accept str via the
- ``workdir`` parameter by `Synchon Mandal`_ (:gh:`283`)
-- Avoid warping mask preprocessed with :class:`.fMRIPrepConfoundRemover` and
- used by markers with ``mask="inherit"`` in subject-native template space by
- `Fede Raimondo`_ and `Synchon Mandal`_ (:gh:`284`)
-- Pass down input path if input space is "native" for ``ReHoEstimator`` and
- ``ALFFEstimator``, else use respective compute maps by `Fede Raimondo`_ and
- `Synchon Mandal`_ (:gh:`286`)
-- Fix :class:`.HTCondorAdapter`'s script generation to use double quotes
- instead of single quotes for HTCondor's ``VARS`` by `Synchon Mandal`_
- (:gh:`312`)
-- Fix element access for :class:`.DMCC13Benchmark` DataGrabber by `Synchon
- Mandal`_ (:gh:`314`)
-- Add a validation step on the :func:`.run` function to validate the marker
- collection by `Fede Raimondo`_ (:gh:`320`)
-- Add the executable flag to the ants docker scripts, fsl docker scripts and
- other running scripts by `Fede Raimondo`_ (:gh:`321`)
-- Force ``str`` dtype when parsing elements from file by `Synchon Mandal`_
- (:gh:`322`)
-
-
-API Changes
-^^^^^^^^^^^
-
-- Rename ``Power`` coordinates to ``Power2011`` by `Synchon Mandal`_
- (:gh:`245`)
-- Add ``feature_md5`` argument to :func:`.read_transform()` by `Synchon
- Mandal`_ (:gh:`248`)
-- Add ``native_t1w`` parameter to :class:`.DataladAOMICID1000`,
- :class:`.DataladAOMICPIOP1`, :class:`.DataladAOMICPIOP2`, enabling fetching
- of T1w data in subject-native space by `Synchon Mandal`_ (:gh:`252`)
-- Modify ``preprocessor`` to ``preprocessors`` in :func:`.run` and
- ``preprocessing`` to ``preprocessors`` in :class:`.MarkerCollection` to
- accept multiple preprocessors by `Synchon Mandal`_ (:gh:`263`)
-- Add ``space`` parameter to :func:`.register_coordinates`,
- :func:`.register_parcellation` and :func:`.register_mask` and return space
- from :func:`.load_coordinates`, :func:`.load_parcellation` and
- :func:`.load_mask` by `Synchon Mandal`_ and `Fede Raimondo`_ (:gh:`268`)
-- Add ``template_type`` parameter to :func:`.get_template` by `Synchon Mandal`_
- (:gh:`299`)
-- Change :meth:`.BasePreprocessor.preprocess` return values to preprocessed
- target data and "helper" data types as a dictionary by `Synchon Mandal`_
- (:gh:`310`)
-- Add a positional argument ``using`` for Markers and Preprocessors having
- implementation-based variations, in particular :class:`.ReHoParcels`,
- :class:`.ReHoSpheres`, :class:`.ALFFParcels`, :class:`.ALFFSpheres` and
- :class:`.BOLDWarper` by `Synchon Mandal`_ (:gh:`311`)
-- Change all ``probseg_`` types to ``VBM_`` types by `Fede Raimondo`_
- (:gh:`320`)
-- Change the subject and session patterns for :class:`.DataladAOMICID1000`,
- :class:`.DataladAOMICPIOP1`, :class:`.DataladAOMICPIOP2` and
- :class:`.DMCC13Benchmark` so that they are consistent with their own
- ``"participants.tsv"`` file by `Fede Raimondo`_ (:gh:`325`)
-
-
-Improved Documentation
-^^^^^^^^^^^^^^^^^^^^^^
-
-- Add Zenodo badge in ``README`` and improve general documentation by `Synchon
- Mandal`_ (:gh:`247`)
-- Rename ``extMDN`` to ``extDMN`` (extended default mode network) and fix
- listing for ``eMDN`` (extended multiple-demand network) by `Synchon Mandal`_
- (:gh:`251`)
-- Fixed typo in code example for adding masks from "register_custom_mask" to
- "register_mask" by `Tobias Muganga`_ (:gh:`291`)
-- Rename ``Misc`` section to ``Miscellaneous`` in ``docs/whats_new.rst`` by
- `Synchon Mandal`_ (:gh:`300`)
-- Improve documentation by adding information about space transformation and
- writing custom Preprocessors by `Synchon Mandal`_ (:gh:`317`)
-
-
-Enhancements
-^^^^^^^^^^^^
-
-- Support element(s) to be specified via text file for ``--element`` option of
- ``junifer run`` by `Synchon Mandal`_ (:gh:`182`)
-- Support element-scoped directory and temporary directories for
- :class:`junifer.pipeline.WorkDirManager` by `Synchon Mandal`_ (:gh:`258`)
-- Improve element directory cleanup via
- ``junifer.pipeline.WorkDirManager.cleanup_elementdir`` method by `Synchon
- Mandal`_ (:gh:`259`)
-- Improve :class:`.BasePreprocessor` for easy subclassing and adapt
- :class:`.fMRIPrepConfoundRemover` to it by `Synchon Mandal`_ (:gh:`260`)
-- Add ``space`` information to existing datagrabbers, masks, parcellations and
- coordinates by `Synchon Mandal`_ and `Fede Raimondo`_ (:gh:`268`)
-- Add ``mode`` as an aggregation function option in
- :func:`.get_aggfunc_by_name` by `Synchon Mandal`_ (:gh:`287`)
-- Adapt :class:`.BOLDWarper` to use FSL or ANTs depending on warp file
- extension by `Synchon Mandal`_ (:gh:`293`)
-- Rewrite :func:`.compute_brain_mask` to allow variable template fetching via
- templateflow, according to target data by `Synchon Mandal`_ (:gh:`299`)
-- Replace ``requests`` with ``httpx`` for fetching parcellations by `Synchon
- Mandal`_ (:gh:`300`)
-- Allow :class:`.BOLDWarper` to warp BOLD data to other MNI spaces by `Synchon
- Mandal`_ (:gh:`302`)
-- Add support for local ``junifer queue`` via GNU Parallel by `Synchon Mandal`_
- (:gh:`306`)
-- Improve :class:`.PatternDataGrabber` and
- :class:`.PatternDataladDataGrabber`'s ``patterns`` to enable ``space``,
- ``format``, ``mask_item`` and other metadata description handling via YAML by
- `Synchon Mandal`_ (:gh:`308`)
-- Improve :class:`.BasePreprocessor` by revamping
- :meth:`.BasePreprocessor.preprocess` and ``BasePreprocessor._fit_transform``
- to handle "helper" data types better and make the pipeline explicit where
- data is being altered by `Synchon Mandal`_ (:gh:`310`)
-- Improve external dependency handling for :class:`.PipelineStepMixin`-derived
- objects having implementation-based variations by `Synchon Mandal`_
- (:gh:`311`)
-
-
-Features
-^^^^^^^^
-
-- Introduce complexity markers: :class:`.HurstExponent`,
- :class:`.MultiscaleEntropyAUC`, :class:`.PermEntropy`,
- :class:`.RangeEntropy`, :class:`.RangeEntropyAUC` and :class:`.SampleEntropy`
- by `Amir Omidvarnia`_ (:gh:`145`)
-- Add ``junifer reset`` to reset storage and jobs directory by `Synchon
- Mandal`_ (:gh:`240`)
-- Add support for ``Power2013`` coordinates by `Synchon Mandal`_ (:gh:`245`)
-- Support ``venv`` as environment kind for queueing jobs by `Synchon Mandal`_
- (:gh:`249`)
-- Add support for ``AutobiographicalMemory`` coordinates by `Synchon Mandal`_
- (:gh:`250`)
-- Add support for subject-native space by `Synchon Mandal`_ and `Fede
- Raimondo`_ (:gh:`252`)
-- Introduce :class:`junifer.pipeline.WorkDirManager` singleton class to manage
- working and temporary directories across pipeline by `Synchon Mandal`_
- (:gh:`254`)
-- Introduce :func:`.get_parcellation` to fetch parcellation tailored for the
- data by `Synchon Mandal`_ (:gh:`264`)
-- Introduce :func:`.get_coordinates` to fetch coordinates tailored for the data
- by `Synchon Mandal`_ (:gh:`265`)
-- Introduce ``junifer.preprocess.fsl.apply_warper._ApplyWarper`` to wrap FSL's
- ``applywarp`` by `Synchon Mandal`_ (:gh:`266`)
-- Introduce :class:`.BOLDWarper` for warping BOLD data via FSL's ``applywarp``
- by `Synchon Mandal`_ (:gh:`267`)
-- Introduce :class:`.DMCC13Benchmark` to access `DMCC13benchmark dataset
- `_ by `Synchon
- Mandal`_ (:gh:`271`)
-- Add ``Brainnetome 246`` parcellation to ``junifer.data`` by `Synchon Mandal`_
- (:gh:`275`)
-- Introduce
- ``junifer.preprocess.ants.ants_apply_transforms_warper._AntsApplyTransformsWarper``
- to wrap ANTs' ``antsApplyTransforms`` by `Synchon Mandal`_ (:gh:`293`)
-- Introduce :func:`.run_ext_cmd` to take care of the boilerplate code for
- running external commands from FSL, ANTs and others by `Synchon Mandal`_
- (:gh:`295`)
-- Introduce :func:`.get_xfm` to fetch transformation files for moving between
- template spaces by `Synchon Mandal`_ (:gh:`297`)
-- Introduce :func:`.get_template` to fetch template space image tailored to a
- target data by `Synchon Mandal`_ (:gh:`298`)
-- Add support for on-the-fly template space transformation in
- :func:`.get_parcellation` and :func:`.get_mask` to allow parcellation and
- mask in different template spaces to work with a ``DataGrabber``'s data in a
- specified template space. (:gh:`299`)
-- Introduce :class:`.SpaceWarper` for warping ``T1w``, ``BOLD``, ``VBM_GM``,
- ``VBM_WM``, ``fALFF``, ``GCOR`` and ``LCOR`` data to other spaces by `Synchon
- Mandal`_ (:gh:`301`)
-- Introduce :class:`.QueueContextAdapter` as an abstract base class for job
- queueing and :class:`.HTCondorAdapter` as its implementation for HTCondor by
- `Synchon Mandal`_ (:gh:`309`)
-
-
-Miscellaneous
-^^^^^^^^^^^^^
-
-- Update dependencies requirements by `Fede Raimondo`_ (:gh:`253`)
-- Pin ``ruff`` to ``0.1.0`` as the lowest version and update ``pre-commit``
- config by `Synchon Mandal`_ (:gh:`261`)
-- Add support for accessing FSL via Docker wrapper along with ``flirt``,
- ``applywarp`` and ``std2imgcoord`` commands by `Synchon Mandal`_ (:gh:`262`)
-- Improve documentation, packaging and code style by `Synchon Mandal`_
- (:gh:`269`)
-- Add support for Python 3.12 and make Python 3.11 the base for code coverage
- and CI checks by `Synchon Mandal`_ (:gh:`270`)
-- Add support for accessing ANTs via Docker wrapper along with
- ``antsApplyTransforms`` and ``antsApplyTransformsToPoints`` by `Synchon
- Mandal`_ (:gh:`277`)
-- Make the external tool wrappers output to stderr instead of stdout by
- `Synchon Mandal`_ (:gh:`279`)
-- Add support for accessing FSL ``img2imgcoord`` via Docker wrapper command by
- `Synchon Mandal`_ (:gh:`281`)
-- Make :class:`.BOLDWarper` tool-agnostic by moving it from
- ``junifer.preprocess.fsl`` to :mod:`junifer.preprocess` by `Synchon Mandal`_
- (:gh:`288`)
-- Add support for accessing ANTs' ``ResampleImage`` via Docker wrapper by
- `Synchon Mandal`_ (:gh:`293`)
-- Update ``pyproject.toml`` and add FAIR shield in ``README.md`` by `Synchon
- Mandal`_ (:gh:`294`)
-- Update dependency listing in ``pyproject.toml``, add
- ``.github/dependabot.yml`` to auto-update GitHub Actions, add ``ANTs`` and
- ``FSL`` installation in CI and improve general code style by `Synchon
- Mandal`_ (:gh:`300`)
-
-
-Deprecations and Removals
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-- Deprecate :class:`.BOLDWarper` and mark for removal in v0.0.4 by `Synchon
- Mandal`_ (:gh:`301`)
-
-
-Junifer 0.0.3 (2023-07-21)
---------------------------
-
-Bugfixes
-^^^^^^^^
-
-- Enable YAML 1.2 support and allow multiline strings in YAML which would not
- work earlier by `Synchon Mandal`_ (:gh:`223`)
-- Handle ``datalad.IncompleteResultsError`` exception for partial clone in
- :class:`.DataladDataGrabber` by `Synchon Mandal`_ (:gh:`235`)
-
-
-API Changes
-^^^^^^^^^^^
-
-- Expose ``types`` parameter for :class:`.DataladAOMICID1000`,
- :class:`.DataladAOMICPIOP1`, :class:`.DataladAOMICPIOP2` and
- :class:`.JuselessUCLA` by `Synchon Mandal`_ (:gh:`132`)
-- Rename ``junifer.testing.datagrabbers.SPMAuditoryTestingDatagrabber`` to
- :class:`.SPMAuditoryTestingDataGrabber` and
- ``junifer.testing.datagrabbers.OasisVBMTestingDatagrabber`` to
- :class:`.OasisVBMTestingDataGrabber` by `Synchon Mandal`_ (:gh:`222`)
-- Add :meth:`.BaseFeatureStorage.read` method for storage-like objects by
- `Synchon Mandal`_ (:gh:`236`)
-
-
-Improved Documentation
-^^^^^^^^^^^^^^^^^^^^^^
-
-- Improve general prose, formatting and code blocks in docs and set line length
- for ``.rst`` files to 80 by `Synchon Mandal`_ (:gh:`220`)
-- Update ``julearn`` example under ``examples`` by `Synchon Mandal`_
- (:gh:`242`)
-
-
-Enhancements
-^^^^^^^^^^^^
-
-- Change validation of ``types`` against ``patterns`` to allow a subset of
- ``patterns``'s types to be used for ``DataGrabber`` data fetch by `Synchon
- Mandal`_ (:gh:`132`)
-- Rename instances of "Datagrabber" to "DataGrabber" especially in
- ``junifer.testing`` to be consistent by `Synchon Mandal`_ (:gh:`222`)
-- Use ``ruamel.yaml`` instead of ``pyyaml`` as YAML I/O library by `Synchon
- Mandal`_ (:gh:`223`)
-- Adopt ``DataGrabber`` consistently throughout codebase to match with the
- documentation by `Synchon Mandal`_ (:gh:`226`)
-- Adopt ``DataReader`` consistently throughout codebase to match with the
- documentation by `Synchon Mandal`_ (:gh:`227`)
-- Enable ``stdout`` and ``stderr`` capture for AFNI commands by `Synchon
- Mandal`_ (:gh:`234`)
-- Adapt :meth:`.HDF5FeatureStorage.read_df` due to addition of
- :meth:`.HDF5FeatureStorage.read` by `Synchon Mandal`_ (:gh:`236`)
-
-
-Features
-^^^^^^^^
-
-- Add ``AICHA v1`` and ``AICHA v2`` parcellations to ``junifer.data`` by
- `Synchon Mandal`_ (:gh:`173`)
-- Add ``Shen 2013``, ``Shen 2015`` and ``Shen 2019`` parcellations to
- ``junifer.data`` by `Synchon Mandal`_ (:gh:`184`)
-- Add ``Yan 2023`` parcellation to ``junifer.data`` by `Synchon Mandal`_
- (:gh:`225`)
-- Introduce :mod:`.onthefly` sub-module and :func:`.read_transform` for quick
- transform operations on stored data by `Synchon Mandal`_ (:gh:`237`)
-
-
-Miscellaneous
-^^^^^^^^^^^^^
-
-- Consistent docstrings for pytest fixtures used in the test suite by `Synchon
- Mandal`_ (:gh:`228`)
-- Adopt ``ruff`` as the only linter for the codebase by `Synchon Mandal`_
- (:gh:`229`)
-- Improve ``codespell`` support by fixing typos in documentation by `Synchon
- Mandal`_ (:gh:`230`)
-- Adopt ``pre-commit`` for adding and managing git pre-commit hooks by
- `Synchon Mandal`_ (:gh:`232`)
-- Improve docstrings and code style and parametrize remaining tests for
- ``junifer.data.parcellations`` by `Synchon Mandal`_ (:gh:`238`)
-- Bump ``numpy`` version constraint to ``>=1.24,<1.26`` by `Synchon Mandal`_
- (:gh:`241`)
-
-
-Junifer 0.0.2 (2023-03-31)
---------------------------
-
-Bugfixes
-^^^^^^^^
-
-- Fix a bug in which relative storage URIs will be computed relative to the CWD
- and not to the location of the YAML file by `Fede Raimondo`_. (:gh:`127`)
-- Fix ``junifer run`` to respect preprocess step specified in the pipeline by
- `Synchon Mandal`_ (:gh:`159`)
-- Fix a bug in which only ``REST1`` and ``REST2`` tasks could be accessed in
- :class:`.DataladHCP1200` and :class:`.HCP1200` datagrabbers by `Fede
- Raimondo`_ (:gh:`183`)
-- Fix a bug in which fitting a marker (e.g. ``SphereAggregation``) on a
- specific type (e.g.: ``BOLD``) will fail if another non-supported type (e.g.:
- ``BOLD_confounds``) is present in the data object by `Fede Raimondo`_
- (:gh:`185`)
-- Fix :class:`.ALFFParcels`, :class:`.ALFFSpheres`, :class:`.ReHoSpheres` and
- :class:`.ReHoParcels` pass the ``extra_input`` parameter by `Fede Raimondo`_
- (:gh:`187`)
-- Fix several markers that did not properly handle the ``extra_input``
- parameter by `Fede Raimondo`_ (:gh:`189`)
-- Fix a bug in which relative paths in the YAML ``with`` directive would be
- computed relative to the current working directory of the process instead of
- the location of the YAML file by `Fede Raimondo`_. (:gh:`191`)
-- Fix an issue with datalad cache and locks in which the user-specific
- configuration might create a conflict in high throughput systems by `Fede
- Raimondo`_ (:gh:`192`)
-- Fix a bug in which :class:`.ParcelAggregation` could yield duplicated column
- names if two or more parcels were used and label names were not unique by
- `Fede Raimondo`_ (:gh:`194`)
-- Fix a bug in which :func:`.count` will not be correctly applied across an
- axis by `Fede Raimondo`_ (:gh:`195`)
-- Fix an issue with datalad cache and locks in which the overridden settings in
- Junifer were not propagated to subprocesses, resulting in using the default
- settings by `Fede Raimondo`_ (:gh:`199`)
-- Fix a bug in which :func:`.get_mask` fails for FunctionalConnectivityBase
- class, because of missing extra_input parameter by `Leonard Sasse`_
- (:gh:`200`)
-- Fix the output of :class:`.RSSETSMarker` to be 2D by `Synchon Mandal`_
- (:gh:`215`)
-
-
-API Changes
-^^^^^^^^^^^
-
-- Add ``confounds_format`` parameter to :class:`.PatternDataGrabber`
- constructor for improved handling of confounds specified via
- ``BOLD_confounds`` data type by `Synchon Mandal`_ (:gh:`158`)
-- Rename ``store_table()`` to ``store_vector()`` for storage-like objects and
- adapt marker-like objects to use ``"vector"`` in place of ``"table"`` for
- storage. Also, improve the logic of storing vectors by `Synchon Mandal`_
- (:gh:`181`)
-- Add ``ica_fix`` parameter to :class:`.DataladHCP1200` and :class:`.HCP1200`
- datagrabbers to allow for selecting data processed with ICA+FIX. Default
- value is ``False`` which changes behaviour since 0.0.1 release. By `Fede
- Raimondo`_ (:gh:`183`)
-- Add ``pre_run`` parameter to ``_queue_condor`` by `Fede Raimondo`_
- (:gh:`188`)
-- Expose ``allow_overlap`` parameter in :class:`.SphereAggregation` and
- related markers by `Fede Raimondo`_ (:gh:`190`)
-- Rename ``AmplitudeLowFrequencyFluctuationParcels`` and
- ``AmplitudeLowFrequencyFluctuationSpheres`` to :class:`.ALFFParcels` and
- :class:`.ALFFSpheres` by `Synchon Mandal`_ (:gh:`216`)
-
-
-Improved Documentation
-^^^^^^^^^^^^^^^^^^^^^^
-
-- Add more documentation on registering parcellations, coordinates, and masks
- by `Leonard Sasse`_ (:gh:`166`)
-- Migrate and document changelog creation and maintenance via ``towncrier`` by
- `Synchon Mandal`_ (:gh:`203`)
-- Add copy button to documentation code blocks by `Synchon Mandal`_ (:gh:`205`)
-- Add sections *starting* and *help* in the documentation by `Fede Raimondo`_
- (:gh:`210`)
-- Shorten Sphinx references across code and docs, and add ``black`` shield in
- README by `Synchon Mandal`_ (:gh:`218`)
-
-
-Enhancements
-^^^^^^^^^^^^
-
-- Organize functional connectivity markers in
- ``junifer.markers.functional_connectivity`` by `Synchon Mandal`_ (:gh:`107`)
-- Change HCP datagrabber tests to decrease CI running time by `Fede Raimondo`_
- (:gh:`155`)
-- Allow :class:`.PartlyCloudyTestingDataGrabber` to be accessible via ``import
- junifer.testing.registry`` by `Synchon Mandal`_ (:gh:`160`)
-- Update docstrings and fix typo in log message by `Synchon Mandal`_
- (:gh:`165`)
-- Add fMRIPrep brain masks to the datagrabber patterns for all datagrabbers in
- the aomic sub-package by `Leonard Sasse`_ (:gh:`177`)
-- Improved logging output for preprocessing, collecting and pipeline building
- from YAML by `Fede Raimondo`_ (:gh:`185`)
-- Allow for empty spheres in :class:`.JuniferNiftiSpheresMasker`, that will
- result in NaNs. Also, modify the behaviour of the ``collect`` parameter in
- HTCondor ``queue`` function to run a collect job even if some of the previous
- jobs fail. This is useful to collect the results of a pipeline even if some
- of the jobs fail by `Fede Raimondo`_ (:gh:`190`)
-- Allow for empty parcels in :class:`.ParcelAggregation`, that will result in
- NaNs by `Fede Raimondo`_ (:gh:`194`)
-- Improve metadata and data I/O for :class:`.HDF5FeatureStorage` by `Synchon
- Mandal`_ (:gh:`196`)
-- Force datalad to be non-interactive on *queued* jobs by `Fede Raimondo`_
- (:gh:`201`)
-- Add missing ``abstractmethod`` decorators for ``get_valid_inputs`` methods of
- :class:`.BaseMarker` and :class:`.BasePreprocessor` by `Synchon Mandal`_
- (:gh:`214`)
-
-
-Features
-^^^^^^^^
-
-- Add :class:`.EdgeCentricFCParcels` and :class:`.EdgeCentricFCSpheres` by
- `Leonard Sasse`_ (:gh:`64`)
-- Expose a :func:`.merge_parcellations` function to merge a list of
- parcellations by `Leonard Sasse`_ (:gh:`146`)
-- Add support for HDF5 feature storage via :class:`.HDF5FeatureStorage` by
- `Synchon Mandal`_ (:gh:`147`)
-- Add :class:`.TemporalSNRParcels` and :class:`.TemporalSNRSpheres` by `Leonard
- Sasse`_ (:gh:`163`)
-- Add support for ``Power`` coordinates by `Synchon Mandal`_ (:gh:`167`)
-- Add support for ``Dosenbach`` coordinates by `Synchon Mandal`_ (:gh:`168`)
-- Add support for nilearn computed masks (``compute_epi_mask``,
- ``compute_brain_mask``, ``compute_background_mask``,
- ``fetch_icbm152_brain_gm_mask``) by `Fede Raimondo`_ (:gh:`175`)
-- Add aggregation function :func:`.count` that returns the number of elements
- in a given axis. This allows to count the number of voxels per sphere/parcel
- when used as ``method`` in markers by `Fede Raimondo`_ (:gh:`190`)
-
-
-Junifer 0.0.1 (2022-12-20)
---------------------------
-
-Bugfixes
-^^^^^^^^
-
-- Fix a bug in which a :class:`.PatternDataGrabber` would now work with
- relative ``datadir`` paths (reported by `Leonard Sasse`_, fixed by
- `Fede Raimondo`_) (:gh:`96`, :gh:`98`)
-
-- Fix a bug in which :class:`.DataladAOMICPIOP2` datagrabber did not use user
- input to constrain elements based on tasks by `Leonard Sasse`_ (:gh:`105`)
-
-- Fix a bug in which a datalad dataset could remove a user-cloned dataset by
- `Fede Raimondo`_ (:gh:`53`)
-
-- Fix a bug in which CLI command would not work using elements with more than
- one field by `Fede Raimondo`_
-
-- Fix a bug in which the generated DAG for HTCondor will not work by
- `Fede Raimondo`_ (:gh:`143`)
-
-
-API Changes
-^^^^^^^^^^^
-
-- Change the ``single_output`` default parameter in storage classes from
- ``False`` to ``True`` by `Fede Raimondo`_ (:gh:`134`)
-
-
-Improved Documentation
-^^^^^^^^^^^^^^^^^^^^^^
-
-- Add an example how to use ``junifer`` and ``julearn`` in one pipeline to
- extract features and do machine learning by `Leonard Sasse`_,
- `Nicolas Nieto`_, and `Sami Hamdan`_ (:gh:`40`)
-
-- Add documentation for the datagrabbers by `Leonard Sasse`_,
- `Nicolas Nieto`_, and `Sami Hamdan`_
-
-- Change documentation template to furo. Fix references and standardize
- documentation by `Fede Raimondo`_ (:gh:`114`)
-
-
-Enhancements
-^^^^^^^^^^^^
-
-- Add comments to :class:`.DataladDataGrabber` datagrabber and change to use
- ``datalad-clone`` instead of ``datalad-install`` by `Benjamin Poldrack`_
- (:gh:`55`)
-
-- Upgrade storage interface for storage-like objects by `Synchon Mandal`_
- (:gh:`84`)
-
-- Add missing type annotations by `Synchon Mandal`_ (:gh:`74`)
-
-- Refactor markers ``on`` attribute and ``get_valid_inputs`` to verify that the
- marker can be computed on the input data types by `Fede Raimondo`_
-
-- Add test for :class:`.DataladHCP1200` datagrabber by `Synchon Mandal`_
- (:gh:`93`)
-
-- Refactor :class:`.DataladAOMICID1000` slightly by `Leonard Sasse`_ (:gh:`94`)
-
-- Rename "atlas" to "parcellation" by `Fede Raimondo`_ (:gh:`116`)
-
-- Refactor the :class:`.BaseDataGrabber` class to allow for easier subclassing
- by `Fede Raimondo`_ (:gh:`123`)
-
-- Allow custom aggregation method for :class:`.SphereAggregation` by
- `Synchon Mandal`_ (:gh:`102`)
-
-- Add support for "masks" by `Fede Raimondo`_ (:gh:`79`)
-
-- Allow :class:`.ParcelAggregation` to apply multiple parcellations at once by
- `Fede Raimondo`_ (:gh:`131`)
-
-- Refactor :class:`.PipelineStepMixin` to improve its implementation and
- validation for pipeline steps by `Synchon Mandal`_ (:gh:`152`)
-
-
-Features
-^^^^^^^^
-
-- Implement :class:`.SPMAuditoryTestingDataGrabber` datagrabber by
- `Fede Raimondo`_ (:gh:`52`)
-
-- Implement matrix storage in SQliteFeatureStorage by `Fede Raimondo`_
- (:gh:`42`)
-
-- Implement :class:`.FunctionalConnectivityParcels` marker for functional
- connectivity using a parcellation by `Amir Omidvarnia`_ and
- `Kaustubh R. Patil`_ (:gh:`41`)
-
-- Implement :func:`.register_coordinates`, :func:`.list_coordinates` and
- :func:`.load_coordinates` by `Fede Raimondo`_ (:gh:`11`)
-
-- Add :class:`.DataladAOMICID1000` datagrabber for AOMIC ID1000 dataset
- including tests and creation of mock dataset for testing by
- `Vera Komeyer`_ and `Xuan Li`_ (:gh:`60`)
-
-- Add support to access other input in the data object in the ``compute`` method
- by `Fede Raimondo`_
-
-- Implement :class:`.RSSETSMarker` marker by `Leonard Sasse`_, `Nicolas Nieto`_
- and `Sami Hamdan`_ (:gh:`51`)
-
-- Implement :class:`.SphereAggregation` marker by `Fede Raimondo`_ (:gh:`83`)
-
-- Implement :class:`.DataladAOMICPIOP1` and :class:`.DataladAOMICPIOP2`
- datagrabbers for AOMIC PIOP1 and PIOP2 datasets respectively by
- `Leonard Sasse`_ (:gh:`94`)
-
-- Implement :class:`.JuselessDataladCamCANVBM` datagrabber by `Leonard Sasse`_
- (:gh:`99`)
-
-- Implement :class:`.JuselessDataladIXIVBM` CAT output datagrabber for juseless
- by `Leonard Sasse`_ (:gh:`48`)
-
-- Add ``junifer wtf`` to report environment details by `Synchon Mandal`_
- (:gh:`33`)
-
-- Add ``junifer selftest`` to report environment details by `Synchon Mandal`_
- (:gh:`9`)
-
-- Implement :class:`.JuselessDataladAOMICID1000VBM` datagrabber for accessing
- AOMIC ID1000 VBM from juseless by `Felix Hoffstaedter`_ and `Synchon Mandal`_
- (:gh:`57`)
-
-- Add :class:`.fMRIPrepConfoundRemover` by `Fede Raimondo`_ and `Leonard Sasse`_
- (:gh:`111`)
-
-- Implement :class:`.CrossParcellationFC` marker by `Leonard Sasse`_ and
- `Kaustubh R. Patil`_ (:gh:`85`)
-
-- Add :class:`.JuselessUCLA` datagrabber for the UCLA dataset available on
- juseless by `Leonard Sasse`_ (:gh:`118`)
-
-- Introduce a singleton decorator for marker computations by `Synchon Mandal`_
- (:gh:`151`)
-
-- Implement :class:`.ReHoParcels` and :class:`.ReHoSpheres` markers by
- `Synchon Mandal`_ (:gh:`36`)
-
-- Implement :class:`.ALFFParcels` and :class:`.ALFFSpheres` markers by
- `Fede Raimondo`_ (:gh:`35`)
-
-
-Miscellaneous
-^^^^^^^^^^^^^
-
-- Create the repository based on the mockup by `Fede Raimondo`_
diff --git a/pr-preview/pr-273/_static/basic.css b/pr-preview/pr-273/_static/basic.css
deleted file mode 100644
index 30fee9d0f..000000000
--- a/pr-preview/pr-273/_static/basic.css
+++ /dev/null
@@ -1,925 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/* -- main layout ----------------------------------------------------------- */
-
-div.clearer {
- clear: both;
-}
-
-div.section::after {
- display: block;
- content: '';
- clear: left;
-}
-
-/* -- relbar ---------------------------------------------------------------- */
-
-div.related {
- width: 100%;
- font-size: 90%;
-}
-
-div.related h3 {
- display: none;
-}
-
-div.related ul {
- margin: 0;
- padding: 0 0 0 10px;
- list-style: none;
-}
-
-div.related li {
- display: inline;
-}
-
-div.related li.right {
- float: right;
- margin-right: 5px;
-}
-
-/* -- sidebar --------------------------------------------------------------- */
-
-div.sphinxsidebarwrapper {
- padding: 10px 5px 0 10px;
-}
-
-div.sphinxsidebar {
- float: left;
- width: 230px;
- margin-left: -100%;
- font-size: 90%;
- word-wrap: break-word;
- overflow-wrap : break-word;
-}
-
-div.sphinxsidebar ul {
- list-style: none;
-}
-
-div.sphinxsidebar ul ul,
-div.sphinxsidebar ul.want-points {
- margin-left: 20px;
- list-style: square;
-}
-
-div.sphinxsidebar ul ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-div.sphinxsidebar form {
- margin-top: 10px;
-}
-
-div.sphinxsidebar input {
- border: 1px solid #98dbcc;
- font-family: sans-serif;
- font-size: 1em;
-}
-
-div.sphinxsidebar #searchbox form.search {
- overflow: hidden;
-}
-
-div.sphinxsidebar #searchbox input[type="text"] {
- float: left;
- width: 80%;
- padding: 0.25em;
- box-sizing: border-box;
-}
-
-div.sphinxsidebar #searchbox input[type="submit"] {
- float: left;
- width: 20%;
- border-left: none;
- padding: 0.25em;
- box-sizing: border-box;
-}
-
-
-img {
- border: 0;
- max-width: 100%;
-}
-
-/* -- search page ----------------------------------------------------------- */
-
-ul.search {
- margin: 10px 0 0 20px;
- padding: 0;
-}
-
-ul.search li {
- padding: 5px 0 5px 20px;
- background-image: url(file.png);
- background-repeat: no-repeat;
- background-position: 0 7px;
-}
-
-ul.search li a {
- font-weight: bold;
-}
-
-ul.search li p.context {
- color: #888;
- margin: 2px 0 0 30px;
- text-align: left;
-}
-
-ul.keywordmatches li.goodmatch a {
- font-weight: bold;
-}
-
-/* -- index page ------------------------------------------------------------ */
-
-table.contentstable {
- width: 90%;
- margin-left: auto;
- margin-right: auto;
-}
-
-table.contentstable p.biglink {
- line-height: 150%;
-}
-
-a.biglink {
- font-size: 1.3em;
-}
-
-span.linkdescr {
- font-style: italic;
- padding-top: 5px;
- font-size: 90%;
-}
-
-/* -- general index --------------------------------------------------------- */
-
-table.indextable {
- width: 100%;
-}
-
-table.indextable td {
- text-align: left;
- vertical-align: top;
-}
-
-table.indextable ul {
- margin-top: 0;
- margin-bottom: 0;
- list-style-type: none;
-}
-
-table.indextable > tbody > tr > td > ul {
- padding-left: 0em;
-}
-
-table.indextable tr.pcap {
- height: 10px;
-}
-
-table.indextable tr.cap {
- margin-top: 10px;
- background-color: #f2f2f2;
-}
-
-img.toggler {
- margin-right: 3px;
- margin-top: 3px;
- cursor: pointer;
-}
-
-div.modindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-div.genindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-/* -- domain module index --------------------------------------------------- */
-
-table.modindextable td {
- padding: 2px;
- border-collapse: collapse;
-}
-
-/* -- general body styles --------------------------------------------------- */
-
-div.body {
- min-width: 360px;
- max-width: 800px;
-}
-
-div.body p, div.body dd, div.body li, div.body blockquote {
- -moz-hyphens: auto;
- -ms-hyphens: auto;
- -webkit-hyphens: auto;
- hyphens: auto;
-}
-
-a.headerlink {
- visibility: hidden;
-}
-
-a:visited {
- color: #551A8B;
-}
-
-h1:hover > a.headerlink,
-h2:hover > a.headerlink,
-h3:hover > a.headerlink,
-h4:hover > a.headerlink,
-h5:hover > a.headerlink,
-h6:hover > a.headerlink,
-dt:hover > a.headerlink,
-caption:hover > a.headerlink,
-p.caption:hover > a.headerlink,
-div.code-block-caption:hover > a.headerlink {
- visibility: visible;
-}
-
-div.body p.caption {
- text-align: inherit;
-}
-
-div.body td {
- text-align: left;
-}
-
-.first {
- margin-top: 0 !important;
-}
-
-p.rubric {
- margin-top: 30px;
- font-weight: bold;
-}
-
-img.align-left, figure.align-left, .figure.align-left, object.align-left {
- clear: left;
- float: left;
- margin-right: 1em;
-}
-
-img.align-right, figure.align-right, .figure.align-right, object.align-right {
- clear: right;
- float: right;
- margin-left: 1em;
-}
-
-img.align-center, figure.align-center, .figure.align-center, object.align-center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-img.align-default, figure.align-default, .figure.align-default {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.align-left {
- text-align: left;
-}
-
-.align-center {
- text-align: center;
-}
-
-.align-default {
- text-align: center;
-}
-
-.align-right {
- text-align: right;
-}
-
-/* -- sidebars -------------------------------------------------------------- */
-
-div.sidebar,
-aside.sidebar {
- margin: 0 0 0.5em 1em;
- border: 1px solid #ddb;
- padding: 7px;
- background-color: #ffe;
- width: 40%;
- float: right;
- clear: right;
- overflow-x: auto;
-}
-
-p.sidebar-title {
- font-weight: bold;
-}
-
-nav.contents,
-aside.topic,
-div.admonition, div.topic, blockquote {
- clear: left;
-}
-
-/* -- topics ---------------------------------------------------------------- */
-
-nav.contents,
-aside.topic,
-div.topic {
- border: 1px solid #ccc;
- padding: 7px;
- margin: 10px 0 10px 0;
-}
-
-p.topic-title {
- font-size: 1.1em;
- font-weight: bold;
- margin-top: 10px;
-}
-
-/* -- admonitions ----------------------------------------------------------- */
-
-div.admonition {
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 7px;
-}
-
-div.admonition dt {
- font-weight: bold;
-}
-
-p.admonition-title {
- margin: 0px 10px 5px 0px;
- font-weight: bold;
-}
-
-div.body p.centered {
- text-align: center;
- margin-top: 25px;
-}
-
-/* -- content of sidebars/topics/admonitions -------------------------------- */
-
-div.sidebar > :last-child,
-aside.sidebar > :last-child,
-nav.contents > :last-child,
-aside.topic > :last-child,
-div.topic > :last-child,
-div.admonition > :last-child {
- margin-bottom: 0;
-}
-
-div.sidebar::after,
-aside.sidebar::after,
-nav.contents::after,
-aside.topic::after,
-div.topic::after,
-div.admonition::after,
-blockquote::after {
- display: block;
- content: '';
- clear: both;
-}
-
-/* -- tables ---------------------------------------------------------------- */
-
-table.docutils {
- margin-top: 10px;
- margin-bottom: 10px;
- border: 0;
- border-collapse: collapse;
-}
-
-table.align-center {
- margin-left: auto;
- margin-right: auto;
-}
-
-table.align-default {
- margin-left: auto;
- margin-right: auto;
-}
-
-table caption span.caption-number {
- font-style: italic;
-}
-
-table caption span.caption-text {
-}
-
-table.docutils td, table.docutils th {
- padding: 1px 8px 1px 5px;
- border-top: 0;
- border-left: 0;
- border-right: 0;
- border-bottom: 1px solid #aaa;
-}
-
-th {
- text-align: left;
- padding-right: 5px;
-}
-
-table.citation {
- border-left: solid 1px gray;
- margin-left: 1px;
-}
-
-table.citation td {
- border-bottom: none;
-}
-
-th > :first-child,
-td > :first-child {
- margin-top: 0px;
-}
-
-th > :last-child,
-td > :last-child {
- margin-bottom: 0px;
-}
-
-/* -- figures --------------------------------------------------------------- */
-
-div.figure, figure {
- margin: 0.5em;
- padding: 0.5em;
-}
-
-div.figure p.caption, figcaption {
- padding: 0.3em;
-}
-
-div.figure p.caption span.caption-number,
-figcaption span.caption-number {
- font-style: italic;
-}
-
-div.figure p.caption span.caption-text,
-figcaption span.caption-text {
-}
-
-/* -- field list styles ----------------------------------------------------- */
-
-table.field-list td, table.field-list th {
- border: 0 !important;
-}
-
-.field-list ul {
- margin: 0;
- padding-left: 1em;
-}
-
-.field-list p {
- margin: 0;
-}
-
-.field-name {
- -moz-hyphens: manual;
- -ms-hyphens: manual;
- -webkit-hyphens: manual;
- hyphens: manual;
-}
-
-/* -- hlist styles ---------------------------------------------------------- */
-
-table.hlist {
- margin: 1em 0;
-}
-
-table.hlist td {
- vertical-align: top;
-}
-
-/* -- object description styles --------------------------------------------- */
-
-.sig {
- font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
-}
-
-.sig-name, code.descname {
- background-color: transparent;
- font-weight: bold;
-}
-
-.sig-name {
- font-size: 1.1em;
-}
-
-code.descname {
- font-size: 1.2em;
-}
-
-.sig-prename, code.descclassname {
- background-color: transparent;
-}
-
-.optional {
- font-size: 1.3em;
-}
-
-.sig-paren {
- font-size: larger;
-}
-
-.sig-param.n {
- font-style: italic;
-}
-
-/* C++ specific styling */
-
-.sig-inline.c-texpr,
-.sig-inline.cpp-texpr {
- font-family: unset;
-}
-
-.sig.c .k, .sig.c .kt,
-.sig.cpp .k, .sig.cpp .kt {
- color: #0033B3;
-}
-
-.sig.c .m,
-.sig.cpp .m {
- color: #1750EB;
-}
-
-.sig.c .s, .sig.c .sc,
-.sig.cpp .s, .sig.cpp .sc {
- color: #067D17;
-}
-
-
-/* -- other body styles ----------------------------------------------------- */
-
-ol.arabic {
- list-style: decimal;
-}
-
-ol.loweralpha {
- list-style: lower-alpha;
-}
-
-ol.upperalpha {
- list-style: upper-alpha;
-}
-
-ol.lowerroman {
- list-style: lower-roman;
-}
-
-ol.upperroman {
- list-style: upper-roman;
-}
-
-:not(li) > ol > li:first-child > :first-child,
-:not(li) > ul > li:first-child > :first-child {
- margin-top: 0px;
-}
-
-:not(li) > ol > li:last-child > :last-child,
-:not(li) > ul > li:last-child > :last-child {
- margin-bottom: 0px;
-}
-
-ol.simple ol p,
-ol.simple ul p,
-ul.simple ol p,
-ul.simple ul p {
- margin-top: 0;
-}
-
-ol.simple > li:not(:first-child) > p,
-ul.simple > li:not(:first-child) > p {
- margin-top: 0;
-}
-
-ol.simple p,
-ul.simple p {
- margin-bottom: 0;
-}
-
-aside.footnote > span,
-div.citation > span {
- float: left;
-}
-aside.footnote > span:last-of-type,
-div.citation > span:last-of-type {
- padding-right: 0.5em;
-}
-aside.footnote > p {
- margin-left: 2em;
-}
-div.citation > p {
- margin-left: 4em;
-}
-aside.footnote > p:last-of-type,
-div.citation > p:last-of-type {
- margin-bottom: 0em;
-}
-aside.footnote > p:last-of-type:after,
-div.citation > p:last-of-type:after {
- content: "";
- clear: both;
-}
-
-dl.field-list {
- display: grid;
- grid-template-columns: fit-content(30%) auto;
-}
-
-dl.field-list > dt {
- font-weight: bold;
- word-break: break-word;
- padding-left: 0.5em;
- padding-right: 5px;
-}
-
-dl.field-list > dd {
- padding-left: 0.5em;
- margin-top: 0em;
- margin-left: 0em;
- margin-bottom: 0em;
-}
-
-dl {
- margin-bottom: 15px;
-}
-
-dd > :first-child {
- margin-top: 0px;
-}
-
-dd ul, dd table {
- margin-bottom: 10px;
-}
-
-dd {
- margin-top: 3px;
- margin-bottom: 10px;
- margin-left: 30px;
-}
-
-.sig dd {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-
-.sig dl {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-
-dl > dd:last-child,
-dl > dd:last-child > :last-child {
- margin-bottom: 0;
-}
-
-dt:target, span.highlighted {
- background-color: #fbe54e;
-}
-
-rect.highlighted {
- fill: #fbe54e;
-}
-
-dl.glossary dt {
- font-weight: bold;
- font-size: 1.1em;
-}
-
-.versionmodified {
- font-style: italic;
-}
-
-.system-message {
- background-color: #fda;
- padding: 5px;
- border: 3px solid red;
-}
-
-.footnote:target {
- background-color: #ffa;
-}
-
-.line-block {
- display: block;
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
-.line-block .line-block {
- margin-top: 0;
- margin-bottom: 0;
- margin-left: 1.5em;
-}
-
-.guilabel, .menuselection {
- font-family: sans-serif;
-}
-
-.accelerator {
- text-decoration: underline;
-}
-
-.classifier {
- font-style: oblique;
-}
-
-.classifier:before {
- font-style: normal;
- margin: 0 0.5em;
- content: ":";
- display: inline-block;
-}
-
-abbr, acronym {
- border-bottom: dotted 1px;
- cursor: help;
-}
-
-.translated {
- background-color: rgba(207, 255, 207, 0.2)
-}
-
-.untranslated {
- background-color: rgba(255, 207, 207, 0.2)
-}
-
-/* -- code displays --------------------------------------------------------- */
-
-pre {
- overflow: auto;
- overflow-y: hidden; /* fixes display issues on Chrome browsers */
-}
-
-pre, div[class*="highlight-"] {
- clear: both;
-}
-
-span.pre {
- -moz-hyphens: none;
- -ms-hyphens: none;
- -webkit-hyphens: none;
- hyphens: none;
- white-space: nowrap;
-}
-
-div[class*="highlight-"] {
- margin: 1em 0;
-}
-
-td.linenos pre {
- border: 0;
- background-color: transparent;
- color: #aaa;
-}
-
-table.highlighttable {
- display: block;
-}
-
-table.highlighttable tbody {
- display: block;
-}
-
-table.highlighttable tr {
- display: flex;
-}
-
-table.highlighttable td {
- margin: 0;
- padding: 0;
-}
-
-table.highlighttable td.linenos {
- padding-right: 0.5em;
-}
-
-table.highlighttable td.code {
- flex: 1;
- overflow: hidden;
-}
-
-.highlight .hll {
- display: block;
-}
-
-div.highlight pre,
-table.highlighttable pre {
- margin: 0;
-}
-
-div.code-block-caption + div {
- margin-top: 0;
-}
-
-div.code-block-caption {
- margin-top: 1em;
- padding: 2px 5px;
- font-size: small;
-}
-
-div.code-block-caption code {
- background-color: transparent;
-}
-
-table.highlighttable td.linenos,
-span.linenos,
-div.highlight span.gp { /* gp: Generic.Prompt */
- user-select: none;
- -webkit-user-select: text; /* Safari fallback only */
- -webkit-user-select: none; /* Chrome/Safari */
- -moz-user-select: none; /* Firefox */
- -ms-user-select: none; /* IE10+ */
-}
-
-div.code-block-caption span.caption-number {
- padding: 0.1em 0.3em;
- font-style: italic;
-}
-
-div.code-block-caption span.caption-text {
-}
-
-div.literal-block-wrapper {
- margin: 1em 0;
-}
-
-code.xref, a code {
- background-color: transparent;
- font-weight: bold;
-}
-
-h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
- background-color: transparent;
-}
-
-.viewcode-link {
- float: right;
-}
-
-.viewcode-back {
- float: right;
- font-family: sans-serif;
-}
-
-div.viewcode-block:target {
- margin: -1px -10px;
- padding: 0 10px;
-}
-
-/* -- math display ---------------------------------------------------------- */
-
-img.math {
- vertical-align: middle;
-}
-
-div.body div.math p {
- text-align: center;
-}
-
-span.eqno {
- float: right;
-}
-
-span.eqno a.headerlink {
- position: absolute;
- z-index: 1;
-}
-
-div.math:hover a.headerlink {
- visibility: visible;
-}
-
-/* -- printout stylesheet --------------------------------------------------- */
-
-@media print {
- div.document,
- div.documentwrapper,
- div.bodywrapper {
- margin: 0 !important;
- width: 100%;
- }
-
- div.sphinxsidebar,
- div.related,
- div.footer,
- #top-link {
- display: none;
- }
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/binder_badge_logo.svg b/pr-preview/pr-273/_static/binder_badge_logo.svg
deleted file mode 100644
index 327f6b639..000000000
--- a/pr-preview/pr-273/_static/binder_badge_logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/broken_example.png b/pr-preview/pr-273/_static/broken_example.png
deleted file mode 100644
index 4fea24e7d..000000000
Binary files a/pr-preview/pr-273/_static/broken_example.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/check-solid.svg b/pr-preview/pr-273/_static/check-solid.svg
deleted file mode 100644
index 92fad4b5c..000000000
--- a/pr-preview/pr-273/_static/check-solid.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/pr-preview/pr-273/_static/clipboard.min.js b/pr-preview/pr-273/_static/clipboard.min.js
deleted file mode 100644
index 54b3c4638..000000000
--- a/pr-preview/pr-273/_static/clipboard.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * clipboard.js v2.0.8
- * https://clipboardjs.com/
- *
- * Licensed MIT © Zeno Rocha
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1
-
-
-
-
diff --git a/pr-preview/pr-273/_static/copybutton.css b/pr-preview/pr-273/_static/copybutton.css
deleted file mode 100644
index f1916ec7d..000000000
--- a/pr-preview/pr-273/_static/copybutton.css
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copy buttons */
-button.copybtn {
- position: absolute;
- display: flex;
- top: .3em;
- right: .3em;
- width: 1.7em;
- height: 1.7em;
- opacity: 0;
- transition: opacity 0.3s, border .3s, background-color .3s;
- user-select: none;
- padding: 0;
- border: none;
- outline: none;
- border-radius: 0.4em;
- /* The colors that GitHub uses */
- border: #1b1f2426 1px solid;
- background-color: #f6f8fa;
- color: #57606a;
-}
-
-button.copybtn.success {
- border-color: #22863a;
- color: #22863a;
-}
-
-button.copybtn svg {
- stroke: currentColor;
- width: 1.5em;
- height: 1.5em;
- padding: 0.1em;
-}
-
-div.highlight {
- position: relative;
-}
-
-/* Show the copybutton */
-.highlight:hover button.copybtn, button.copybtn.success {
- opacity: 1;
-}
-
-.highlight button.copybtn:hover {
- background-color: rgb(235, 235, 235);
-}
-
-.highlight button.copybtn:active {
- background-color: rgb(187, 187, 187);
-}
-
-/**
- * A minimal CSS-only tooltip copied from:
- * https://codepen.io/mildrenben/pen/rVBrpK
- *
- * To use, write HTML like the following:
- *
- * Short
- */
- .o-tooltip--left {
- position: relative;
- }
-
- .o-tooltip--left:after {
- opacity: 0;
- visibility: hidden;
- position: absolute;
- content: attr(data-tooltip);
- padding: .2em;
- font-size: .8em;
- left: -.2em;
- background: grey;
- color: white;
- white-space: nowrap;
- z-index: 2;
- border-radius: 2px;
- transform: translateX(-102%) translateY(0);
- transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
-}
-
-.o-tooltip--left:hover:after {
- display: block;
- opacity: 1;
- visibility: visible;
- transform: translateX(-100%) translateY(0);
- transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
- transition-delay: .5s;
-}
-
-/* By default the copy button shouldn't show up when printing a page */
-@media print {
- button.copybtn {
- display: none;
- }
-}
diff --git a/pr-preview/pr-273/_static/copybutton.js b/pr-preview/pr-273/_static/copybutton.js
deleted file mode 100644
index 2ea7ff3e2..000000000
--- a/pr-preview/pr-273/_static/copybutton.js
+++ /dev/null
@@ -1,248 +0,0 @@
-// Localization support
-const messages = {
- 'en': {
- 'copy': 'Copy',
- 'copy_to_clipboard': 'Copy to clipboard',
- 'copy_success': 'Copied!',
- 'copy_failure': 'Failed to copy',
- },
- 'es' : {
- 'copy': 'Copiar',
- 'copy_to_clipboard': 'Copiar al portapapeles',
- 'copy_success': '¡Copiado!',
- 'copy_failure': 'Error al copiar',
- },
- 'de' : {
- 'copy': 'Kopieren',
- 'copy_to_clipboard': 'In die Zwischenablage kopieren',
- 'copy_success': 'Kopiert!',
- 'copy_failure': 'Fehler beim Kopieren',
- },
- 'fr' : {
- 'copy': 'Copier',
- 'copy_to_clipboard': 'Copier dans le presse-papier',
- 'copy_success': 'Copié !',
- 'copy_failure': 'Échec de la copie',
- },
- 'ru': {
- 'copy': 'Скопировать',
- 'copy_to_clipboard': 'Скопировать в буфер',
- 'copy_success': 'Скопировано!',
- 'copy_failure': 'Не удалось скопировать',
- },
- 'zh-CN': {
- 'copy': '复制',
- 'copy_to_clipboard': '复制到剪贴板',
- 'copy_success': '复制成功!',
- 'copy_failure': '复制失败',
- },
- 'it' : {
- 'copy': 'Copiare',
- 'copy_to_clipboard': 'Copiato negli appunti',
- 'copy_success': 'Copiato!',
- 'copy_failure': 'Errore durante la copia',
- }
-}
-
-let locale = 'en'
-if( document.documentElement.lang !== undefined
- && messages[document.documentElement.lang] !== undefined ) {
- locale = document.documentElement.lang
-}
-
-let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT;
-if (doc_url_root == '#') {
- doc_url_root = '';
-}
-
-/**
- * SVG files for our copy buttons
- */
-let iconCheck = ``
-
-// If the user specified their own SVG use that, otherwise use the default
-let iconCopy = ``;
-if (!iconCopy) {
- iconCopy = ``
-}
-
-/**
- * Set up copy/paste for code blocks
- */
-
-const runWhenDOMLoaded = cb => {
- if (document.readyState != 'loading') {
- cb()
- } else if (document.addEventListener) {
- document.addEventListener('DOMContentLoaded', cb)
- } else {
- document.attachEvent('onreadystatechange', function() {
- if (document.readyState == 'complete') cb()
- })
- }
-}
-
-const codeCellId = index => `codecell${index}`
-
-// Clears selected text since ClipboardJS will select the text when copying
-const clearSelection = () => {
- if (window.getSelection) {
- window.getSelection().removeAllRanges()
- } else if (document.selection) {
- document.selection.empty()
- }
-}
-
-// Changes tooltip text for a moment, then changes it back
-// We want the timeout of our `success` class to be a bit shorter than the
-// tooltip and icon change, so that we can hide the icon before changing back.
-var timeoutIcon = 2000;
-var timeoutSuccessClass = 1500;
-
-const temporarilyChangeTooltip = (el, oldText, newText) => {
- el.setAttribute('data-tooltip', newText)
- el.classList.add('success')
- // Remove success a little bit sooner than we change the tooltip
- // So that we can use CSS to hide the copybutton first
- setTimeout(() => el.classList.remove('success'), timeoutSuccessClass)
- setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon)
-}
-
-// Changes the copy button icon for two seconds, then changes it back
-const temporarilyChangeIcon = (el) => {
- el.innerHTML = iconCheck;
- setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon)
-}
-
-const addCopyButtonToCodeCells = () => {
- // If ClipboardJS hasn't loaded, wait a bit and try again. This
- // happens because we load ClipboardJS asynchronously.
- if (window.ClipboardJS === undefined) {
- setTimeout(addCopyButtonToCodeCells, 250)
- return
- }
-
- // Add copybuttons to all of our code cells
- const COPYBUTTON_SELECTOR = 'div.highlight pre';
- const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR)
- codeCells.forEach((codeCell, index) => {
- const id = codeCellId(index)
- codeCell.setAttribute('id', id)
-
- const clipboardButton = id =>
- ``
- codeCell.insertAdjacentHTML('afterend', clipboardButton(id))
- })
-
-function escapeRegExp(string) {
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
-}
-
-/**
- * Removes excluded text from a Node.
- *
- * @param {Node} target Node to filter.
- * @param {string} exclude CSS selector of nodes to exclude.
- * @returns {DOMString} Text from `target` with text removed.
- */
-function filterText(target, exclude) {
- const clone = target.cloneNode(true); // clone as to not modify the live DOM
- if (exclude) {
- // remove excluded nodes
- clone.querySelectorAll(exclude).forEach(node => node.remove());
- }
- return clone.innerText;
-}
-
-// Callback when a copy button is clicked. Will be passed the node that was clicked
-// should then grab the text and replace pieces of text that shouldn't be used in output
-function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
- var regexp;
- var match;
-
- // Do we check for line continuation characters and "HERE-documents"?
- var useLineCont = !!lineContinuationChar
- var useHereDoc = !!hereDocDelim
-
- // create regexp to capture prompt and remaining line
- if (isRegexp) {
- regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
- } else {
- regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
- }
-
- const outputLines = [];
- var promptFound = false;
- var gotLineCont = false;
- var gotHereDoc = false;
- const lineGotPrompt = [];
- for (const line of textContent.split('\n')) {
- match = line.match(regexp)
- if (match || gotLineCont || gotHereDoc) {
- promptFound = regexp.test(line)
- lineGotPrompt.push(promptFound)
- if (removePrompts && promptFound) {
- outputLines.push(match[2])
- } else {
- outputLines.push(line)
- }
- gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
- if (line.includes(hereDocDelim) & useHereDoc)
- gotHereDoc = !gotHereDoc
- } else if (!onlyCopyPromptLines) {
- outputLines.push(line)
- } else if (copyEmptyLines && line.trim() === '') {
- outputLines.push(line)
- }
- }
-
- // If no lines with the prompt were found then just use original lines
- if (lineGotPrompt.some(v => v === true)) {
- textContent = outputLines.join('\n');
- }
-
- // Remove a trailing newline to avoid auto-running when pasting
- if (textContent.endsWith("\n")) {
- textContent = textContent.slice(0, -1)
- }
- return textContent
-}
-
-
-var copyTargetText = (trigger) => {
- var target = document.querySelector(trigger.attributes['data-clipboard-target'].value);
-
- // get filtered text
- let exclude = '.linenos';
-
- let text = filterText(target, exclude);
- return formatCopyText(text, '', false, true, true, true, '', '')
-}
-
- // Initialize with a callback so we can modify the text before copy
- const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText})
-
- // Update UI with error/success messages
- clipboard.on('success', event => {
- clearSelection()
- temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success'])
- temporarilyChangeIcon(event.trigger)
- })
-
- clipboard.on('error', event => {
- temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure'])
- })
-}
-
-runWhenDOMLoaded(addCopyButtonToCodeCells)
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/copybutton_funcs.js b/pr-preview/pr-273/_static/copybutton_funcs.js
deleted file mode 100644
index dbe1aaad7..000000000
--- a/pr-preview/pr-273/_static/copybutton_funcs.js
+++ /dev/null
@@ -1,73 +0,0 @@
-function escapeRegExp(string) {
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
-}
-
-/**
- * Removes excluded text from a Node.
- *
- * @param {Node} target Node to filter.
- * @param {string} exclude CSS selector of nodes to exclude.
- * @returns {DOMString} Text from `target` with text removed.
- */
-export function filterText(target, exclude) {
- const clone = target.cloneNode(true); // clone as to not modify the live DOM
- if (exclude) {
- // remove excluded nodes
- clone.querySelectorAll(exclude).forEach(node => node.remove());
- }
- return clone.innerText;
-}
-
-// Callback when a copy button is clicked. Will be passed the node that was clicked
-// should then grab the text and replace pieces of text that shouldn't be used in output
-export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") {
- var regexp;
- var match;
-
- // Do we check for line continuation characters and "HERE-documents"?
- var useLineCont = !!lineContinuationChar
- var useHereDoc = !!hereDocDelim
-
- // create regexp to capture prompt and remaining line
- if (isRegexp) {
- regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')
- } else {
- regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')
- }
-
- const outputLines = [];
- var promptFound = false;
- var gotLineCont = false;
- var gotHereDoc = false;
- const lineGotPrompt = [];
- for (const line of textContent.split('\n')) {
- match = line.match(regexp)
- if (match || gotLineCont || gotHereDoc) {
- promptFound = regexp.test(line)
- lineGotPrompt.push(promptFound)
- if (removePrompts && promptFound) {
- outputLines.push(match[2])
- } else {
- outputLines.push(line)
- }
- gotLineCont = line.endsWith(lineContinuationChar) & useLineCont
- if (line.includes(hereDocDelim) & useHereDoc)
- gotHereDoc = !gotHereDoc
- } else if (!onlyCopyPromptLines) {
- outputLines.push(line)
- } else if (copyEmptyLines && line.trim() === '') {
- outputLines.push(line)
- }
- }
-
- // If no lines with the prompt were found then just use original lines
- if (lineGotPrompt.some(v => v === true)) {
- textContent = outputLines.join('\n');
- }
-
- // Remove a trailing newline to avoid auto-running when pasting
- if (textContent.endsWith("\n")) {
- textContent = textContent.slice(0, -1)
- }
- return textContent
-}
diff --git a/pr-preview/pr-273/_static/css/custom.css b/pr-preview/pr-273/_static/css/custom.css
deleted file mode 100644
index af8fd1721..000000000
--- a/pr-preview/pr-273/_static/css/custom.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.table-wrapper.colwidths-auto table td, .table-wrapper.colwidths-auto table th {
- white-space: nowrap;
-}
-.table-wrapper.colwidths-auto table td a.reference.internal {
- overflow-wrap: normal;
-}
-
-/* Style the button that is used to open and close the collapsible content */
-.version-select {
- cursor: pointer;
-}
-
-/* Style the collapsible content. Note: hidden by default */
-#versions {
- display: none;
- overflow: hidden;
-}
-
-/* Reduce font size of "What's New" section */
-#what-s-new li,
-#what-s-new a {
- font-size: medium;
-}
-
-#first-steps-with-junifer div.mermaid {
- overflow: scroll;
-}
-
-#first-steps-with-junifer svg {
- overflow: scroll;
- width: 200%;
-}
-
-body:not([data-theme="light"]) .mermaid svg .flowchart-link {
- stroke: white !important;
-}
-
-body:not([data-theme="light"]) .mermaid svg .edgeLabel {
- color: white !important;
- background-color: #202020 !important;
-}
-
-body:not([data-theme="light"]) .mermaid svg .marker{
- stroke: white !important;
- fill: white !important;
-}
diff --git a/pr-preview/pr-273/_static/debug.css b/pr-preview/pr-273/_static/debug.css
deleted file mode 100644
index 74d4aec33..000000000
--- a/pr-preview/pr-273/_static/debug.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- This CSS file should be overridden by the theme authors. It's
- meant for debugging and developing the skeleton that this theme provides.
-*/
-body {
- font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
- "Apple Color Emoji", "Segoe UI Emoji";
- background: lavender;
-}
-.sb-announcement {
- background: rgb(131, 131, 131);
-}
-.sb-announcement__inner {
- background: black;
- color: white;
-}
-.sb-header {
- background: lightskyblue;
-}
-.sb-header__inner {
- background: royalblue;
- color: white;
-}
-.sb-header-secondary {
- background: lightcyan;
-}
-.sb-header-secondary__inner {
- background: cornflowerblue;
- color: white;
-}
-.sb-sidebar-primary {
- background: lightgreen;
-}
-.sb-main {
- background: blanchedalmond;
-}
-.sb-main__inner {
- background: antiquewhite;
-}
-.sb-header-article {
- background: lightsteelblue;
-}
-.sb-article-container {
- background: snow;
-}
-.sb-article-main {
- background: white;
-}
-.sb-footer-article {
- background: lightpink;
-}
-.sb-sidebar-secondary {
- background: lightgoldenrodyellow;
-}
-.sb-footer-content {
- background: plum;
-}
-.sb-footer-content__inner {
- background: palevioletred;
-}
-.sb-footer {
- background: pink;
-}
-.sb-footer__inner {
- background: salmon;
-}
-.sb-article {
- background: white;
-}
diff --git a/pr-preview/pr-273/_static/doctools.js b/pr-preview/pr-273/_static/doctools.js
deleted file mode 100644
index d06a71d75..000000000
--- a/pr-preview/pr-273/_static/doctools.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Base JavaScript utilities for all Sphinx HTML documentation.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-"use strict";
-
-const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
- "TEXTAREA",
- "INPUT",
- "SELECT",
- "BUTTON",
-]);
-
-const _ready = (callback) => {
- if (document.readyState !== "loading") {
- callback();
- } else {
- document.addEventListener("DOMContentLoaded", callback);
- }
-};
-
-/**
- * Small JavaScript module for the documentation.
- */
-const Documentation = {
- init: () => {
- Documentation.initDomainIndexTable();
- Documentation.initOnKeyListeners();
- },
-
- /**
- * i18n support
- */
- TRANSLATIONS: {},
- PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
- LOCALE: "unknown",
-
- // gettext and ngettext don't access this so that the functions
- // can safely bound to a different name (_ = Documentation.gettext)
- gettext: (string) => {
- const translated = Documentation.TRANSLATIONS[string];
- switch (typeof translated) {
- case "undefined":
- return string; // no translation
- case "string":
- return translated; // translation exists
- default:
- return translated[0]; // (singular, plural) translation tuple exists
- }
- },
-
- ngettext: (singular, plural, n) => {
- const translated = Documentation.TRANSLATIONS[singular];
- if (typeof translated !== "undefined")
- return translated[Documentation.PLURAL_EXPR(n)];
- return n === 1 ? singular : plural;
- },
-
- addTranslations: (catalog) => {
- Object.assign(Documentation.TRANSLATIONS, catalog.messages);
- Documentation.PLURAL_EXPR = new Function(
- "n",
- `return (${catalog.plural_expr})`
- );
- Documentation.LOCALE = catalog.locale;
- },
-
- /**
- * helper function to focus on search bar
- */
- focusSearchBar: () => {
- document.querySelectorAll("input[name=q]")[0]?.focus();
- },
-
- /**
- * Initialise the domain index toggle buttons
- */
- initDomainIndexTable: () => {
- const toggler = (el) => {
- const idNumber = el.id.substr(7);
- const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
- if (el.src.substr(-9) === "minus.png") {
- el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
- toggledRows.forEach((el) => (el.style.display = "none"));
- } else {
- el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
- toggledRows.forEach((el) => (el.style.display = ""));
- }
- };
-
- const togglerElements = document.querySelectorAll("img.toggler");
- togglerElements.forEach((el) =>
- el.addEventListener("click", (event) => toggler(event.currentTarget))
- );
- togglerElements.forEach((el) => (el.style.display = ""));
- if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
- },
-
- initOnKeyListeners: () => {
- // only install a listener if it is really needed
- if (
- !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
- !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
- )
- return;
-
- document.addEventListener("keydown", (event) => {
- // bail for input elements
- if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
- // bail with special keys
- if (event.altKey || event.ctrlKey || event.metaKey) return;
-
- if (!event.shiftKey) {
- switch (event.key) {
- case "ArrowLeft":
- if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
-
- const prevLink = document.querySelector('link[rel="prev"]');
- if (prevLink && prevLink.href) {
- window.location.href = prevLink.href;
- event.preventDefault();
- }
- break;
- case "ArrowRight":
- if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
-
- const nextLink = document.querySelector('link[rel="next"]');
- if (nextLink && nextLink.href) {
- window.location.href = nextLink.href;
- event.preventDefault();
- }
- break;
- }
- }
-
- // some keyboard layouts may need Shift to get /
- switch (event.key) {
- case "/":
- if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
- Documentation.focusSearchBar();
- event.preventDefault();
- }
- });
- },
-};
-
-// quick alias for translations
-const _ = Documentation.gettext;
-
-_ready(Documentation.init);
diff --git a/pr-preview/pr-273/_static/documentation_options.js b/pr-preview/pr-273/_static/documentation_options.js
deleted file mode 100644
index 7e4c114f2..000000000
--- a/pr-preview/pr-273/_static/documentation_options.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const DOCUMENTATION_OPTIONS = {
- VERSION: '',
- LANGUAGE: 'en',
- COLLAPSE_INDEX: false,
- BUILDER: 'html',
- FILE_SUFFIX: '.html',
- LINK_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt',
- NAVIGATION_WITH_KEYS: false,
- SHOW_SEARCH_SUMMARY: true,
- ENABLE_SEARCH_SHORTCUTS: true,
-};
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/file.png b/pr-preview/pr-273/_static/file.png
deleted file mode 100644
index a858a410e..000000000
Binary files a/pr-preview/pr-273/_static/file.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/js/custom.js b/pr-preview/pr-273/_static/js/custom.js
deleted file mode 100644
index fa8ecefd6..000000000
--- a/pr-preview/pr-273/_static/js/custom.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var coll = document.getElementsByClassName("version-select");
-var i;
-
-for (i = 0; i < coll.length; i++) {
- coll[i].addEventListener("click", function() {
- this.classList.toggle("active");
- var content = this.nextElementSibling;
- if (content.style.display === "block") {
- content.style.display = "none";
- } else {
- content.style.display = "block";
- }
- });
-}
diff --git a/pr-preview/pr-273/_static/junifer_logo.png b/pr-preview/pr-273/_static/junifer_logo.png
deleted file mode 100644
index 2665f6040..000000000
Binary files a/pr-preview/pr-273/_static/junifer_logo.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/jupyterlite_badge_logo.svg b/pr-preview/pr-273/_static/jupyterlite_badge_logo.svg
deleted file mode 100644
index 5de36d7fd..000000000
--- a/pr-preview/pr-273/_static/jupyterlite_badge_logo.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/language_data.js b/pr-preview/pr-273/_static/language_data.js
deleted file mode 100644
index 250f5665f..000000000
--- a/pr-preview/pr-273/_static/language_data.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * language_data.js
- * ~~~~~~~~~~~~~~~~
- *
- * This script contains the language-specific data used by searchtools.js,
- * namely the list of stopwords, stemmer, scorer and splitter.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
-
-
-/* Non-minified version is copied as a separate JS file, is available */
-
-/**
- * Porter Stemmer
- */
-var Stemmer = function() {
-
- var step2list = {
- ational: 'ate',
- tional: 'tion',
- enci: 'ence',
- anci: 'ance',
- izer: 'ize',
- bli: 'ble',
- alli: 'al',
- entli: 'ent',
- eli: 'e',
- ousli: 'ous',
- ization: 'ize',
- ation: 'ate',
- ator: 'ate',
- alism: 'al',
- iveness: 'ive',
- fulness: 'ful',
- ousness: 'ous',
- aliti: 'al',
- iviti: 'ive',
- biliti: 'ble',
- logi: 'log'
- };
-
- var step3list = {
- icate: 'ic',
- ative: '',
- alize: 'al',
- iciti: 'ic',
- ical: 'ic',
- ful: '',
- ness: ''
- };
-
- var c = "[^aeiou]"; // consonant
- var v = "[aeiouy]"; // vowel
- var C = c + "[^aeiouy]*"; // consonant sequence
- var V = v + "[aeiou]*"; // vowel sequence
-
- var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
- var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
- var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
- var s_v = "^(" + C + ")?" + v; // vowel in stem
-
- this.stemWord = function (w) {
- var stem;
- var suffix;
- var firstch;
- var origword = w;
-
- if (w.length < 3)
- return w;
-
- var re;
- var re2;
- var re3;
- var re4;
-
- firstch = w.substr(0,1);
- if (firstch == "y")
- w = firstch.toUpperCase() + w.substr(1);
-
- // Step 1a
- re = /^(.+?)(ss|i)es$/;
- re2 = /^(.+?)([^s])s$/;
-
- if (re.test(w))
- w = w.replace(re,"$1$2");
- else if (re2.test(w))
- w = w.replace(re2,"$1$2");
-
- // Step 1b
- re = /^(.+?)eed$/;
- re2 = /^(.+?)(ed|ing)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- re = new RegExp(mgr0);
- if (re.test(fp[1])) {
- re = /.$/;
- w = w.replace(re,"");
- }
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1];
- re2 = new RegExp(s_v);
- if (re2.test(stem)) {
- w = stem;
- re2 = /(at|bl|iz)$/;
- re3 = new RegExp("([^aeiouylsz])\\1$");
- re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re2.test(w))
- w = w + "e";
- else if (re3.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
- else if (re4.test(w))
- w = w + "e";
- }
- }
-
- // Step 1c
- re = /^(.+?)y$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(s_v);
- if (re.test(stem))
- w = stem + "i";
- }
-
- // Step 2
- re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step2list[suffix];
- }
-
- // Step 3
- re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step3list[suffix];
- }
-
- // Step 4
- re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
- re2 = /^(.+?)(s|t)(ion)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- if (re.test(stem))
- w = stem;
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1] + fp[2];
- re2 = new RegExp(mgr1);
- if (re2.test(stem))
- w = stem;
- }
-
- // Step 5
- re = /^(.+?)e$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- re2 = new RegExp(meq1);
- re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
- w = stem;
- }
- re = /ll$/;
- re2 = new RegExp(mgr1);
- if (re.test(w) && re2.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
-
- // and turn initial Y back to y
- if (firstch == "y")
- w = firstch.toLowerCase() + w.substr(1);
- return w;
- }
-}
-
diff --git a/pr-preview/pr-273/_static/minus.png b/pr-preview/pr-273/_static/minus.png
deleted file mode 100644
index d96755fda..000000000
Binary files a/pr-preview/pr-273/_static/minus.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/no_image.png b/pr-preview/pr-273/_static/no_image.png
deleted file mode 100644
index 8c2d48d5d..000000000
Binary files a/pr-preview/pr-273/_static/no_image.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/plus.png b/pr-preview/pr-273/_static/plus.png
deleted file mode 100644
index 7107cec93..000000000
Binary files a/pr-preview/pr-273/_static/plus.png and /dev/null differ
diff --git a/pr-preview/pr-273/_static/pygments.css b/pr-preview/pr-273/_static/pygments.css
deleted file mode 100644
index c2e07c71e..000000000
--- a/pr-preview/pr-273/_static/pygments.css
+++ /dev/null
@@ -1,258 +0,0 @@
-.highlight pre { line-height: 125%; }
-.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight .hll { background-color: #ffffcc }
-.highlight { background: #f8f8f8; }
-.highlight .c { color: #8f5902; font-style: italic } /* Comment */
-.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
-.highlight .g { color: #000000 } /* Generic */
-.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
-.highlight .l { color: #000000 } /* Literal */
-.highlight .n { color: #000000 } /* Name */
-.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
-.highlight .x { color: #000000 } /* Other */
-.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
-.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
-.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #a40000 } /* Generic.Deleted */
-.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
-.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
-.highlight .gr { color: #ef2929 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
-.highlight .gp { color: #8f5902 } /* Generic.Prompt */
-.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
-.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
-.highlight .ld { color: #000000 } /* Literal.Date */
-.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
-.highlight .s { color: #4e9a06 } /* Literal.String */
-.highlight .na { color: #c4a000 } /* Name.Attribute */
-.highlight .nb { color: #204a87 } /* Name.Builtin */
-.highlight .nc { color: #000000 } /* Name.Class */
-.highlight .no { color: #000000 } /* Name.Constant */
-.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #ce5c00 } /* Name.Entity */
-.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #000000 } /* Name.Function */
-.highlight .nl { color: #f57900 } /* Name.Label */
-.highlight .nn { color: #000000 } /* Name.Namespace */
-.highlight .nx { color: #000000 } /* Name.Other */
-.highlight .py { color: #000000 } /* Name.Property */
-.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #000000 } /* Name.Variable */
-.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
-.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
-.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
-.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
-.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
-.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
-.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
-.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
-.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
-.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
-.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
-.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
-.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
-.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
-.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
-.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
-.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
-.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
-.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
-.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
-.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #000000 } /* Name.Function.Magic */
-.highlight .vc { color: #000000 } /* Name.Variable.Class */
-.highlight .vg { color: #000000 } /* Name.Variable.Global */
-.highlight .vi { color: #000000 } /* Name.Variable.Instance */
-.highlight .vm { color: #000000 } /* Name.Variable.Magic */
-.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */
-@media not print {
-body[data-theme="dark"] .highlight pre { line-height: 125%; }
-body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-body[data-theme="dark"] .highlight .hll { background-color: #404040 }
-body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 }
-body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */
-body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */
-body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */
-body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
-body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */
-body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */
-body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */
-body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */
-body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */
-body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
-body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
-body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */
-body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
-body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
-body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
-body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */
-body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
-body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
-body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */
-body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
-body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
-body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */
-body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
-body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
-body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
-body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */
-body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
-body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
-body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
-body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
-body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
-body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
-body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */
-body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */
-body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */
-body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */
-body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */
-body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
-body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */
-body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */
-body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */
-body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */
-body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */
-body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */
-body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
-body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */
-body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */
-body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
-body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */
-body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
-body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
-body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */
-body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
-body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
-body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
-body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
-body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
-body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
-body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
-body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
-body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
-body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
-body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
-body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
-body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
-body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
-body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */
-body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
-body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
-body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
-body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
-body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */
-body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */
-body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */
-body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
-body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
-body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
-@media (prefers-color-scheme: dark) {
-body:not([data-theme="light"]) .highlight pre { line-height: 125%; }
-body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-body:not([data-theme="light"]) .highlight .hll { background-color: #404040 }
-body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 }
-body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */
-body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */
-body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */
-body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
-body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */
-body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */
-body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */
-body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */
-body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */
-body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
-body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
-body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */
-body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
-body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
-body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
-body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */
-body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
-body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
-body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */
-body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
-body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */
-body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */
-body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
-body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
-body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
-body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */
-body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
-body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
-body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
-body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
-body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
-body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
-body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */
-body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */
-body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */
-body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */
-body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */
-body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
-body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */
-body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */
-body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */
-body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */
-body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */
-body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */
-body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
-body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */
-body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */
-body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
-body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */
-body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
-body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */
-body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */
-body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
-body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */
-body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
-body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
-body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
-body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
-body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
-body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
-body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
-body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
-body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
-body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
-body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
-body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
-body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */
-body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
-body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
-body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
-body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
-body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */
-body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */
-body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */
-body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
-body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
-body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
-}
-}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/scripts/furo-extensions.js b/pr-preview/pr-273/_static/scripts/furo-extensions.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/pr-preview/pr-273/_static/scripts/furo.js b/pr-preview/pr-273/_static/scripts/furo.js
deleted file mode 100644
index 32e7c05be..000000000
--- a/pr-preview/pr-273/_static/scripts/furo.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see furo.js.LICENSE.txt */
-(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})();
-//# sourceMappingURL=furo.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/scripts/furo.js.LICENSE.txt b/pr-preview/pr-273/_static/scripts/furo.js.LICENSE.txt
deleted file mode 100644
index 1632189c7..000000000
--- a/pr-preview/pr-273/_static/scripts/furo.js.LICENSE.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * gumshoejs v5.1.2 (patched by @pradyunsg)
- * A simple, framework-agnostic scrollspy script.
- * (c) 2019 Chris Ferdinandi
- * MIT License
- * http://github.com/cferdinandi/gumshoe
- */
diff --git a/pr-preview/pr-273/_static/scripts/furo.js.map b/pr-preview/pr-273/_static/scripts/furo.js.map
deleted file mode 100644
index 7b7ddb113..000000000
--- a/pr-preview/pr-273/_static/scripts/furo.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"scripts/furo.js","mappings":";iCAAA,MAQWA,SAWS,IAAX,EAAAC,EACH,EAAAA,EACkB,oBAAXC,OACPA,OACAC,KAbS,EAAF,WACP,OAaJ,SAAUD,GACR,aAMA,IAAIE,EAAW,CAEbC,SAAU,SACVC,aAAc,SAGdC,QAAQ,EACRC,YAAa,SAGbC,OAAQ,EACRC,QAAQ,EAGRC,QAAQ,GA6BNC,EAAY,SAAUC,EAAMC,EAAMC,GAEpC,GAAKA,EAAOC,SAASL,OAArB,CAGA,IAAIM,EAAQ,IAAIC,YAAYL,EAAM,CAChCM,SAAS,EACTC,YAAY,EACZL,OAAQA,IAIVD,EAAKO,cAAcJ,EAVgB,CAWrC,EAOIK,EAAe,SAAUR,GAC3B,IAAIS,EAAW,EACf,GAAIT,EAAKU,aACP,KAAOV,GACLS,GAAYT,EAAKW,UACjBX,EAAOA,EAAKU,aAGhB,OAAOD,GAAY,EAAIA,EAAW,CACpC,EAMIG,EAAe,SAAUC,GACvBA,GACFA,EAASC,MAAK,SAAUC,EAAOC,GAG7B,OAFcR,EAAaO,EAAME,SACnBT,EAAaQ,EAAMC,UACF,EACxB,CACT,GAEJ,EAwCIC,EAAW,SAAUlB,EAAME,EAAUiB,GACvC,IAAIC,EAASpB,EAAKqB,wBACd1B,EAnCU,SAAUO,GAExB,MAA+B,mBAApBA,EAASP,OACX2B,WAAWpB,EAASP,UAItB2B,WAAWpB,EAASP,OAC7B,CA2Be4B,CAAUrB,GACvB,OAAIiB,EAEAK,SAASJ,EAAOD,OAAQ,KACvB/B,EAAOqC,aAAeC,SAASC,gBAAgBC,cAG7CJ,SAASJ,EAAOS,IAAK,KAAOlC,CACrC,EAMImC,EAAa,WACf,OACEC,KAAKC,KAAK5C,EAAOqC,YAAcrC,EAAO6C,cAnCjCF,KAAKG,IACVR,SAASS,KAAKC,aACdV,SAASC,gBAAgBS,aACzBV,SAASS,KAAKE,aACdX,SAASC,gBAAgBU,aACzBX,SAASS,KAAKP,aACdF,SAASC,gBAAgBC,aAkC7B,EAmBIU,EAAY,SAAUzB,EAAUX,GAClC,IAAIqC,EAAO1B,EAASA,EAAS2B,OAAS,GACtC,GAbgB,SAAUC,EAAMvC,GAChC,SAAI4B,MAAgBZ,EAASuB,EAAKxB,QAASf,GAAU,GAEvD,CAUMwC,CAAYH,EAAMrC,GAAW,OAAOqC,EACxC,IAAK,IAAII,EAAI9B,EAAS2B,OAAS,EAAGG,GAAK,EAAGA,IACxC,GAAIzB,EAASL,EAAS8B,GAAG1B,QAASf,GAAW,OAAOW,EAAS8B,EAEjE,EAOIC,EAAmB,SAAUC,EAAK3C,GAEpC,GAAKA,EAAST,QAAWoD,EAAIC,WAA7B,CAGA,IAAIC,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASR,aAG7BkD,EAAiBG,EAAI7C,GAV0B,CAWjD,EAOIiD,EAAa,SAAUC,EAAOlD,GAEhC,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASX,UAC7B6D,EAAMnC,QAAQgC,UAAUC,OAAOhD,EAASV,cAGxCoD,EAAiBG,EAAI7C,GAGrBJ,EAAU,oBAAqBiD,EAAI,CACjCM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,EAOIoD,EAAiB,SAAUT,EAAK3C,GAElC,GAAKA,EAAST,OAAd,CAGA,IAAIsD,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASR,aAG1B4D,EAAeP,EAAI7C,GAVS,CAW9B,EA6LA,OA1JkB,SAAUsD,EAAUC,GAKpC,IACIC,EAAU7C,EAAU8C,EAASC,EAAS1D,EADtC2D,EAAa,CAUjBA,MAAmB,WAEjBH,EAAWhC,SAASoC,iBAAiBN,GAGrC3C,EAAW,GAGXkD,MAAMC,UAAUC,QAAQC,KAAKR,GAAU,SAAUjB,GAE/C,IAAIxB,EAAUS,SAASyC,eACrBC,mBAAmB3B,EAAK4B,KAAKC,OAAO,KAEjCrD,GAGLJ,EAAS0D,KAAK,CACZ1B,IAAKJ,EACLxB,QAASA,GAEb,IAGAL,EAAaC,EACf,EAKAgD,OAAoB,WAElB,IAAIW,EAASlC,EAAUzB,EAAUX,GAG5BsE,EASDb,GAAWa,EAAOvD,UAAY0C,EAAQ1C,UAG1CkC,EAAWQ,EAASzD,GAzFT,SAAUkD,EAAOlD,GAE9B,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASX,UAC1B6D,EAAMnC,QAAQgC,UAAUM,IAAIrD,EAASV,cAGrC8D,EAAeP,EAAI7C,GAGnBJ,EAAU,kBAAmBiD,EAAI,CAC/BM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,CAqEIuE,CAASD,EAAQtE,GAGjByD,EAAUa,GAfJb,IACFR,EAAWQ,EAASzD,GACpByD,EAAU,KAchB,GAMIe,EAAgB,SAAUvE,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,sBAAsBf,EAAWgB,OACpD,EAMIC,EAAgB,SAAU3E,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,uBAAsB,WACrChE,EAAaC,GACbgD,EAAWgB,QACb,GACF,EAkDA,OA7CAhB,EAAWkB,QAAU,WAEfpB,GACFR,EAAWQ,EAASzD,GAItBd,EAAO4F,oBAAoB,SAAUN,GAAe,GAChDxE,EAASN,QACXR,EAAO4F,oBAAoB,SAAUF,GAAe,GAItDjE,EAAW,KACX6C,EAAW,KACXC,EAAU,KACVC,EAAU,KACV1D,EAAW,IACb,EAOEA,EA3XS,WACX,IAAI+E,EAAS,CAAC,EAOd,OANAlB,MAAMC,UAAUC,QAAQC,KAAKgB,WAAW,SAAUC,GAChD,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAKA,EAAIE,eAAeD,GAAM,OAC9BH,EAAOG,GAAOD,EAAIC,EACpB,CACF,IACOH,CACT,CAkXeK,CAAOhG,EAAUmE,GAAW,CAAC,GAGxCI,EAAW0B,QAGX1B,EAAWgB,SAGXzF,EAAOoG,iBAAiB,SAAUd,GAAe,GAC7CxE,EAASN,QACXR,EAAOoG,iBAAiB,SAAUV,GAAe,GAS9CjB,CACT,CAOF,CArcW4B,CAAQvG,EAChB,UAFM,SAEN,uBCXDwG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU1B,KAAK8B,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CCrBAJ,EAAoBO,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAOJ,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoBU,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdR,EAAoBU,EAAI,CAACN,EAASQ,KACjC,IAAI,IAAInB,KAAOmB,EACXZ,EAAoBa,EAAED,EAAYnB,KAASO,EAAoBa,EAAET,EAASX,IAC5EqB,OAAOC,eAAeX,EAASX,EAAK,CAAEuB,YAAY,EAAMC,IAAKL,EAAWnB,IAE1E,ECNDO,EAAoBxG,EAAI,WACvB,GAA0B,iBAAf0H,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAX3H,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBuG,EAAoBa,EAAI,CAACrB,EAAK6B,IAAUP,OAAOzC,UAAUqB,eAAenB,KAAKiB,EAAK6B,4CCK9EC,EAAY,KACZC,EAAS,KACTC,EAAgB/H,OAAO6C,aAAeP,SAASC,gBAAgByF,UACnE,MAAMC,EAAmB,GA2EzB,SAASC,IACP,MAAMC,EAAeC,aAAaC,QAAQ,UAAY,OAZxD,IAAkBC,EACH,WADGA,EAaItI,OAAOuI,WAAW,gCAAgCC,QAI/C,SAAjBL,EACO,QACgB,SAAhBA,EACA,OAEA,OAIU,SAAjBA,EACO,OACgB,QAAhBA,EACA,QAEA,SA9BoB,SAATG,GAA4B,SAATA,IACzCG,QAAQC,MAAM,2BAA2BJ,yBACzCA,EAAO,QAGThG,SAASS,KAAK4F,QAAQC,MAAQN,EAC9BF,aAAaS,QAAQ,QAASP,GAC9BG,QAAQK,IAAI,cAAcR,UA0B5B,CAkDA,SAASnC,KART,WAEE,MAAM4C,EAAUzG,SAAS0G,uBAAuB,gBAChDrE,MAAMsE,KAAKF,GAASlE,SAASqE,IAC3BA,EAAI9C,iBAAiB,QAAS8B,EAAe,GAEjD,CAGEiB,GA9CF,WAEE,IAAIC,EAA6B,EAC7BC,GAAU,EAEdrJ,OAAOoG,iBAAiB,UAAU,SAAUuB,GAC1CyB,EAA6BpJ,OAAOsJ,QAE/BD,IACHrJ,OAAOwF,uBAAsB,WAzDnC,IAAuB+D,IA0DDH,EA9GkC,GAAlDzG,KAAK6G,MAAM1B,EAAO7F,wBAAwBQ,KAC5CqF,EAAOjE,UAAUM,IAAI,YAErB2D,EAAOjE,UAAUC,OAAO,YAI5B,SAAmCyF,GAC7BA,EAAYtB,EACd3F,SAASC,gBAAgBsB,UAAUC,OAAO,oBAEtCyF,EAAYxB,EACdzF,SAASC,gBAAgBsB,UAAUM,IAAI,oBAC9BoF,EAAYxB,GACrBzF,SAASC,gBAAgBsB,UAAUC,OAAO,oBAG9CiE,EAAgBwB,CAClB,CAoCEE,CAA0BF,GAlC5B,SAA6BA,GACT,OAAd1B,IAKa,GAAb0B,EACF1B,EAAU6B,SAAS,EAAG,GAGtB/G,KAAKC,KAAK2G,IACV5G,KAAK6G,MAAMlH,SAASC,gBAAgBS,aAAehD,OAAOqC,aAE1DwF,EAAU6B,SAAS,EAAG7B,EAAU7E,cAGhBV,SAASqH,cAAc,mBAc3C,CAKEC,CAAoBL,GAwDdF,GAAU,CACZ,IAEAA,GAAU,EAEd,IACArJ,OAAO6J,QACT,CA6BEC,GA1BkB,OAAdjC,GAKJ,IAAI,IAAJ,CAAY,cAAe,CACzBrH,QAAQ,EACRuJ,WAAW,EACX5J,SAAU,iBACVI,OAAQ,KACN,IAAIyJ,EAAM9H,WAAW+H,iBAAiB3H,SAASC,iBAAiB2H,UAChE,OAAOpC,EAAO7F,wBAAwBkI,OAAS,GAAMH,EAAM,CAAC,GAiBlE,CAcA1H,SAAS8D,iBAAiB,oBAT1B,WACE9D,SAASS,KAAKW,WAAWG,UAAUC,OAAO,SAE1CgE,EAASxF,SAASqH,cAAc,UAChC9B,EAAYvF,SAASqH,cAAc,eAEnCxD,GACF","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/searchtools.js b/pr-preview/pr-273/_static/searchtools.js
deleted file mode 100644
index 7918c3fab..000000000
--- a/pr-preview/pr-273/_static/searchtools.js
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * searchtools.js
- * ~~~~~~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for the full-text search.
- *
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-"use strict";
-
-/**
- * Simple result scoring code.
- */
-if (typeof Scorer === "undefined") {
- var Scorer = {
- // Implement the following function to further tweak the score for each result
- // The function takes a result array [docname, title, anchor, descr, score, filename]
- // and returns the new score.
- /*
- score: result => {
- const [docname, title, anchor, descr, score, filename] = result
- return score
- },
- */
-
- // query matches the full name of an object
- objNameMatch: 11,
- // or matches in the last dotted part of the object name
- objPartialMatch: 6,
- // Additive scores depending on the priority of the object
- objPrio: {
- 0: 15, // used to be importantResults
- 1: 5, // used to be objectResults
- 2: -5, // used to be unimportantResults
- },
- // Used when the priority is not in the mapping.
- objPrioDefault: 0,
-
- // query found in title
- title: 15,
- partialTitle: 7,
- // query found in terms
- term: 5,
- partialTerm: 2,
- };
-}
-
-const _removeChildren = (element) => {
- while (element && element.lastChild) element.removeChild(element.lastChild);
-};
-
-/**
- * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
- */
-const _escapeRegExp = (string) =>
- string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
-
-const _displayItem = (item, searchTerms, highlightTerms) => {
- const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
- const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
- const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
- const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
- const contentRoot = document.documentElement.dataset.content_root;
-
- const [docName, title, anchor, descr, score, _filename] = item;
-
- let listItem = document.createElement("li");
- let requestUrl;
- let linkUrl;
- if (docBuilder === "dirhtml") {
- // dirhtml builder
- let dirname = docName + "/";
- if (dirname.match(/\/index\/$/))
- dirname = dirname.substring(0, dirname.length - 6);
- else if (dirname === "index/") dirname = "";
- requestUrl = contentRoot + dirname;
- linkUrl = requestUrl;
- } else {
- // normal html builders
- requestUrl = contentRoot + docName + docFileSuffix;
- linkUrl = docName + docLinkSuffix;
- }
- let linkEl = listItem.appendChild(document.createElement("a"));
- linkEl.href = linkUrl + anchor;
- linkEl.dataset.score = score;
- linkEl.innerHTML = title;
- if (descr) {
- listItem.appendChild(document.createElement("span")).innerHTML =
- " (" + descr + ")";
- // highlight search terms in the description
- if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
- highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
- }
- else if (showSearchSummary)
- fetch(requestUrl)
- .then((responseData) => responseData.text())
- .then((data) => {
- if (data)
- listItem.appendChild(
- Search.makeSearchSummary(data, searchTerms)
- );
- // highlight search terms in the summary
- if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
- highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
- });
- Search.output.appendChild(listItem);
-};
-const _finishSearch = (resultCount) => {
- Search.stopPulse();
- Search.title.innerText = _("Search Results");
- if (!resultCount)
- Search.status.innerText = Documentation.gettext(
- "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
- );
- else
- Search.status.innerText = _(
- `Search finished, found ${resultCount} page(s) matching the search query.`
- );
-};
-const _displayNextItem = (
- results,
- resultCount,
- searchTerms,
- highlightTerms,
-) => {
- // results left, load the summary and display it
- // this is intended to be dynamic (don't sub resultsCount)
- if (results.length) {
- _displayItem(results.pop(), searchTerms, highlightTerms);
- setTimeout(
- () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
- 5
- );
- }
- // search finished, update title and status message
- else _finishSearch(resultCount);
-};
-
-/**
- * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
- * custom function per language.
- *
- * The regular expression works by splitting the string on consecutive characters
- * that are not Unicode letters, numbers, underscores, or emoji characters.
- * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
- */
-if (typeof splitQuery === "undefined") {
- var splitQuery = (query) => query
- .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
- .filter(term => term) // remove remaining empty strings
-}
-
-/**
- * Search Module
- */
-const Search = {
- _index: null,
- _queued_query: null,
- _pulse_status: -1,
-
- htmlToText: (htmlString) => {
- const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
- htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
- const docContent = htmlElement.querySelector('[role="main"]');
- if (docContent !== undefined) return docContent.textContent;
- console.warn(
- "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
- );
- return "";
- },
-
- init: () => {
- const query = new URLSearchParams(window.location.search).get("q");
- document
- .querySelectorAll('input[name="q"]')
- .forEach((el) => (el.value = query));
- if (query) Search.performSearch(query);
- },
-
- loadIndex: (url) =>
- (document.body.appendChild(document.createElement("script")).src = url),
-
- setIndex: (index) => {
- Search._index = index;
- if (Search._queued_query !== null) {
- const query = Search._queued_query;
- Search._queued_query = null;
- Search.query(query);
- }
- },
-
- hasIndex: () => Search._index !== null,
-
- deferQuery: (query) => (Search._queued_query = query),
-
- stopPulse: () => (Search._pulse_status = -1),
-
- startPulse: () => {
- if (Search._pulse_status >= 0) return;
-
- const pulse = () => {
- Search._pulse_status = (Search._pulse_status + 1) % 4;
- Search.dots.innerText = ".".repeat(Search._pulse_status);
- if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
- };
- pulse();
- },
-
- /**
- * perform a search for something (or wait until index is loaded)
- */
- performSearch: (query) => {
- // create the required interface elements
- const searchText = document.createElement("h2");
- searchText.textContent = _("Searching");
- const searchSummary = document.createElement("p");
- searchSummary.classList.add("search-summary");
- searchSummary.innerText = "";
- const searchList = document.createElement("ul");
- searchList.classList.add("search");
-
- const out = document.getElementById("search-results");
- Search.title = out.appendChild(searchText);
- Search.dots = Search.title.appendChild(document.createElement("span"));
- Search.status = out.appendChild(searchSummary);
- Search.output = out.appendChild(searchList);
-
- const searchProgress = document.getElementById("search-progress");
- // Some themes don't use the search progress node
- if (searchProgress) {
- searchProgress.innerText = _("Preparing search...");
- }
- Search.startPulse();
-
- // index already loaded, the browser was quick!
- if (Search.hasIndex()) Search.query(query);
- else Search.deferQuery(query);
- },
-
- /**
- * execute search (requires search index to be loaded)
- */
- query: (query) => {
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const titles = Search._index.titles;
- const allTitles = Search._index.alltitles;
- const indexEntries = Search._index.indexentries;
-
- // stem the search terms and add them to the correct list
- const stemmer = new Stemmer();
- const searchTerms = new Set();
- const excludedTerms = new Set();
- const highlightTerms = new Set();
- const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
- splitQuery(query.trim()).forEach((queryTerm) => {
- const queryTermLower = queryTerm.toLowerCase();
-
- // maybe skip this "word"
- // stopwords array is from language_data.js
- if (
- stopwords.indexOf(queryTermLower) !== -1 ||
- queryTerm.match(/^\d+$/)
- )
- return;
-
- // stem the word
- let word = stemmer.stemWord(queryTermLower);
- // select the correct list
- if (word[0] === "-") excludedTerms.add(word.substr(1));
- else {
- searchTerms.add(word);
- highlightTerms.add(queryTermLower);
- }
- });
-
- if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
- localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
- }
-
- // console.debug("SEARCH: searching for:");
- // console.info("required: ", [...searchTerms]);
- // console.info("excluded: ", [...excludedTerms]);
-
- // array of [docname, title, anchor, descr, score, filename]
- let results = [];
- _removeChildren(document.getElementById("search-progress"));
-
- const queryLower = query.toLowerCase();
- for (const [title, foundTitles] of Object.entries(allTitles)) {
- if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
- for (const [file, id] of foundTitles) {
- let score = Math.round(100 * queryLower.length / title.length)
- results.push([
- docNames[file],
- titles[file] !== title ? `${titles[file]} > ${title}` : title,
- id !== null ? "#" + id : "",
- null,
- score,
- filenames[file],
- ]);
- }
- }
- }
-
- // search for explicit entries in index directives
- for (const [entry, foundEntries] of Object.entries(indexEntries)) {
- if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
- for (const [file, id] of foundEntries) {
- let score = Math.round(100 * queryLower.length / entry.length)
- results.push([
- docNames[file],
- titles[file],
- id ? "#" + id : "",
- null,
- score,
- filenames[file],
- ]);
- }
- }
- }
-
- // lookup as object
- objectTerms.forEach((term) =>
- results.push(...Search.performObjectSearch(term, objectTerms))
- );
-
- // lookup as search terms in fulltext
- results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
-
- // let the scorer override scores with a custom scoring function
- if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
-
- // now sort the results by score (in opposite order of appearance, since the
- // display function below uses pop() to retrieve items) and then
- // alphabetically
- results.sort((a, b) => {
- const leftScore = a[4];
- const rightScore = b[4];
- if (leftScore === rightScore) {
- // same score: sort alphabetically
- const leftTitle = a[1].toLowerCase();
- const rightTitle = b[1].toLowerCase();
- if (leftTitle === rightTitle) return 0;
- return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
- }
- return leftScore > rightScore ? 1 : -1;
- });
-
- // remove duplicate search results
- // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
- let seen = new Set();
- results = results.reverse().reduce((acc, result) => {
- let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
- if (!seen.has(resultStr)) {
- acc.push(result);
- seen.add(resultStr);
- }
- return acc;
- }, []);
-
- results = results.reverse();
-
- // for debugging
- //Search.lastresults = results.slice(); // a copy
- // console.info("search results:", Search.lastresults);
-
- // print the results
- _displayNextItem(results, results.length, searchTerms, highlightTerms);
- },
-
- /**
- * search for object names
- */
- performObjectSearch: (object, objectTerms) => {
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const objects = Search._index.objects;
- const objNames = Search._index.objnames;
- const titles = Search._index.titles;
-
- const results = [];
-
- const objectSearchCallback = (prefix, match) => {
- const name = match[4]
- const fullname = (prefix ? prefix + "." : "") + name;
- const fullnameLower = fullname.toLowerCase();
- if (fullnameLower.indexOf(object) < 0) return;
-
- let score = 0;
- const parts = fullnameLower.split(".");
-
- // check for different match types: exact matches of full name or
- // "last name" (i.e. last dotted part)
- if (fullnameLower === object || parts.slice(-1)[0] === object)
- score += Scorer.objNameMatch;
- else if (parts.slice(-1)[0].indexOf(object) > -1)
- score += Scorer.objPartialMatch; // matches in last name
-
- const objName = objNames[match[1]][2];
- const title = titles[match[0]];
-
- // If more than one term searched for, we require other words to be
- // found in the name/title/description
- const otherTerms = new Set(objectTerms);
- otherTerms.delete(object);
- if (otherTerms.size > 0) {
- const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
- if (
- [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
- )
- return;
- }
-
- let anchor = match[3];
- if (anchor === "") anchor = fullname;
- else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
-
- const descr = objName + _(", in ") + title;
-
- // add custom score for some objects according to scorer
- if (Scorer.objPrio.hasOwnProperty(match[2]))
- score += Scorer.objPrio[match[2]];
- else score += Scorer.objPrioDefault;
-
- results.push([
- docNames[match[0]],
- fullname,
- "#" + anchor,
- descr,
- score,
- filenames[match[0]],
- ]);
- };
- Object.keys(objects).forEach((prefix) =>
- objects[prefix].forEach((array) =>
- objectSearchCallback(prefix, array)
- )
- );
- return results;
- },
-
- /**
- * search for full-text terms in the index
- */
- performTermsSearch: (searchTerms, excludedTerms) => {
- // prepare search
- const terms = Search._index.terms;
- const titleTerms = Search._index.titleterms;
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const titles = Search._index.titles;
-
- const scoreMap = new Map();
- const fileMap = new Map();
-
- // perform the search on the required terms
- searchTerms.forEach((word) => {
- const files = [];
- const arr = [
- { files: terms[word], score: Scorer.term },
- { files: titleTerms[word], score: Scorer.title },
- ];
- // add support for partial matches
- if (word.length > 2) {
- const escapedWord = _escapeRegExp(word);
- Object.keys(terms).forEach((term) => {
- if (term.match(escapedWord) && !terms[word])
- arr.push({ files: terms[term], score: Scorer.partialTerm });
- });
- Object.keys(titleTerms).forEach((term) => {
- if (term.match(escapedWord) && !titleTerms[word])
- arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
- });
- }
-
- // no match but word was a required one
- if (arr.every((record) => record.files === undefined)) return;
-
- // found search word in contents
- arr.forEach((record) => {
- if (record.files === undefined) return;
-
- let recordFiles = record.files;
- if (recordFiles.length === undefined) recordFiles = [recordFiles];
- files.push(...recordFiles);
-
- // set score for the word in each file
- recordFiles.forEach((file) => {
- if (!scoreMap.has(file)) scoreMap.set(file, {});
- scoreMap.get(file)[word] = record.score;
- });
- });
-
- // create the mapping
- files.forEach((file) => {
- if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
- fileMap.get(file).push(word);
- else fileMap.set(file, [word]);
- });
- });
-
- // now check if the files don't contain excluded terms
- const results = [];
- for (const [file, wordList] of fileMap) {
- // check if all requirements are matched
-
- // as search terms with length < 3 are discarded
- const filteredTermCount = [...searchTerms].filter(
- (term) => term.length > 2
- ).length;
- if (
- wordList.length !== searchTerms.size &&
- wordList.length !== filteredTermCount
- )
- continue;
-
- // ensure that none of the excluded terms is in the search result
- if (
- [...excludedTerms].some(
- (term) =>
- terms[term] === file ||
- titleTerms[term] === file ||
- (terms[term] || []).includes(file) ||
- (titleTerms[term] || []).includes(file)
- )
- )
- break;
-
- // select one (max) score for the file.
- const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
- // add result to the result list
- results.push([
- docNames[file],
- titles[file],
- "",
- null,
- score,
- filenames[file],
- ]);
- }
- return results;
- },
-
- /**
- * helper function to return a node containing the
- * search summary for a given text. keywords is a list
- * of stemmed words.
- */
- makeSearchSummary: (htmlText, keywords) => {
- const text = Search.htmlToText(htmlText);
- if (text === "") return null;
-
- const textLower = text.toLowerCase();
- const actualStartPosition = [...keywords]
- .map((k) => textLower.indexOf(k.toLowerCase()))
- .filter((i) => i > -1)
- .slice(-1)[0];
- const startWithContext = Math.max(actualStartPosition - 120, 0);
-
- const top = startWithContext === 0 ? "" : "...";
- const tail = startWithContext + 240 < text.length ? "..." : "";
-
- let summary = document.createElement("p");
- summary.classList.add("context");
- summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
-
- return summary;
- },
-};
-
-_ready(Search.init);
diff --git a/pr-preview/pr-273/_static/sg_gallery-binder.css b/pr-preview/pr-273/_static/sg_gallery-binder.css
deleted file mode 100644
index 420005d22..000000000
--- a/pr-preview/pr-273/_static/sg_gallery-binder.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/* CSS for binder integration */
-
-div.binder-badge {
- margin: 1em auto;
- vertical-align: middle;
-}
-
-div.lite-badge {
- margin: 1em auto;
- vertical-align: middle;
-}
diff --git a/pr-preview/pr-273/_static/sg_gallery-dataframe.css b/pr-preview/pr-273/_static/sg_gallery-dataframe.css
deleted file mode 100644
index fac74c43b..000000000
--- a/pr-preview/pr-273/_static/sg_gallery-dataframe.css
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Pandas dataframe css */
-/* Taken from: https://github.com/spatialaudio/nbsphinx/blob/fb3ba670fc1ba5f54d4c487573dbc1b4ecf7e9ff/src/nbsphinx.py#L587-L619 */
-html[data-theme="light"] {
- --sg-text-color: #000;
- --sg-tr-odd-color: #f5f5f5;
- --sg-tr-hover-color: rgba(66, 165, 245, 0.2);
-}
-html[data-theme="dark"] {
- --sg-text-color: #fff;
- --sg-tr-odd-color: #373737;
- --sg-tr-hover-color: rgba(30, 81, 122, 0.2);
-}
-
-table.dataframe {
- border: none !important;
- border-collapse: collapse;
- border-spacing: 0;
- border-color: transparent;
- color: var(--sg-text-color);
- font-size: 12px;
- table-layout: fixed;
- width: auto;
-}
-table.dataframe thead {
- border-bottom: 1px solid var(--sg-text-color);
- vertical-align: bottom;
-}
-table.dataframe tr,
-table.dataframe th,
-table.dataframe td {
- text-align: right;
- vertical-align: middle;
- padding: 0.5em 0.5em;
- line-height: normal;
- white-space: normal;
- max-width: none;
- border: none;
-}
-table.dataframe th {
- font-weight: bold;
-}
-table.dataframe tbody tr:nth-child(odd) {
- background: var(--sg-tr-odd-color);
-}
-table.dataframe tbody tr:hover {
- background: var(--sg-tr-hover-color);
-}
diff --git a/pr-preview/pr-273/_static/sg_gallery-rendered-html.css b/pr-preview/pr-273/_static/sg_gallery-rendered-html.css
deleted file mode 100644
index 93dc2ffb0..000000000
--- a/pr-preview/pr-273/_static/sg_gallery-rendered-html.css
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Adapted from notebook/static/style/style.min.css */
-html[data-theme="light"] {
- --sg-text-color: #000;
- --sg-background-color: #ffffff;
- --sg-code-background-color: #eff0f1;
- --sg-tr-hover-color: rgba(66, 165, 245, 0.2);
- --sg-tr-odd-color: #f5f5f5;
-}
-html[data-theme="dark"] {
- --sg-text-color: #fff;
- --sg-background-color: #121212;
- --sg-code-background-color: #2f2f30;
- --sg-tr-hover-color: rgba(66, 165, 245, 0.2);
- --sg-tr-odd-color: #1f1f1f;
-}
-
-.rendered_html {
- color: var(--sg-text-color);
- /* any extras will just be numbers: */
-}
-.rendered_html em {
- font-style: italic;
-}
-.rendered_html strong {
- font-weight: bold;
-}
-.rendered_html u {
- text-decoration: underline;
-}
-.rendered_html :link {
- text-decoration: underline;
-}
-.rendered_html :visited {
- text-decoration: underline;
-}
-.rendered_html h1 {
- font-size: 185.7%;
- margin: 1.08em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
-}
-.rendered_html h2 {
- font-size: 157.1%;
- margin: 1.27em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
-}
-.rendered_html h3 {
- font-size: 128.6%;
- margin: 1.55em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
-}
-.rendered_html h4 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
-}
-.rendered_html h5 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
-}
-.rendered_html h6 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
-}
-.rendered_html h1:first-child {
- margin-top: 0.538em;
-}
-.rendered_html h2:first-child {
- margin-top: 0.636em;
-}
-.rendered_html h3:first-child {
- margin-top: 0.777em;
-}
-.rendered_html h4:first-child {
- margin-top: 1em;
-}
-.rendered_html h5:first-child {
- margin-top: 1em;
-}
-.rendered_html h6:first-child {
- margin-top: 1em;
-}
-.rendered_html ul:not(.list-inline),
-.rendered_html ol:not(.list-inline) {
- padding-left: 2em;
-}
-.rendered_html ul {
- list-style: disc;
-}
-.rendered_html ul ul {
- list-style: square;
- margin-top: 0;
-}
-.rendered_html ul ul ul {
- list-style: circle;
-}
-.rendered_html ol {
- list-style: decimal;
-}
-.rendered_html ol ol {
- list-style: upper-alpha;
- margin-top: 0;
-}
-.rendered_html ol ol ol {
- list-style: lower-alpha;
-}
-.rendered_html ol ol ol ol {
- list-style: lower-roman;
-}
-.rendered_html ol ol ol ol ol {
- list-style: decimal;
-}
-.rendered_html * + ul {
- margin-top: 1em;
-}
-.rendered_html * + ol {
- margin-top: 1em;
-}
-.rendered_html hr {
- color: var(--sg-text-color);
- background-color: var(--sg-text-color);
-}
-.rendered_html pre {
- margin: 1em 2em;
- padding: 0px;
- background-color: var(--sg-background-color);
-}
-.rendered_html code {
- background-color: var(--sg-code-background-color);
-}
-.rendered_html p code {
- padding: 1px 5px;
-}
-.rendered_html pre code {
- background-color: var(--sg-background-color);
-}
-.rendered_html pre,
-.rendered_html code {
- border: 0;
- color: var(--sg-text-color);
- font-size: 100%;
-}
-.rendered_html blockquote {
- margin: 1em 2em;
-}
-.rendered_html table {
- margin-left: auto;
- margin-right: auto;
- border: none;
- border-collapse: collapse;
- border-spacing: 0;
- color: var(--sg-text-color);
- font-size: 12px;
- table-layout: fixed;
-}
-.rendered_html thead {
- border-bottom: 1px solid var(--sg-text-color);
- vertical-align: bottom;
-}
-.rendered_html tr,
-.rendered_html th,
-.rendered_html td {
- text-align: right;
- vertical-align: middle;
- padding: 0.5em 0.5em;
- line-height: normal;
- white-space: normal;
- max-width: none;
- border: none;
-}
-.rendered_html th {
- font-weight: bold;
-}
-.rendered_html tbody tr:nth-child(odd) {
- background: var(--sg-tr-odd-color);
-}
-.rendered_html tbody tr:hover {
- color: var(--sg-text-color);
- background: var(--sg-tr-hover-color);
-}
-.rendered_html * + table {
- margin-top: 1em;
-}
-.rendered_html p {
- text-align: left;
-}
-.rendered_html * + p {
- margin-top: 1em;
-}
-.rendered_html img {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-.rendered_html * + img {
- margin-top: 1em;
-}
-.rendered_html img,
-.rendered_html svg {
- max-width: 100%;
- height: auto;
-}
-.rendered_html img.unconfined,
-.rendered_html svg.unconfined {
- max-width: none;
-}
-.rendered_html .alert {
- margin-bottom: initial;
-}
-.rendered_html * + .alert {
- margin-top: 1em;
-}
-[dir="rtl"] .rendered_html p {
- text-align: right;
-}
diff --git a/pr-preview/pr-273/_static/sg_gallery.css b/pr-preview/pr-273/_static/sg_gallery.css
deleted file mode 100644
index 72227837d..000000000
--- a/pr-preview/pr-273/_static/sg_gallery.css
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
-Sphinx-Gallery has compatible CSS to fix default sphinx themes
-Tested for Sphinx 1.3.1 for all themes: default, alabaster, sphinxdoc,
-scrolls, agogo, traditional, nature, haiku, pyramid
-Tested for Read the Docs theme 0.1.7 */
-
-/* Define light colors */
-:root, html[data-theme="light"], body[data-theme="light"]{
- --sg-tooltip-foreground: black;
- --sg-tooltip-background: rgba(250, 250, 250, 0.9);
- --sg-tooltip-border: #ccc transparent;
- --sg-thumb-box-shadow-color: #6c757d40;
- --sg-thumb-hover-border: #0069d9;
- --sg-script-out: #888;
- --sg-script-pre: #fafae2;
- --sg-pytb-foreground: #000;
- --sg-pytb-background: #ffe4e4;
- --sg-pytb-border-color: #f66;
- --sg-download-a-background-color: #ffc;
- --sg-download-a-background-image: linear-gradient(to bottom, #ffc, #d5d57e);
- --sg-download-a-border-color: 1px solid #c2c22d;
- --sg-download-a-color: #000;
- --sg-download-a-hover-background-color: #d5d57e;
- --sg-download-a-hover-box-shadow-1: rgba(255, 255, 255, 0.1);
- --sg-download-a-hover-box-shadow-2: rgba(0, 0, 0, 0.25);
-}
-@media(prefers-color-scheme: light) {
- :root[data-theme="auto"], html[data-theme="auto"], body[data-theme="auto"] {
- --sg-tooltip-foreground: black;
- --sg-tooltip-background: rgba(250, 250, 250, 0.9);
- --sg-tooltip-border: #ccc transparent;
- --sg-thumb-box-shadow-color: #6c757d40;
- --sg-thumb-hover-border: #0069d9;
- --sg-script-out: #888;
- --sg-script-pre: #fafae2;
- --sg-pytb-foreground: #000;
- --sg-pytb-background: #ffe4e4;
- --sg-pytb-border-color: #f66;
- --sg-download-a-background-color: #ffc;
- --sg-download-a-background-image: linear-gradient(to bottom, #ffc, #d5d57e);
- --sg-download-a-border-color: 1px solid #c2c22d;
- --sg-download-a-color: #000;
- --sg-download-a-hover-background-color: #d5d57e;
- --sg-download-a-hover-box-shadow-1: rgba(255, 255, 255, 0.1);
- --sg-download-a-hover-box-shadow-2: rgba(0, 0, 0, 0.25);
- }
-}
-
-html[data-theme="dark"], body[data-theme="dark"] {
- --sg-tooltip-foreground: white;
- --sg-tooltip-background: rgba(10, 10, 10, 0.9);
- --sg-tooltip-border: #333 transparent;
- --sg-thumb-box-shadow-color: #79848d40;
- --sg-thumb-hover-border: #003975;
- --sg-script-out: rgb(179, 179, 179);
- --sg-script-pre: #2e2e22;
- --sg-pytb-foreground: #fff;
- --sg-pytb-background: #1b1717;
- --sg-pytb-border-color: #622;
- --sg-download-a-background-color: #443;
- --sg-download-a-background-image: linear-gradient(to bottom, #443, #221);
- --sg-download-a-border-color: 1px solid #3a3a0d;
- --sg-download-a-color: #fff;
- --sg-download-a-hover-background-color: #616135;
- --sg-download-a-hover-box-shadow-1: rgba(0, 0, 0, 0.1);
- --sg-download-a-hover-box-shadow-2: rgba(255, 255, 255, 0.25);
-}
-@media(prefers-color-scheme: dark){
- html[data-theme="auto"], body[data-theme="auto"] {
- --sg-tooltip-foreground: white;
- --sg-tooltip-background: rgba(10, 10, 10, 0.9);
- --sg-tooltip-border: #333 transparent;
- --sg-thumb-box-shadow-color: #79848d40;
- --sg-thumb-hover-border: #003975;
- --sg-script-out: rgb(179, 179, 179);
- --sg-script-pre: #2e2e22;
- --sg-pytb-foreground: #fff;
- --sg-pytb-background: #1b1717;
- --sg-pytb-border-color: #622;
- --sg-download-a-background-color: #443;
- --sg-download-a-background-image: linear-gradient(to bottom, #443, #221);
- --sg-download-a-border-color: 1px solid #3a3a0d;
- --sg-download-a-color: #fff;
- --sg-download-a-hover-background-color: #616135;
- --sg-download-a-hover-box-shadow-1: rgba(0, 0, 0, 0.1);
- --sg-download-a-hover-box-shadow-2: rgba(255, 255, 255, 0.25);
- }
-}
-
-.sphx-glr-thumbnails {
- width: 100%;
- margin: 0px 0px 20px 0px;
-
- /* align thumbnails on a grid */
- justify-content: space-between;
- display: grid;
- /* each grid column should be at least 160px (this will determine
- the actual number of columns) and then take as much of the
- remaining width as possible */
- grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
- gap: 15px;
-}
-.sphx-glr-thumbnails .toctree-wrapper {
- /* hide empty toctree divs added to the DOM
- by sphinx even though the toctree is hidden
- (they would fill grid places with empty divs) */
- display: none;
-}
-.sphx-glr-thumbcontainer {
- background: transparent;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- box-shadow: 0 0 10px var(--sg-thumb-box-shadow-color);
-
- /* useful to absolutely position link in div */
- position: relative;
-
- /* thumbnail width should include padding and borders
- and take all available space */
- box-sizing: border-box;
- width: 100%;
- padding: 10px;
- border: 1px solid transparent;
-
- /* align content in thumbnail */
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 7px;
-}
-.sphx-glr-thumbcontainer p {
- position: absolute;
- top: 0;
- left: 0;
-}
-.sphx-glr-thumbcontainer p,
-.sphx-glr-thumbcontainer p a {
- /* link should cover the whole thumbnail div */
- width: 100%;
- height: 100%;
-}
-.sphx-glr-thumbcontainer p a span {
- /* text within link should be masked
- (we are just interested in the href) */
- display: none;
-}
-.sphx-glr-thumbcontainer:hover {
- border: 1px solid;
- border-color: var(--sg-thumb-hover-border);
- cursor: pointer;
-}
-.sphx-glr-thumbcontainer a.internal {
- bottom: 0;
- display: block;
- left: 0;
- box-sizing: border-box;
- padding: 150px 10px 0;
- position: absolute;
- right: 0;
- top: 0;
-}
-/* Next one is to avoid Sphinx traditional theme to cover all the
-thumbnail with its default link Background color */
-.sphx-glr-thumbcontainer a.internal:hover {
- background-color: transparent;
-}
-
-.sphx-glr-thumbcontainer p {
- margin: 0 0 0.1em 0;
-}
-.sphx-glr-thumbcontainer .figure {
- margin: 10px;
- width: 160px;
-}
-.sphx-glr-thumbcontainer img {
- display: inline;
- max-height: 112px;
- max-width: 160px;
-}
-.sphx-glr-thumbcontainer[tooltip]:hover:after {
- background: var(--sg-tooltip-background);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- color: var(--sg-tooltip-foreground);
- content: attr(tooltip);
- padding: 10px;
- z-index: 98;
- width: 100%;
- height: 100%;
- position: absolute;
- pointer-events: none;
- top: 0;
- box-sizing: border-box;
- overflow: hidden;
- backdrop-filter: blur(3px);
-}
-
-.sphx-glr-script-out {
- color: var(--sg-script-out);
- display: flex;
- gap: 0.5em;
-}
-.sphx-glr-script-out::before {
- content: "Out:";
- /* These numbers come from the pre style in the pydata sphinx theme. This
- * turns out to match perfectly on the rtd theme, but be a bit too low for
- * the pydata sphinx theme. As I could not find a dimension to use that was
- * scaled the same way, I just picked one option that worked pretty close for
- * both. */
- line-height: 1.4;
- padding-top: 10px;
-}
-.sphx-glr-script-out .highlight {
- background-color: transparent;
- /* These options make the div expand... */
- flex-grow: 1;
- /* ... but also keep it from overflowing its flex container. */
- overflow: auto;
-}
-.sphx-glr-script-out .highlight pre {
- background-color: var(--sg-script-pre);
- border: 0;
- max-height: 30em;
- overflow: auto;
- padding-left: 1ex;
- /* This margin is necessary in the pydata sphinx theme because pre has a box
- * shadow which would be clipped by the overflow:auto in the parent div
- * above. */
- margin: 2px;
- word-break: break-word;
-}
-.sphx-glr-script-out + p {
- margin-top: 1.8em;
-}
-blockquote.sphx-glr-script-out {
- margin-left: 0pt;
-}
-.sphx-glr-script-out.highlight-pytb .highlight pre {
- color: var(--sg-pytb-foreground);
- background-color: var(--sg-pytb-background);
- border: 1px solid var(--sg-pytb-border-color);
- margin-top: 10px;
- padding: 7px;
-}
-
-div.sphx-glr-footer {
- text-align: center;
-}
-
-div.sphx-glr-download {
- margin: 1em auto;
- vertical-align: middle;
-}
-
-div.sphx-glr-download a {
- background-color: var(--sg-download-a-background-color);
- background-image: var(--sg-download-a-background-image);
- border-radius: 4px;
- border: 1px solid var(--sg-download-a-border-color);
- color: var(--sg-download-a-color);
- display: inline-block;
- font-weight: bold;
- padding: 1ex;
- text-align: center;
-}
-
-div.sphx-glr-download code.download {
- display: inline-block;
- white-space: normal;
- word-break: normal;
- overflow-wrap: break-word;
- /* border and background are given by the enclosing 'a' */
- border: none;
- background: none;
-}
-
-div.sphx-glr-download a:hover {
- box-shadow: inset 0 1px 0 var(--sg-download-a-hover-box-shadow-1), 0 1px 5px var(--sg-download-a-hover-box-shadow-2);
- text-decoration: none;
- background-image: none;
- background-color: var(--sg-download-a-hover-background-color);
-}
-
-.sphx-glr-example-title:target::before {
- display: block;
- content: "";
- margin-top: -50px;
- height: 50px;
- visibility: hidden;
-}
-
-ul.sphx-glr-horizontal {
- list-style: none;
- padding: 0;
-}
-ul.sphx-glr-horizontal li {
- display: inline;
-}
-ul.sphx-glr-horizontal img {
- height: auto !important;
-}
-
-.sphx-glr-single-img {
- margin: auto;
- display: block;
- max-width: 100%;
-}
-
-.sphx-glr-multi-img {
- max-width: 42%;
- height: auto;
-}
-
-div.sphx-glr-animation {
- margin: auto;
- display: block;
- max-width: 100%;
-}
-div.sphx-glr-animation .animation {
- display: block;
-}
-
-p.sphx-glr-signature a.reference.external {
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- padding: 3px;
- font-size: 75%;
- text-align: right;
- margin-left: auto;
- display: table;
-}
-
-.sphx-glr-clear {
- clear: both;
-}
-
-a.sphx-glr-backref-instance {
- text-decoration: none;
-}
diff --git a/pr-preview/pr-273/_static/skeleton.css b/pr-preview/pr-273/_static/skeleton.css
deleted file mode 100644
index 467c878c6..000000000
--- a/pr-preview/pr-273/_static/skeleton.css
+++ /dev/null
@@ -1,296 +0,0 @@
-/* Some sane resets. */
-html {
- height: 100%;
-}
-
-body {
- margin: 0;
- min-height: 100%;
-}
-
-/* All the flexbox magic! */
-body,
-.sb-announcement,
-.sb-content,
-.sb-main,
-.sb-container,
-.sb-container__inner,
-.sb-article-container,
-.sb-footer-content,
-.sb-header,
-.sb-header-secondary,
-.sb-footer {
- display: flex;
-}
-
-/* These order things vertically */
-body,
-.sb-main,
-.sb-article-container {
- flex-direction: column;
-}
-
-/* Put elements in the center */
-.sb-header,
-.sb-header-secondary,
-.sb-container,
-.sb-content,
-.sb-footer,
-.sb-footer-content {
- justify-content: center;
-}
-/* Put elements at the ends */
-.sb-article-container {
- justify-content: space-between;
-}
-
-/* These elements grow. */
-.sb-main,
-.sb-content,
-.sb-container,
-article {
- flex-grow: 1;
-}
-
-/* Because padding making this wider is not fun */
-article {
- box-sizing: border-box;
-}
-
-/* The announcements element should never be wider than the page. */
-.sb-announcement {
- max-width: 100%;
-}
-
-.sb-sidebar-primary,
-.sb-sidebar-secondary {
- flex-shrink: 0;
- width: 17rem;
-}
-
-.sb-announcement__inner {
- justify-content: center;
-
- box-sizing: border-box;
- height: 3rem;
-
- overflow-x: auto;
- white-space: nowrap;
-}
-
-/* Sidebars, with checkbox-based toggle */
-.sb-sidebar-primary,
-.sb-sidebar-secondary {
- position: fixed;
- height: 100%;
- top: 0;
-}
-
-.sb-sidebar-primary {
- left: -17rem;
- transition: left 250ms ease-in-out;
-}
-.sb-sidebar-secondary {
- right: -17rem;
- transition: right 250ms ease-in-out;
-}
-
-.sb-sidebar-toggle {
- display: none;
-}
-.sb-sidebar-overlay {
- position: fixed;
- top: 0;
- width: 0;
- height: 0;
-
- transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease;
-
- opacity: 0;
- background-color: rgba(0, 0, 0, 0.54);
-}
-
-#sb-sidebar-toggle--primary:checked
- ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"],
-#sb-sidebar-toggle--secondary:checked
- ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] {
- width: 100%;
- height: 100%;
- opacity: 1;
- transition: width 0ms ease, height 0ms ease, opacity 250ms ease;
-}
-
-#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary {
- left: 0;
-}
-#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary {
- right: 0;
-}
-
-/* Full-width mode */
-.drop-secondary-sidebar-for-full-width-content
- .hide-when-secondary-sidebar-shown {
- display: none !important;
-}
-.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary {
- display: none !important;
-}
-
-/* Mobile views */
-.sb-page-width {
- width: 100%;
-}
-
-.sb-article-container,
-.sb-footer-content__inner,
-.drop-secondary-sidebar-for-full-width-content .sb-article,
-.drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 100vw;
-}
-
-.sb-article,
-.match-content-width {
- padding: 0 1rem;
- box-sizing: border-box;
-}
-
-@media (min-width: 32rem) {
- .sb-article,
- .match-content-width {
- padding: 0 2rem;
- }
-}
-
-/* Tablet views */
-@media (min-width: 42rem) {
- .sb-article-container {
- width: auto;
- }
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 42rem;
- }
- .sb-article,
- .match-content-width {
- width: 42rem;
- }
-}
-@media (min-width: 46rem) {
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 46rem;
- }
- .sb-article,
- .match-content-width {
- width: 46rem;
- }
-}
-@media (min-width: 50rem) {
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 50rem;
- }
- .sb-article,
- .match-content-width {
- width: 50rem;
- }
-}
-
-/* Tablet views */
-@media (min-width: 59rem) {
- .sb-sidebar-secondary {
- position: static;
- }
- .hide-when-secondary-sidebar-shown {
- display: none !important;
- }
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 59rem;
- }
- .sb-article,
- .match-content-width {
- width: 42rem;
- }
-}
-@media (min-width: 63rem) {
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 63rem;
- }
- .sb-article,
- .match-content-width {
- width: 46rem;
- }
-}
-@media (min-width: 67rem) {
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 67rem;
- }
- .sb-article,
- .match-content-width {
- width: 50rem;
- }
-}
-
-/* Desktop views */
-@media (min-width: 76rem) {
- .sb-sidebar-primary {
- position: static;
- }
- .hide-when-primary-sidebar-shown {
- display: none !important;
- }
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 59rem;
- }
- .sb-article,
- .match-content-width {
- width: 42rem;
- }
-}
-
-/* Full desktop views */
-@media (min-width: 80rem) {
- .sb-article,
- .match-content-width {
- width: 46rem;
- }
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 63rem;
- }
-}
-
-@media (min-width: 84rem) {
- .sb-article,
- .match-content-width {
- width: 50rem;
- }
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 67rem;
- }
-}
-
-@media (min-width: 88rem) {
- .sb-footer-content__inner,
- .drop-secondary-sidebar-for-full-width-content .sb-article,
- .drop-secondary-sidebar-for-full-width-content .match-content-width {
- width: 67rem;
- }
- .sb-page-width {
- width: 88rem;
- }
-}
diff --git a/pr-preview/pr-273/_static/sphinx_highlight.js b/pr-preview/pr-273/_static/sphinx_highlight.js
deleted file mode 100644
index 8a96c69a1..000000000
--- a/pr-preview/pr-273/_static/sphinx_highlight.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Highlighting utilities for Sphinx HTML documentation. */
-"use strict";
-
-const SPHINX_HIGHLIGHT_ENABLED = true
-
-/**
- * highlight a given string on a node by wrapping it in
- * span elements with the given class name.
- */
-const _highlight = (node, addItems, text, className) => {
- if (node.nodeType === Node.TEXT_NODE) {
- const val = node.nodeValue;
- const parent = node.parentNode;
- const pos = val.toLowerCase().indexOf(text);
- if (
- pos >= 0 &&
- !parent.classList.contains(className) &&
- !parent.classList.contains("nohighlight")
- ) {
- let span;
-
- const closestNode = parent.closest("body, svg, foreignObject");
- const isInSVG = closestNode && closestNode.matches("svg");
- if (isInSVG) {
- span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- } else {
- span = document.createElement("span");
- span.classList.add(className);
- }
-
- span.appendChild(document.createTextNode(val.substr(pos, text.length)));
- const rest = document.createTextNode(val.substr(pos + text.length));
- parent.insertBefore(
- span,
- parent.insertBefore(
- rest,
- node.nextSibling
- )
- );
- node.nodeValue = val.substr(0, pos);
- /* There may be more occurrences of search term in this node. So call this
- * function recursively on the remaining fragment.
- */
- _highlight(rest, addItems, text, className);
-
- if (isInSVG) {
- const rect = document.createElementNS(
- "http://www.w3.org/2000/svg",
- "rect"
- );
- const bbox = parent.getBBox();
- rect.x.baseVal.value = bbox.x;
- rect.y.baseVal.value = bbox.y;
- rect.width.baseVal.value = bbox.width;
- rect.height.baseVal.value = bbox.height;
- rect.setAttribute("class", className);
- addItems.push({ parent: parent, target: rect });
- }
- }
- } else if (node.matches && !node.matches("button, select, textarea")) {
- node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
- }
-};
-const _highlightText = (thisNode, text, className) => {
- let addItems = [];
- _highlight(thisNode, addItems, text, className);
- addItems.forEach((obj) =>
- obj.parent.insertAdjacentElement("beforebegin", obj.target)
- );
-};
-
-/**
- * Small JavaScript module for the documentation.
- */
-const SphinxHighlight = {
-
- /**
- * highlight the search words provided in localstorage in the text
- */
- highlightSearchWords: () => {
- if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
-
- // get and clear terms from localstorage
- const url = new URL(window.location);
- const highlight =
- localStorage.getItem("sphinx_highlight_terms")
- || url.searchParams.get("highlight")
- || "";
- localStorage.removeItem("sphinx_highlight_terms")
- url.searchParams.delete("highlight");
- window.history.replaceState({}, "", url);
-
- // get individual terms from highlight string
- const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
- if (terms.length === 0) return; // nothing to do
-
- // There should never be more than one element matching "div.body"
- const divBody = document.querySelectorAll("div.body");
- const body = divBody.length ? divBody[0] : document.querySelector("body");
- window.setTimeout(() => {
- terms.forEach((term) => _highlightText(body, term, "highlighted"));
- }, 10);
-
- const searchBox = document.getElementById("searchbox");
- if (searchBox === null) return;
- searchBox.appendChild(
- document
- .createRange()
- .createContextualFragment(
- '' +
- '' +
- _("Hide Search Matches") +
- "
"
- )
- );
- },
-
- /**
- * helper function to hide the search marks again
- */
- hideSearchWords: () => {
- document
- .querySelectorAll("#searchbox .highlight-link")
- .forEach((el) => el.remove());
- document
- .querySelectorAll("span.highlighted")
- .forEach((el) => el.classList.remove("highlighted"));
- localStorage.removeItem("sphinx_highlight_terms")
- },
-
- initEscapeListener: () => {
- // only install a listener if it is really needed
- if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
-
- document.addEventListener("keydown", (event) => {
- // bail for input elements
- if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
- // bail with special keys
- if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
- if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
- SphinxHighlight.hideSearchWords();
- event.preventDefault();
- }
- });
- },
-};
-
-_ready(() => {
- /* Do not call highlightSearchWords() when we are on the search page.
- * It will highlight words from the *previous* search query.
- */
- if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
- SphinxHighlight.initEscapeListener();
-});
diff --git a/pr-preview/pr-273/_static/styles/furo-extensions.css b/pr-preview/pr-273/_static/styles/furo-extensions.css
deleted file mode 100644
index bc447f228..000000000
--- a/pr-preview/pr-273/_static/styles/furo-extensions.css
+++ /dev/null
@@ -1,2 +0,0 @@
-#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)}
-/*# sourceMappingURL=furo-extensions.css.map*/
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/styles/furo-extensions.css.map b/pr-preview/pr-273/_static/styles/furo-extensions.css.map
deleted file mode 100644
index 9ba5637f9..000000000
--- a/pr-preview/pr-273/_static/styles/furo-extensions.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/styles/furo.css b/pr-preview/pr-273/_static/styles/furo.css
deleted file mode 100644
index 3d29a218f..000000000
--- a/pr-preview/pr-273/_static/styles/furo.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right}
-/*# sourceMappingURL=furo.css.map*/
\ No newline at end of file
diff --git a/pr-preview/pr-273/_static/styles/furo.css.map b/pr-preview/pr-273/_static/styles/furo.css.map
deleted file mode 100644
index d1dfb109d..000000000
--- a/pr-preview/pr-273/_static/styles/furo.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"styles/furo.css","mappings":"AAAA,2EAA2E,CAU3E,KAEE,6BAA8B,CAD9B,gBAEF,CASA,KACE,QACF,CAMA,KACE,aACF,CAOA,GACE,aAAc,CACd,cACF,CAUA,GACE,sBAAuB,CACvB,QAAS,CACT,gBACF,CAOA,IACE,+BAAiC,CACjC,aACF,CASA,EACE,4BACF,CAOA,YACE,kBAAmB,CACnB,yBAA0B,CAC1B,gCACF,CAMA,SAEE,kBACF,CAOA,cAGE,+BAAiC,CACjC,aACF,CAeA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CAEA,IACE,aACF,CAEA,IACE,SACF,CASA,IACE,iBACF,CAUA,sCAKE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACF,CAOA,aAEE,gBACF,CAOA,cAEE,mBACF,CAMA,gDAIE,yBACF,CAMA,wHAIE,iBAAkB,CAClB,SACF,CAMA,4GAIE,6BACF,CAMA,SACE,0BACF,CASA,OACE,qBAAsB,CACtB,aAAc,CACd,aAAc,CACd,cAAe,CACf,SAAU,CACV,kBACF,CAMA,SACE,uBACF,CAMA,SACE,aACF,CAOA,6BAEE,qBAAsB,CACtB,SACF,CAMA,kFAEE,WACF,CAOA,cACE,4BAA6B,CAC7B,mBACF,CAMA,yCACE,uBACF,CAOA,6BACE,yBAA0B,CAC1B,YACF,CASA,QACE,aACF,CAMA,QACE,iBACF,CAiBA,kBACE,YACF,CCvVA,aAcE,kEACE,uBAOF,WACE,iDAMF,gCACE,wBAEF,qCAEE,uBADA,uBACA,CAEF,SACE,wBAtBA,CCpBJ,iBAOE,6BAEA,mBANA,qBAEA,sBACA,0BAFA,oBAHA,4BAOA,6BANA,mBAOA,CAEF,gBACE,aCPF,KCGE,mHAEA,wGAGA,wBAAyB,CACzB,wBAAyB,CACzB,4BAA6B,CAC7B,yBAA0B,CAC1B,2BAA4B,CAG5B,sDAAuD,CACvD,gDAAiD,CACjD,wDAAyD,CAGzD,0CAA2C,CAC3C,gDAAiD,CACjD,gDAAiD,CAKjD,gCAAiC,CACjC,sCAAuC,CAGvC,2CAA4C,CAG5C,uCAAwC,CChCxC,+FAGA,uBAAwB,CAGxB,iCAAkC,CAClC,kCAAmC,CAEnC,+BAAgC,CAChC,sCAAuC,CACvC,sCAAuC,CACvC,qGAIA,mDAAoD,CAEpD,mCAAoC,CACpC,8CAA+C,CAC/C,gDAAiD,CACjD,kCAAmC,CACnC,6DAA8D,CAG9D,6BAA8B,CAC9B,6BAA8B,CAC9B,+BAAgC,CAChC,kCAAmC,CACnC,kCAAmC,CCPjC,ukBCYA,srCAZF,kaCVA,mLAOA,oTAWA,2UAaA,0CACA,gEACA,0CAGA,gEAUA,yCACA,+DAGA,4CACA,CACA,iEAGA,sGACA,uCACA,4DAGA,sCACA,2DAEA,4CACA,kEACA,oGACA,CAEA,0GACA,+CAGA,+MAOA,+EACA,wCAIA,4DACA,sEACA,kEACA,sEACA,gDAGA,+DACA,0CACA,gEACA,gGACA,CAGA,2DACA,qDAGA,0CACA,8CACA,oDACA,oDL7GF,iCAEA,iEAME,oCKyGA,yDAIA,sCACA,kCACA,sDAGA,0CACA,kEACA,oDAEA,sDAGA,oCACA,oEAIA,CAGA,yDAGA,qDACA,oDAGA,6DAIA,iEAGA,2DAEA,2DL9IE,4DAEA,gEAIF,gEKgGA,gFAIA,oNAOA,qDAEA,gFAIA,4DAIA,oEAMA,yEAIA,6DACA,0DAGA,uDAGA,qDAEA,wDLpII,6DAEA,yDACE,2DAMN,uCAIA,yCACE,8CAGF,sDMjDA,6DAKA,oCAIA,4CACA,kBAGF,sBAMA,2BAME,qCAGA,qCAEA,iCAEA,+BAEA,mCAEA,qCAIA,CACA,gCACA,gDAKA,kCAIA,6BAEA,0CAQA,kCAIF,8BAGE,8BACA,uCAGF,sCAKE,kCAEA,sDAGA,iCACE,CACA,2FAGA,gCACE,CACA,+DCzEJ,wCAEA,sBAEF,yDAEE,mCACA,wDAGA,2GAGA,wIACE,gDAMJ,kCAGE,6BACA,0CAGA,gEACA,8BACA,uCAKA,sCAIA,kCACA,sDACA,iCACA,sCAOA,sDAKE,gGAIE,+CAGN,sBAEE,yCAMA,0BAMA,yLAMA,aACA,MAEF,6BACE,2DAIF,wCAIE,kCAGA,SACA,kCAKA,mBAGA,CAJA,eACA,CAHF,gBAEE,CAWA,mBACA,mBACA,mDAGA,YACA,CACA,kBACA,CAEE,kBAKJ,OAPE,kBAQA,CADF,GACE,iCACA,wCAEA,wBACA,aACA,CAFA,WAEA,GACA,oBACA,CAFA,gBAEA,aACE,+CAIF,UAJE,kCAIF,WACA,iBACA,GAGA,uBACE,CAJF,yBAGA,CACE,iDACA,uCAEA,yDACE,cACA,wDAKN,yDAIE,uBAEF,kBACE,uBAEA,kDAIA,0DAGA,CAHA,oBAGA,0GAYA,aAEA,CAHA,YAGA,4HAKF,+CAGE,sBAEF,WAKE,0CAEA,CALA,qCAGA,CAJA,WAOA,SAIA,2CAJA,qCAIA,CACE,wBACA,OACA,YAEJ,gBACE,gBAIA,+CAKF,CAGE,kDAGA,CANF,8BAGE,CAGA,YAEA,CAdF,2BACE,CAHA,UAEF,CAYE,UAEA,CACA,0CACF,iEAOE,iCACA,8BAGA,wCAIA,wBAKE,0CAKF,CARE,6DAGA,CALF,qBAEE,CASA,YACA,yBAGA,CAEE,cAKN,CAPI,sBAOJ,gCAGE,qBAEA,WACA,aACA,sCAEA,mBACA,6BAGA,uEADA,qBACA,6BAIA,yBACA,qCAEE,UAEA,YACA,sBAEF,8BAGA,CAPE,aACA,WAMF,4BACE,sBACA,WAMJ,uBACE,cAYE,mBAXA,qDAKA,qCAGA,CAEA,YACA,CAHA,2BAEA,CACA,oCAEA,4CACA,uBAIA,oCAEJ,CAFI,cAIF,iBACE,CAHJ,kBAGI,yBAEA,oCAIA,qDAMF,mEAEA,CACE,8CAKA,gCAEA,qCAGA,oCAGE,sBACA,CAJF,WAEE,CAFF,eAEE,SAEA,mBACA,qCACE,aACA,CAFF,YADA,qBACA,WAEE,sBACA,kEAEN,2BAEE,iDAKA,uCAGF,CACE,0DAKA,kBACF,CAFE,sBAGA,mBACA,0BAEJ,yBAII,aADA,WACA,CAMF,UAFE,kBAEF,CAJF,gBACE,CAHE,iBAMF,6CC9ZF,yBACE,WACA,iBAEA,aAFA,iBAEA,6BAEA,kCACA,mBAKA,gCAGA,CARA,QAEA,CAGA,UALA,qBAEA,qDAGA,CALA,OAQA,4BACE,cAGF,2BACE,gCAEJ,CAHE,UAGF,8CAGE,CAHF,UAGE,wCAGA,qBACA,CAFA,UAEA,6CAGA,yCAIA,sBAHA,UAGA,kCACE,OACA,CAFF,KAEE,cAQF,0CACE,CAFF,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,OAII,eACA,CAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,qCACE,gCACA,2EACA,sDAKJ,aACE,mDAII,CAJJ,6CAII,kEACA,iBACE,iDACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,+BACA,CAFA,eAEA,wCAEF,YACE,iBACA,mCACA,0DAGF,qBAEE,CAFF,kBAEE,+BAIA,yCAEE,qBADA,gBACA,yBAKF,eACA,CAFF,YACE,CACA,iBACA,qDAEA,mDCvIJ,2FAOE,iCACA,CAEA,eACA,CAHA,kBAEA,CAFA,wBAGA,8BACA,eACE,CAFF,YAEE,0BACA,8CAGA,oBACE,oCAGA,kBACE,8DAEA,iBAEN,UACE,8BAIJ,+CAEE,qDAEF,kDAIE,YAEF,CAFE,YAEF,CCjCE,mFAJA,QACA,UAIE,CADF,iBACE,mCAGA,iDACE,+BAGF,wBAEA,mBAKA,6CAEF,CAHE,mBACA,CAEF,kCAIE,CARA,kBACA,CAFF,eASE,YACA,mBAGF,CAJE,UAIF,wCCjCA,oBDmCE,wBCpCJ,uCACE,8BACA,4CACA,oBAGA,2CCAA,6CAGE,CAPF,uBAIA,CDGA,gDACE,6BCVJ,CAWM,2CAEF,CAJA,kCAEE,CDJF,aCLF,gBDKE,uBCMA,gCAGA,gDAGE,wBAGJ,0BAEA,iBACE,aACF,CADE,UACF,uBACE,aACF,oBACE,YACF,4BACE,6CAMA,CAYF,6DAZE,mCAGE,iCASJ,4BAGE,4DADA,+BACA,CAFA,qBAEA,yBACE,aAEF,wBAHA,SAGA,iHACE,2DAKF,CANA,yCACE,CADF,oCAMA,uSAIA,sGACE,oDChEJ,WAEF,yBACE,QACA,eAEA,gBAEE,uCAGA,CALF,iCAKE,uCAGA,0BACA,CACA,oBACA,iCClBJ,gBACE,KAGF,qBACE,YAGF,CAHE,cAGF,gCAEE,mBACA,iEAEA,oCACA,wCAEA,sBACA,WAEA,CAFA,YAEA,8EAEA,mCAFA,iBAEA,6BAIA,wEAKA,sDAIE,CARF,mDAIA,CAIE,cAEF,8CAIA,oBAFE,iBAEF,8CAGE,eAEF,CAFE,YAEF,OAEE,kBAGJ,CAJI,eACA,CAFF,mBAKF,yCCjDE,oBACA,CAFA,iBAEA,uCAKE,iBACA,qCAGA,mBCZJ,CDWI,gBCXJ,6BAEE,eACA,sBAGA,eAEA,sBACA,oDACA,iGAMA,gBAFE,YAEF,8FAME,iJClBF,YACA,gNAUE,6BAEF,oTAcI,kBACF,gHAIA,qBACE,eACF,qDACE,kBACF,6DACE,4BCxCJ,oBAEF,qCAEI,+CAGF,uBACE,uDAGJ,oBAkBE,mDAhBA,+CAaA,CAbA,oBAaA,0FAEE,CAFF,gGAbA,+BAaA,0BAGA,mQAIA,oNAEE,iBAGJ,CAHI,gBADA,gBAIJ,8CAYI,CAZJ,wCAYI,sVACE,iCAGA,uEAHA,QAGA,qXAKJ,iDAGF,CARM,+CACE,iDAIN,CALI,gBAQN,mHACE,gBAGF,2DACE,0EAOA,0EAKA,6EC/EA,iDACA,gCACA,oDAGA,qBACA,oDCFA,cACA,eAEA,yBAGF,sBAEE,iBACA,sNAWA,iBACE,kBACA,wRAgBA,kBAEA,iOAgBA,uCACE,uEAEA,kBAEF,qUAuBE,iDAIJ,CACA,geCxFF,4BAEE,CAQA,6JACA,iDAIA,sEAGA,mDAOF,iDAGE,4DAIA,8CACA,qDAEE,eAFF,cAEE,oBAEF,uBAFE,kCAGA,eACA,iBACA,mBAIA,mDACA,CAHA,uCAEA,CAJA,0CACA,CAIA,gBAJA,gBACA,oBADA,gBAIA,wBAEJ,gBAGE,6BACA,YAHA,iBAGA,gCACA,iEAEA,6CACA,sDACA,0BADA,wBACA,0BACA,oIAIA,mBAFA,YAEA,qBACA,0CAIE,uBAEF,CAHA,yBACE,CAEF,iDACE,mFAKJ,oCACE,CANE,aAKJ,CACE,qEAIA,YAFA,WAEA,CAHA,aACA,CAEA,gBACE,4BACA,sBADA,aACA,gCAMF,oCACA,yDACA,2CAEA,qBAGE,kBAEA,CACA,mCAIF,CARE,YACA,CAOF,iCAEE,CAPA,oBACA,CAQA,oBACE,uDAEJ,sDAGA,CAHA,cAGA,0BACE,oDAIA,oCACA,4BACA,sBAGA,cAEA,oFAGA,sBAEA,yDACE,CAIA,iBAJA,wBAIA,6CAJA,6CAOA,4BAGJ,CAHI,cAGJ,yCAGA,kBACE,CAIA,iDAEA,CATA,YAEF,CACE,4CAGA,kBAIA,wEAEA,wDAIF,kCAOE,iDACA,CARF,WAIE,sCAGA,CANA,2CACA,CAMA,oEARF,iBACE,CACA,qCAMA,iBAuBE,uBAlBF,YAKA,2DALA,uDAKA,CALA,sBAiBA,4CACE,CALA,gRAIF,YACE,UAEN,uBACE,YACA,mCAOE,+CAGA,8BAGF,+CAGA,4BCjNA,SDiNA,qFCjNA,gDAGA,sCACA,qCACA,sDAIF,CAIE,kDAGA,CAPF,0CAOE,kBAEA,kDAEA,CAHA,eACA,CAFA,YACA,CADA,SAIA,mHAIE,CAGA,6CAFA,oCAeE,CAbF,yBACE,qBAEJ,CAGE,oBACA,CAEA,YAFA,2CACF,CACE,uBAEA,mFAEE,CALJ,oBACE,CAEA,UAEE,gCAGF,sDAEA,yCC7CJ,oCAGA,CD6CE,yXAQE,sCCrDJ,wCAGA,oCACE","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the