From 83ec855b9347c6f56534bba2d15ad9dd011954d8 Mon Sep 17 00:00:00 2001 From: MikeLippincott <1michaell2017@gmail.com> Date: Sat, 1 Nov 2025 16:04:36 -0600 Subject: [PATCH 1/5] onboard the new data --- .../0.patient_specific_preprocessing.ipynb | 4 +- .../1.make_zstack_and_copy_over.ipynb | 11552 ++++++++++++++++ .../notebooks/1.update_file_structure.ipynb | 534 - ...=> 2.perform_file_corruption_checks.ipynb} | 178 +- .../notebooks/2a.make_z-stack_images.ipynb | 243 - 0.preprocessing_data/pyproject.toml | 42 + 3a.DL_features/utils/Point-BERT | 1 + 3a.DL_features/utils/Pointnet2_PyTorch | 1 + environments/preprocessing_env.yml | 9 +- pointBert_subdir/Point-BERT | 1 + utils/preprocessing_funcs.py | 108 + utils/pyproject.toml | 49 + 12 files changed, 11896 insertions(+), 826 deletions(-) create mode 100644 0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb delete mode 100644 0.preprocessing_data/notebooks/1.update_file_structure.ipynb rename 0.preprocessing_data/notebooks/{2b.perform_file_corruption_checks.ipynb => 2.perform_file_corruption_checks.ipynb} (63%) delete mode 100644 0.preprocessing_data/notebooks/2a.make_z-stack_images.ipynb create mode 100644 0.preprocessing_data/pyproject.toml create mode 160000 3a.DL_features/utils/Point-BERT create mode 160000 3a.DL_features/utils/Pointnet2_PyTorch create mode 160000 pointBert_subdir/Point-BERT create mode 100644 utils/preprocessing_funcs.py create mode 100644 utils/pyproject.toml diff --git a/0.preprocessing_data/notebooks/0.patient_specific_preprocessing.ipynb b/0.preprocessing_data/notebooks/0.patient_specific_preprocessing.ipynb index 8b608a1f..a7d6f3e9 100644 --- a/0.preprocessing_data/notebooks/0.patient_specific_preprocessing.ipynb +++ b/0.preprocessing_data/notebooks/0.patient_specific_preprocessing.ipynb @@ -105,7 +105,7 @@ ], "metadata": { "kernelspec": { - "display_name": "gff_preprocessing_env", + "display_name": ".venv (3.11.11)", "language": "python", "name": "python3" }, @@ -119,7 +119,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.15" + "version": "3.11.11" } }, "nbformat": 4, diff --git a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb new file mode 100644 index 00000000..b3b3cd86 --- /dev/null +++ b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb @@ -0,0 +1,11552 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dd91c916", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a03e0a4d", + "metadata": {}, + "outputs": [], + "source": [ + "import argparse\n", + "import os\n", + "import pathlib\n", + "import re\n", + "import sys\n", + "\n", + "import numpy as np\n", + "import tifffile\n", + "import tqdm\n", + "from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook\n", + "from preprocessing_funcs import (\n", + " check_well_dir_name_format,\n", + " get_to_the_unested_dir,\n", + " get_well_fov_dirs,\n", + " read_2D_image_for_zstacking,\n", + ")\n", + "\n", + "root_dir, in_notebook = init_notebook()\n", + "\n", + "if in_notebook:\n", + " import tqdm.notebook as tqdm\n", + "else:\n", + " import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d8aa9728", + "metadata": {}, + "outputs": [], + "source": [ + "argparse = argparse.ArgumentParser(\n", + " description=\"Copy files from one directory to another\"\n", + ")\n", + "argparse.add_argument(\"--HPC\", action=\"store_true\", help=\"Type of compute to run on\")\n", + "# Parse arguments\n", + "args = argparse.parse_args(args=sys.argv[1:] if \"ipykernel\" not in sys.argv[0] else [])\n", + "HPC = args.HPC" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "72dfffaf", + "metadata": {}, + "outputs": [], + "source": [ + "# check if bandicoot is set\n", + "bandicoot_path = pathlib.Path(os.path.expanduser(\"~/mnt/bandicoot\")).resolve()\n", + "if not HPC and bandicoot_path.exists():\n", + " bandicoot = True\n", + "else:\n", + " bandicoot = False\n", + "\n", + "bandicoot = False" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "186468e0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Raw image dir: /home/lippincm/Desktop/20TB_A/NF1_Patient_organoids\n" + ] + } + ], + "source": [ + "if HPC:\n", + " raw_image_dir = pathlib.Path(\"/pl/active/koala/GFF_Data/GFF-Raw/\").resolve(\n", + " strict=True\n", + " )\n", + " output_base_dir = root_dir\n", + "elif bandicoot:\n", + " # comment out depending on whose computer you are on\n", + " # mike's computer\n", + " bandicoot_path = pathlib.Path(\n", + " os.path.expanduser(\"~/mnt/bandicoot/NF1_organoid_data\")\n", + " ).resolve(strict=True)\n", + " raw_image_dir = pathlib.Path(f\"{bandicoot_path}/Raw_patient_files\").resolve(\n", + " strict=True\n", + " )\n", + " output_base_dir = bandicoot_path\n", + "else:\n", + " # comment out depending on whose computer you are on\n", + " # mike's computer\n", + " raw_image_dir = pathlib.Path(\n", + " os.path.expanduser(\"~/Desktop/20TB_A/NF1_Patient_organoids\")\n", + " ).resolve(strict=True)\n", + " # Jenna's computer\n", + " # raw_image_dir_local = pathlib.Path(\"/media/18tbdrive/GFF_organoid_data/\")\n", + " output_base_dir = root_dir\n", + "print(f\"Raw image dir: {raw_image_dir}\")" + ] + }, + { + "cell_type": "markdown", + "id": "f36481e2", + "metadata": {}, + "source": [ + "## Define paths" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8b44eb61", + "metadata": {}, + "outputs": [], + "source": [ + "# Define parent and destination directories in a single dictionary\n", + "\"\"\"\n", + "This dictionary maps patient IDs to their corresponding parent directories,\n", + "destination directories, and metadata for processing.\n", + "Nested dictionary name: patientID_tumorID\n", + "Keys:\n", + "- parent: Path to the parent directory containing raw images.\n", + "- destination: Path to the output directory for processed images.\n", + "- times_nested: Number of nested timepoint directories.\n", + "- well_position: Index of the well position in the filename when split by underscores.\n", + "- channel_position: Index of the channel position in the filename when split by underscores.\n", + "\"\"\"\n", + "\n", + "dir_mapping = {\n", + " # \"NF0014_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"NF0014_T2\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"NF0016_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # # \"NF0017\": {\n", + " # # \"parent\": pathlib.Path(\n", + " # # f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", + " # # ).resolve(strict=True),\n", + " # # \"destination\": pathlib.Path(\n", + " # # f\"{output_base_dir}/data/NF0017/zstack_images\"\n", + " # # ).resolve(),\n", + " # # \"times_nested\": 2,\n", + " # # \"well_position\": 0,\n", + " # # \"channel_position\": 1 # },\n", + " # \"NF0018_T6\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"NF0021_T1\": {\n", + " # \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", + " # strict=True\n", + " # ),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"NF0030_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " \"NF0031_T1_part_I\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0031_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " \"NF0031_T1_part_II\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0031-T1 Combined 2_2/NF0031-T1 Combined 2:2\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0031_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " \"NF0035_T1_part_I\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0035-T1-Part-1/NF0035-T1-Combined Part-1\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0035_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0035_T1_part_II\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0035-T1-Part-2/NF0035-T1-Combined Part-2\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0035_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0037-T1-Z-1\": {\n", + " \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0037-T1-Z-1/NF0037-T1-Z-1\").resolve(\n", + " strict=True\n", + " ),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0037_T1-Z-1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " \"NF0037-T1-Z-0.5\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0037-T1-Z-0.5/NF0037-T1-ZTEST2-0.5\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0037_T1-Z-0.5/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " \"NF0037-T1-Z-0.2\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0037-T1-Z-0.2/NF0037-T1-Z-0.2/NF0037-T1-ZTEST2-0.2\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0037_T1-Z-0.2/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " \"NF0037-T1-Z-0.1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0037-T1-Z-0.1/NF0037-T1-Z-0.1/NF0037-T1-ZTEST2\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0037_T1-Z-0.1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 0,\n", + " \"well_position\": -1,\n", + " \"channel_position\": -3,\n", + " },\n", + " # \"NF0040_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"SACRO219_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + " # \"SARCO361_T1\": {\n", + " # \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", + " # strict=True\n", + " # ),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1\n", + " # },\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "4fbd735d", + "metadata": {}, + "source": [ + "## Copy and zstack images" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b9e8e22c", + "metadata": {}, + "outputs": [], + "source": [ + "# image channel names and extensions\n", + "image_extensions = {\".tif\", \".tiff\"}\n", + "channel_names = [\"405\", \"488\", \"555\", \"640\", \"TRANS\"]\n", + "# make a dictionary that contains a list for each channel name, storing both filepath and filename\n", + "channel_images = {\n", + " channel_name: {\"filename\": [], \"filepath\": []} for channel_name in channel_names\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "71d893d6", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7e15866cfe4d443fab6c326a36b882f6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing patients: 0%| | 0/8 [00:00 bool:\n", - " \"\"\"Check that all nested folders within a well directory have the same names as the well directory itself.\n", - "\n", - " Args:\n", - " well_dir (pathlib.Path): Path to a single well directory.\n", - "\n", - " Returns:\n", - " bool: True if all nested folders inside this well directory have the same name as the well directory, False otherwise.\n", - " \"\"\"\n", - " # Get the name of the well directory (this will be the expected folder name)\n", - " well_name = well_dir.name\n", - "\n", - " # Get the immediate subdirectories in the well directory (e.g., Field_1, Field_2)\n", - " sub_dirs = [d for d in well_dir.iterdir() if d.is_dir()]\n", - "\n", - " if not sub_dirs:\n", - " return False # No nested folders found, treat as inconsistent\n", - "\n", - " # Check if each subdirectory contains a nested folder with the same name as the well directory\n", - " for sub in sub_dirs:\n", - " nested_folders = [d.name for d in sub.iterdir() if d.is_dir()]\n", - " if well_name not in nested_folders:\n", - " return False # Inconsistent folder structure found\n", - "\n", - " return True # All subdirectories have a nested folder with the same name as the well directory\n", - "\n", - "\n", - "def is_image_folder_empty(nested_dir: pathlib.Path) -> bool:\n", - " \"\"\"Check if a nested directory contains any images.\n", - "\n", - " Args:\n", - " nested_dir (pathlib.Path): Path to a directory nested within the well directory\n", - "\n", - " Returns:\n", - " bool: Boolean indicating whether the nested directory contains any images\n", - " \"\"\"\n", - " return not any(\n", - " image.suffix.lower() in image_extensions for image in nested_dir.rglob(\"*\")\n", - " )\n", - "\n", - "\n", - "def has_equal_images_per_channel(\n", - " nested_dir: pathlib.Path, channel_names: list[str]\n", - ") -> bool:\n", - " \"\"\"Check if all specified channels have the same number of images by looking for the channel name in the filenames.\n", - "\n", - " Args:\n", - " nested_dir (pathlib.Path): Path to a directory nested within the well directory.\n", - " channel_names (list[str]): List of strings of the channel names found in the nested directory.\n", - "\n", - " Returns:\n", - " bool: Boolean indicating whether all specified channels have the same number of images.\n", - " \"\"\"\n", - " # Initialize counts for each channel\n", - " channel_counts = {channel: 0 for channel in channel_names}\n", - "\n", - " # Count images for each channel based on the channel name in the filename\n", - " for image in nested_dir.rglob(\"*\"): # Search for all files recursively\n", - " if image.suffix.lower() in image_extensions: # Ensure it's an image file\n", - " for channel in channel_names:\n", - " if (\n", - " channel in image.name\n", - " ): # If the channel name is found in the image filename\n", - " channel_counts[channel] += 1\n", - "\n", - " # Get the unique set of image counts (if all counts are equal, there should be only one unique value)\n", - " image_counts = set(channel_counts.values())\n", - "\n", - " # If all counts are equal and non-zero, return True; otherwise, return False\n", - " return len(image_counts) == 1 and 0 not in image_counts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Run this cell through the script" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Function to process a single nested directory\n", - "\n", - "\n", - "def process_nested_dir(nested_dir, dest_well_dir, channel_names, image_extensions):\n", - " if not nested_dir.is_dir():\n", - " return f\"Skipping {nested_dir}: Not a directory\"\n", - "\n", - " if is_image_folder_empty(nested_dir):\n", - " return f\"Skipping {nested_dir}: No images found\"\n", - "\n", - " if not has_equal_images_per_channel(nested_dir, channel_names):\n", - " return f\"Skipping {nested_dir}: Unequal images per channel\"\n", - "\n", - " # Copy images to destination, skipping files with 'Tile' in their name\n", - " for image in nested_dir.rglob(\"*\"):\n", - " if image.suffix.lower() in image_extensions and \"Tile\" not in image.name:\n", - " shutil.copy2(image, dest_well_dir)\n", - "\n", - " return f\"Processed {nested_dir}\"\n", - "\n", - "\n", - "# Function to process a single well directory\n", - "def process_well_dir(well_dir, dest_dir, channel_names, image_extensions):\n", - " if not has_consistent_naming(well_dir):\n", - " return f\"Skipping {well_dir.stem}: Inconsistent nested folder names within well\"\n", - "\n", - " dest_well_dir = dest_dir / well_dir.name\n", - " dest_well_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - " nested_dirs = list(well_dir.iterdir())\n", - " for nested_dir in nested_dirs:\n", - " process_nested_dir(\n", - " nested_dir,\n", - " dest_well_dir,\n", - " channel_names,\n", - " image_extensions,\n", - " )\n", - "\n", - "\n", - "# Set channel names\n", - "channel_names = {\"405\", \"488\", \"555\", \"640\", \"TRANS\", \"Merge\"}\n", - "\n", - "# Loop through each key in the mapping to copy data from the parent to the destination\n", - "for key, paths in dir_mapping.items():\n", - " parent_dir = paths[\"parent\"]\n", - " dest_dir = paths[\"destination\"]\n", - "\n", - " print(f\"Processing {key}: {parent_dir} -> {dest_dir}\")\n", - "\n", - " # Ensure the destination directory exists\n", - " dest_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - " # Get all well-level directories\n", - " well_dirs = [d for d in parent_dir.iterdir() if d.is_dir()]\n", - "\n", - " if not well_dirs:\n", - " print(f\"Skipping {key}: No well directories found\")\n", - " continue\n", - " # Process well directories in parallel\n", - " with ProcessPoolExecutor(max_workers=multiprocessing.cpu_count() - 2) as executor:\n", - " futures = [\n", - " executor.submit(\n", - " process_well_dir, well_dir, dest_dir, channel_names, image_extensions\n", - " )\n", - " for well_dir in well_dirs\n", - " ]\n", - " for future in tqdm.tqdm(\n", - " as_completed(futures),\n", - " desc=f\"Processing {key}\",\n", - " leave=False,\n", - " total=len(well_dirs),\n", - " ):\n", - " pass\n", - "\n", - " print(f\"Completed processing {key}: {parent_dir} -> {dest_dir}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## NF0016 specific preprocessing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "parent_dir_NF0016 = pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0016_T1/raw_images\"\n", - ").resolve(strict=True)\n", - "# get all dirs in the parent dir\n", - "parent_dir_NF0016 = list(parent_dir_NF0016.glob(\"*/\"))\n", - "parent_dir_NF0016 = [x for x in parent_dir_NF0016 if x.is_dir()]\n", - "# get all child files in the parent dir\n", - "file_dir_NF0016 = []\n", - "for parent_dir in parent_dir_NF0016:\n", - " file_dir_NF0016.extend(list(parent_dir.glob(\"*\")))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# rename the files in the parent dir\n", - "for file in file_dir_NF0016:\n", - " new_file_dir = pathlib.Path(\n", - " f\"{file.parent}/{str(file.stem).replace(' (60X)', '')}.{file.suffix}\"\n", - " )\n", - " file.rename(new_file_dir)\n", - "\n", - "# rename the parent dir\n", - "for parent_dir in parent_dir_NF0016:\n", - " new_parent_dir = pathlib.Path(\n", - " f\"{parent_dir.parent}/{str(parent_dir.stem).replace(' (60X)', '')}\"\n", - " )\n", - " # rename the parent dir\n", - " os.rename(parent_dir, new_parent_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## NF0018 specific preprocessing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "parent_dir_NF0018 = pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0018_T6/raw_images\"\n", - ").resolve(strict=True)\n", - "# get all dirs in the parent dir\n", - "parent_dir_NF0018 = list(parent_dir_NF0018.glob(\"*/\"))\n", - "parent_dir_NF0018 = [x for x in parent_dir_NF0018 if x.is_dir()]\n", - "# get all child files in the parent dir\n", - "file_dir_NF0018 = []\n", - "for parent_dir in parent_dir_NF0018:\n", - " file_dir_NF0018.extend(list(parent_dir.glob(\"*\")))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# rename the files in the parent dir\n", - "for file in file_dir_NF0018:\n", - " new_file_dir = pathlib.Path(\n", - " f\"{file.parent}/{str(file.stem).replace(' (60X)', '')}{file.suffix}\"\n", - " )\n", - " file.rename(new_file_dir)\n", - "\n", - "# rename the parent dir\n", - "for parent_dir in parent_dir_NF0018:\n", - " new_parent_dir = pathlib.Path(\n", - " f\"{parent_dir.parent}/{str(parent_dir.stem).replace(' (60X)', '')}\"\n", - " )\n", - " # rename the parent dir\n", - " os.rename(parent_dir, new_parent_dir)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "gff_preprocessing_env", - "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.10.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/0.preprocessing_data/notebooks/2b.perform_file_corruption_checks.ipynb b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb similarity index 63% rename from 0.preprocessing_data/notebooks/2b.perform_file_corruption_checks.ipynb rename to 0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb index c1a5945c..fa933780 100644 --- a/0.preprocessing_data/notebooks/2b.perform_file_corruption_checks.ipynb +++ b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb @@ -16,34 +16,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pathlib\n", "import pprint\n", + "import re\n", "import sys\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import tifffile as tiff\n", - "\n", - "# Get the current working directory\n", - "cwd = pathlib.Path.cwd()\n", - "\n", - "if (cwd / \".git\").is_dir():\n", - " root_dir = cwd\n", - "else:\n", - " root_dir = None\n", - " for parent in cwd.parents:\n", - " if (parent / \".git\").is_dir():\n", - " root_dir = parent\n", - " break\n", - "sys.path.append(str(root_dir / \"utils\"))\n", "from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook\n", "\n", "root_dir, in_notebook = init_notebook()\n", + "\n", "if in_notebook:\n", " import tqdm.notebook as tqdm\n", "else:\n", @@ -128,18 +117,53 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ + "# check if bandicoot is set\n", "bandicoot_path = pathlib.Path(os.path.expanduser(\"~/mnt/bandicoot\")).resolve()\n", - "raw_image_dir, output_base_dir = avoid_path_crash_bandicoot(bandicoot_path)" + "\n", + "bandicoot = False" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Raw image dir: /home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline\n" + ] + } + ], + "source": [ + "if bandicoot:\n", + " # comment out depending on whose computer you are on\n", + " # mike's computer\n", + " bandicoot_path = pathlib.Path(\n", + " os.path.expanduser(\"~/mnt/bandicoot/NF1_organoid_data\")\n", + " ).resolve(strict=True)\n", + " output_base_dir = bandicoot_path\n", + "else:\n", + " # comment out depending on whose computer you are on\n", + " # mike's computer\n", + " raw_image_dir = pathlib.Path(\n", + " os.path.expanduser(\"~/Desktop/20TB_A/NF1_Patient_organoids\")\n", + " ).resolve(strict=True)\n", + " # Jenna's computer\n", + " # raw_image_dir_local = pathlib.Path(\"/media/18tbdrive/GFF_organoid_data/\")\n", + " output_base_dir = root_dir\n", + "print(f\"Raw image dir: {root_dir}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "# patient_ids\n", @@ -148,20 +172,37 @@ "# )\n", "# list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist()\n", "\n", - "list_of_patients = [\"NF0035_T1\"]" + "list_of_patients = [\n", + " \"NF0031_T1\",\n", + " \"NF0035_T1\",\n", + " \"NF0037_T1-Z-1\",\n", + " \"NF0037_T1-Z-0.5\",\n", + " \"NF0037_T1-Z-0.2\",\n", + " \"NF0037_T1-Z-0.1\",\n", + "]" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'NF0035_T1': {'raw_images': PosixPath('~/mnt/bandicoot/NF1_organoid_data/NF1_organoid_data/data/NF0035_T1/raw_images'),\n", - " 'zstack_output': PosixPath('~/mnt/bandicoot/NF1_organoid_data/data/NF0035_T1/zstack_images')}}\n" + "{'NF0031_T1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0031_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0031_T1/zstack_images')},\n", + " 'NF0035_T1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0035_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0035_T1/zstack_images')},\n", + " 'NF0037_T1-Z-0.1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.1/zstack_images')},\n", + " 'NF0037_T1-Z-0.2': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.2/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.2/zstack_images')},\n", + " 'NF0037_T1-Z-0.5': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.5/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.5/zstack_images')},\n", + " 'NF0037_T1-Z-1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-1/zstack_images')}}\n" ] } ], @@ -193,18 +234,32 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "67805e53d95d414098daf747a168ab2a", + "model_id": "3f485f31c585441a8a8b28af10bb7c01", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing patients: 0%| | 0/6 [00:00=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "gff_3d_utils" +version = "0.0.0" +description = "Utility package for GFF 3D organoid profiling pipeline" +requires-python = ">=3.11" +authors = [ { name = "Your Name", email = "you@example.com" } ] +license = { text = "MIT" } + +dependencies = [ + "jupyter", + "tifffile", + "jupyterlab", + "pandas", + "scipy", + "numpy", +] + +[project.optional-dependencies] +dev = [ + "pytest", + "black", + "ruff", + "pre-commit", + "ipykernel", + +] + + + +[tool.setuptools.packages.find] +where = ["."] +include = ["errors*"] + +[dependency-groups] +dev = [ + "ipykernel>=7.1.0", + "uv>=0.9.7", +] diff --git a/3a.DL_features/utils/Point-BERT b/3a.DL_features/utils/Point-BERT new file mode 160000 index 00000000..ce5a6e1f --- /dev/null +++ b/3a.DL_features/utils/Point-BERT @@ -0,0 +1 @@ +Subproject commit ce5a6e1f35a0d111de12c3a5e803d2b22aeec42f diff --git a/3a.DL_features/utils/Pointnet2_PyTorch b/3a.DL_features/utils/Pointnet2_PyTorch new file mode 160000 index 00000000..b5ceb6d9 --- /dev/null +++ b/3a.DL_features/utils/Pointnet2_PyTorch @@ -0,0 +1 @@ +Subproject commit b5ceb6d9ca0467ea34beb81023f96ee82228f626 diff --git a/environments/preprocessing_env.yml b/environments/preprocessing_env.yml index acebc78f..7647f605 100644 --- a/environments/preprocessing_env.yml +++ b/environments/preprocessing_env.yml @@ -2,16 +2,16 @@ name: gff_preprocessing_env channels: - conda-forge dependencies: - - conda-forge::python + - conda-forge::python>=3.11 - conda-forge::jupyter=1.0.0 - conda-forge::pip - conda-forge::tifffile - conda-forge::jupyterlab - - conda-forge::pandas=1.4.4 + - conda-forge::pandas - conda-forge::ipykernel - conda-forge::nb_conda_kernels - - conda-forge::scipy=1.10.0 - - conda-forge::numpy=1.22 + - conda-forge::scipy + - conda-forge::numpy - conda-forge::scikit-learn - conda-forge::seaborn - conda-forge::umap-learn @@ -20,3 +20,4 @@ dependencies: - pip: - Cytotable - coSMicQC>=0.1.2 + - -e ../utils diff --git a/pointBert_subdir/Point-BERT b/pointBert_subdir/Point-BERT new file mode 160000 index 00000000..ce5a6e1f --- /dev/null +++ b/pointBert_subdir/Point-BERT @@ -0,0 +1 @@ +Subproject commit ce5a6e1f35a0d111de12c3a5e803d2b22aeec42f diff --git a/utils/preprocessing_funcs.py b/utils/preprocessing_funcs.py new file mode 100644 index 00000000..29649bad --- /dev/null +++ b/utils/preprocessing_funcs.py @@ -0,0 +1,108 @@ +import pathlib +import re + +import numpy as np +import tifffile + + +def read_2D_image_for_zstacking( + file_path: str, +) -> np.ndarray: + """ + Description + ----------- + Reads in a 2D image from a given file path and returns it as a numpy array. + + Parameters + + ---------- + file_path : str + The path to the 2D image file. + Returns + ------- + np.ndarray + The 2D image as a numpy array. + + Raises + ------- + ValueError + If the image has more than 2 dimensions. + """ + + img = tifffile.imread(file_path) + + if len(img.shape) > 2 and img.shape[2] == 3: + # If the image has 3 channels (e.g., RGB), convert to grayscale + img = img[:, :, 0] + + return img + + +def get_well_fov_dirs(parent_dir: pathlib.Path) -> list[pathlib.Path]: + """ + Retrieve all well fov dirs in a given parent dir + + Parameters + ---------- + parent_dir : pathlib.Path + Patient parent dir + + Returns + ------- + List[pathlib.Path] + List of well fov dirs in _parent_dir + """ + well_dirs = [d for d in parent_dir.iterdir() if d.is_dir()] + + return well_dirs + + +def get_to_the_unested_dir( + nested_dir: pathlib.Path, times_nested: int +) -> pathlib.Path | None: + """ + Unest the dir given the number of time the directories are nested. + + Parameters + ---------- + nested_dir : pathlib.Path + The parent directory containing the nested dirs + times_nested : int + The number of times that a dir is nested + + Returns + ------- + pathlib.Path | None + The output file path of the least nested parent dir or None + """ + for _ in range(times_nested): + nested_dir = nested_dir.glob("*").__next__() + nested_dir = [d for d in nested_dir.parent.iterdir() if d.is_dir()] + if len(nested_dir) != 1: + return None + nested_dir = nested_dir[0] + return nested_dir + + +def check_well_dir_name_format(dir_name: str) -> bool: + """ + Check if a well directory name matches the expected format. + Accepts formats like: + - A1-1 + - A01-01 + - A1-1 (60X) + - A12-34 (any trailing parenthetical/metadata) + + Parameters + ---------- + dir_name : str + The name of the directory to check. + Returns + ------- + bool + True if the directory name matches the expected format, False otherwise. + + """ + dir_name = dir_name.strip() + pattern = re.compile(r"^[A-Z]\d{1,2}-\d{1,2}(?:\s*\(.*\))?$") + return bool(pattern.match(dir_name)) diff --git a/utils/pyproject.toml b/utils/pyproject.toml new file mode 100644 index 00000000..29d96ebc --- /dev/null +++ b/utils/pyproject.toml @@ -0,0 +1,49 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "preprocessing_module" +version = "0.0.0" +description = "Utility package for GFF 3D organoid profiling pipeline" +requires-python = ">=3.11" +authors = [ { name = "Your Name", email = "you@example.com" } ] +license = { text = "MIT" } + +dependencies = [ +] + +[project.optional-dependencies] +dev = [ + "pytest", + "black", + "ruff", + "pre-commit", + "ipykernel", + +] + +[project.scripts] +arg_parsing = "arg_parsing_utils:main" +file_checking = "file_checking:main" +file_reading = "file_reading:main" +notebook_init_utils = "notebook_init_utils:main" +segmentation_decoupling = "segmentation_decoupling:main" +exceptions = "errors.exceptions:main" +preprocessing_funcs = "preprocessing_funcs:main" + +[tool.setuptools] +py-modules = [ +"arg_parsing_utils", +"file_checking", +"file_reading", +"notebook_init_utils", +"segmentation_decoupling", +"errors.exceptions", +"preprocessing_funcs" +] + + +[tool.setuptools.packages.find] +where = ["."] +include = ["errors*"] From 667210a0c5eb4c2e843dc705df63acf09cea620f Mon Sep 17 00:00:00 2001 From: MikeLippincott <1michaell2017@gmail.com> Date: Mon, 3 Nov 2025 11:31:37 -0700 Subject: [PATCH 2/5] cleaning up --- 3a.DL_features/utils/Point-BERT | 1 - 3a.DL_features/utils/Pointnet2_PyTorch | 1 - pointBert_subdir/Point-BERT | 1 - 3 files changed, 3 deletions(-) delete mode 160000 3a.DL_features/utils/Point-BERT delete mode 160000 3a.DL_features/utils/Pointnet2_PyTorch delete mode 160000 pointBert_subdir/Point-BERT diff --git a/3a.DL_features/utils/Point-BERT b/3a.DL_features/utils/Point-BERT deleted file mode 160000 index ce5a6e1f..00000000 --- a/3a.DL_features/utils/Point-BERT +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce5a6e1f35a0d111de12c3a5e803d2b22aeec42f diff --git a/3a.DL_features/utils/Pointnet2_PyTorch b/3a.DL_features/utils/Pointnet2_PyTorch deleted file mode 160000 index b5ceb6d9..00000000 --- a/3a.DL_features/utils/Pointnet2_PyTorch +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b5ceb6d9ca0467ea34beb81023f96ee82228f626 diff --git a/pointBert_subdir/Point-BERT b/pointBert_subdir/Point-BERT deleted file mode 160000 index ce5a6e1f..00000000 --- a/pointBert_subdir/Point-BERT +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce5a6e1f35a0d111de12c3a5e803d2b22aeec42f From 659ffae5ae53769d9f0fe591924103b0cd63d038 Mon Sep 17 00:00:00 2001 From: MikeLippincott <1michaell2017@gmail.com> Date: Mon, 3 Nov 2025 11:34:22 -0700 Subject: [PATCH 3/5] add scripts --- .../1.make_zstack_and_copy_over.ipynb | 212 ++++----- .../2.perform_file_corruption_checks.ipynb | 21 +- .../scripts/1.make_zstack_and_copy_over.py | 405 ++++++++++++++++ .../scripts/1.update_file_structure.py | 434 ------------------ ...py => 2.perform_file_corruption_checks.py} | 70 ++- .../scripts/2a.make_z-stack_images.py | 172 ------- 6 files changed, 551 insertions(+), 763 deletions(-) create mode 100644 0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py delete mode 100644 0.preprocessing_data/scripts/1.update_file_structure.py rename 0.preprocessing_data/scripts/{2b.perform_file_corruption_checks.py => 2.perform_file_corruption_checks.py} (84%) delete mode 100644 0.preprocessing_data/scripts/2a.make_z-stack_images.py diff --git a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb index b3b3cd86..1f628176 100644 --- a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb +++ b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb @@ -125,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "8b44eb61", "metadata": {}, "outputs": [], @@ -144,82 +144,82 @@ "\"\"\"\n", "\n", "dir_mapping = {\n", - " # \"NF0014_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"NF0014_T2\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"NF0016_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # # \"NF0017\": {\n", - " # # \"parent\": pathlib.Path(\n", - " # # f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", - " # # ).resolve(strict=True),\n", - " # # \"destination\": pathlib.Path(\n", - " # # f\"{output_base_dir}/data/NF0017/zstack_images\"\n", - " # # ).resolve(),\n", - " # # \"times_nested\": 2,\n", - " # # \"well_position\": 0,\n", - " # # \"channel_position\": 1 # },\n", - " # \"NF0018_T6\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"NF0021_T1\": {\n", - " # \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", - " # strict=True\n", - " # ),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"NF0030_T1\": {\n", + " \"NF0014_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0014_T2\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0016_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " # \"NF0017\": {\n", " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", + " # f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", " # ).resolve(strict=True),\n", " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", + " # f\"{output_base_dir}/data/NF0017/zstack_images\"\n", " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1 # },\n", + " \"NF0018_T6\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0021_T1\": {\n", + " \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", + " strict=True\n", + " ),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0030_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", " \"NF0031_T1_part_I\": {\n", " \"parent\": pathlib.Path(\n", " f\"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2\"\n", @@ -308,39 +308,39 @@ " \"well_position\": -1,\n", " \"channel_position\": -3,\n", " },\n", - " # \"NF0040_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"SACRO219_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", - " # \"SARCO361_T1\": {\n", - " # \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", - " # strict=True\n", - " # ),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1\n", - " # },\n", + " \"NF0040_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"SACRO219_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"SARCO361_T1\": {\n", + " \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", + " strict=True\n", + " ),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", "}" ] }, diff --git a/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb index fa933780..331dfe28 100644 --- a/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb +++ b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb @@ -162,24 +162,15 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# patient_ids\n", - "# patient_id_file_path = pathlib.Path(f\"{raw_image_dir}/data/patient_IDs.txt\").resolve(\n", - "# strict=True\n", - "# )\n", - "# list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist()\n", - "\n", - "list_of_patients = [\n", - " \"NF0031_T1\",\n", - " \"NF0035_T1\",\n", - " \"NF0037_T1-Z-1\",\n", - " \"NF0037_T1-Z-0.5\",\n", - " \"NF0037_T1-Z-0.2\",\n", - " \"NF0037_T1-Z-0.1\",\n", - "]" + "patient_ids\n", + "patient_id_file_path = pathlib.Path(f\"{raw_image_dir}/data/patient_IDs.txt\").resolve(\n", + " strict=True\n", + ")\n", + "list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist()" ] }, { diff --git a/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py b/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py new file mode 100644 index 00000000..89460d79 --- /dev/null +++ b/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py @@ -0,0 +1,405 @@ +#!/usr/bin/env python +# coding: utf-8 + +# ## Imports + +# In[1]: + + +import argparse +import os +import pathlib +import sys + +import numpy as np +import tifffile +import tqdm +from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook +from preprocessing_funcs import ( + check_well_dir_name_format, + get_to_the_unested_dir, + get_well_fov_dirs, + read_2D_image_for_zstacking, +) + +root_dir, in_notebook = init_notebook() + +if in_notebook: + import tqdm.notebook as tqdm +else: + import tqdm + + +# In[2]: + + +argparse = argparse.ArgumentParser( + description="Copy files from one directory to another" +) +argparse.add_argument("--HPC", action="store_true", help="Type of compute to run on") +# Parse arguments +args = argparse.parse_args(args=sys.argv[1:] if "ipykernel" not in sys.argv[0] else []) +HPC = args.HPC + + +# In[3]: + + +# check if bandicoot is set +bandicoot_path = pathlib.Path(os.path.expanduser("~/mnt/bandicoot")).resolve() +if not HPC and bandicoot_path.exists(): + bandicoot = True +else: + bandicoot = False + +bandicoot = False + + +# In[4]: + + +if HPC: + raw_image_dir = pathlib.Path("/pl/active/koala/GFF_Data/GFF-Raw/").resolve( + strict=True + ) + output_base_dir = root_dir +elif bandicoot: + # comment out depending on whose computer you are on + # mike's computer + bandicoot_path = pathlib.Path( + os.path.expanduser("~/mnt/bandicoot/NF1_organoid_data") + ).resolve(strict=True) + raw_image_dir = pathlib.Path(f"{bandicoot_path}/Raw_patient_files").resolve( + strict=True + ) + output_base_dir = bandicoot_path +else: + # comment out depending on whose computer you are on + # mike's computer + raw_image_dir = pathlib.Path( + os.path.expanduser("~/Desktop/20TB_A/NF1_Patient_organoids") + ).resolve(strict=True) + # Jenna's computer + # raw_image_dir_local = pathlib.Path("/media/18tbdrive/GFF_organoid_data/") + output_base_dir = root_dir +print(f"Raw image dir: {raw_image_dir}") + + +# ## Define paths + +# In[ ]: + + +# Define parent and destination directories in a single dictionary +""" +This dictionary maps patient IDs to their corresponding parent directories, +destination directories, and metadata for processing. +Nested dictionary name: patientID_tumorID +Keys: +- parent: Path to the parent directory containing raw images. +- destination: Path to the output directory for processed images. +- times_nested: Number of nested timepoint directories. +- well_position: Index of the well position in the filename when split by underscores. +- channel_position: Index of the channel position in the filename when split by underscores. +""" + +dir_mapping = { + "NF0014_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0014_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0014_T2": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0014_T2/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0016_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0016_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + # "NF0017": { + # "parent": pathlib.Path( + # f"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025" + # ).resolve(strict=True), + # "destination": pathlib.Path( + # f"{output_base_dir}/data/NF0017/zstack_images" + # ).resolve(), + # "times_nested": 2, + # "well_position": 0, + # "channel_position": 1 # }, + "NF0018_T6": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0018_T6/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0021_T1": { + "parent": pathlib.Path(f"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined").resolve( + strict=True + ), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0021_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0030_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0030_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0031_T1_part_I": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0031_T1/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0031_T1_part_II": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0031-T1 Combined 2_2/NF0031-T1 Combined 2:2" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0031_T1/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0035_T1_part_I": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0035-T1-Part-1/NF0035-T1-Combined Part-1" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0035_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0035_T1_part_II": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0035-T1-Part-2/NF0035-T1-Combined Part-2" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0035_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0037-T1-Z-1": { + "parent": pathlib.Path(f"{raw_image_dir}/NF0037-T1-Z-1/NF0037-T1-Z-1").resolve( + strict=True + ), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0037_T1-Z-1/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0037-T1-Z-0.5": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0037-T1-Z-0.5/NF0037-T1-ZTEST2-0.5" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0037_T1-Z-0.5/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0037-T1-Z-0.2": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0037-T1-Z-0.2/NF0037-T1-Z-0.2/NF0037-T1-ZTEST2-0.2" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0037_T1-Z-0.2/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0037-T1-Z-0.1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0037-T1-Z-0.1/NF0037-T1-Z-0.1/NF0037-T1-ZTEST2" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0037_T1-Z-0.1/zstack_images" + ).resolve(), + "times_nested": 0, + "well_position": -1, + "channel_position": -3, + }, + "NF0040_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0040_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "SACRO219_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/SARCO219_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "SARCO361_T1": { + "parent": pathlib.Path(f"{raw_image_dir}/SARC0361/SARC0361 Combined/").resolve( + strict=True + ), + "destination": pathlib.Path( + f"{output_base_dir}/data/SARCO361_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, +} + + +# ## Copy and zstack images + +# In[6]: + + +# image channel names and extensions +image_extensions = {".tif", ".tiff"} +channel_names = ["405", "488", "555", "640", "TRANS"] +# make a dictionary that contains a list for each channel name, storing both filepath and filename +channel_images = { + channel_name: {"filename": [], "filepath": []} for channel_name in channel_names +} + + +# In[7]: + + +# loop through each patient +for patient in tqdm.tqdm(dir_mapping.keys(), desc="Processing patients", leave=True): + # get a list of all well directories and loop through them + all_well_dirs = get_well_fov_dirs(parent_dir=dir_mapping[patient]["parent"]) + + for well_dir in tqdm.tqdm( + all_well_dirs, desc=f"Processing wells for patient {patient}", leave=False + ): + # ensure that the dir follows the alpha numeric - numeric format + well_dir_name = well_dir.name + if not check_well_dir_name_format(well_dir_name): + print(f"Skipping directory with unexpected name format: {well_dir_name}") + continue + # step through the nested directories to get to the most branched child directory + most_branched_child_dir = get_to_the_unested_dir( + nested_dir=pathlib.Path(well_dir), + times_nested=dir_mapping[patient]["times_nested"], + ) + if most_branched_child_dir is None: + print(f"Could not un-nest directory: {well_dir}") + continue + + # get a list of files, sort thenm, and loop through them to categorize by channel + files = [f for f in most_branched_child_dir.glob("*") if f.is_file()] + files.sort() + channel_images = { + channel_name: {"filename": [], "filepath": []} + for channel_name in channel_names + } + for file in files: + if file.suffix in image_extensions: + if "tile" in file.stem.lower(): + channel = file.stem.split("_")[ + dir_mapping[patient]["channel_position"] - 1 + ] + else: + channel = file.stem.split("_")[ + dir_mapping[patient]["channel_position"] + ] + if channel in channel_images: + channel_images[channel]["filename"].append(file.name) + channel_images[channel]["filepath"].append(str(file)) + + # loop through each channel and create z-stack tiffs + for channel_name in tqdm.tqdm( + channel_names, + desc=f"Processing channels for well {well_dir_name} of patient {patient}", + leave=False, + ): + channel_images[channel_name]["filename"] = sorted( + channel_images[channel_name]["filename"] + ) + if not channel_images[channel_name]["filename"]: + print(f"No images found for channel {channel_name}") + continue + + # generate filename below + filepath = channel_images[channel_name]["filepath"][0] + well = pathlib.Path(filepath).stem.split("_")[ + dir_mapping[patient]["well_position"] + ] + + output_path = ( + dir_mapping[patient]["destination"] + / f"{well}" + / f"{well}_{channel_name}.tif" + ) + # generate output directory if it doesn't exist + # and check if output file already exists + output_path.parent.mkdir(exist_ok=True, parents=True) + if output_path.exists(): + continue + + # create z-stack tiff by reading in each 2D image and stacking them + images_to_stack = np.array( + [ + read_2D_image_for_zstacking(file) + for file in channel_images[channel_name]["filepath"] + ] + ) + # write the stacked images to a tiff file + tifffile.imwrite(output_path, images_to_stack) diff --git a/0.preprocessing_data/scripts/1.update_file_structure.py b/0.preprocessing_data/scripts/1.update_file_structure.py deleted file mode 100644 index 24666ed3..00000000 --- a/0.preprocessing_data/scripts/1.update_file_structure.py +++ /dev/null @@ -1,434 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# # Copy raw images into one folder to use for CellProfiler processing -# -# Currently, the images are located nest deep within multiple folders. -# For best practices, we will copy the images (preserving metadata) to one folder that can be used for CellProfiler processing. -# This file is modified from its original version: https://github.com/WayScience/GFF_2D_organoid_prototyping . - -# ## Import libraries - -# In[ ]: - - -import argparse -import multiprocessing -import os -import pathlib -import shutil -import sys -from concurrent.futures import ProcessPoolExecutor, as_completed - -import tqdm - -# Get the current working directory -cwd = pathlib.Path.cwd() - -if (cwd / ".git").is_dir(): - root_dir = cwd -else: - root_dir = None - for parent in cwd.parents: - if (parent / ".git").is_dir(): - root_dir = parent - break - -sys.path.append(str(root_dir / "utils")) -from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook - -root_dir, in_notebook = init_notebook() - -if in_notebook: - import tqdm.notebook as tqdm -else: - import tqdm - - -# ## Set paths and variables - -# In[ ]: - - -argparse = argparse.ArgumentParser( - description="Copy files from one directory to another" -) -argparse.add_argument("--HPC", action="store_true", help="Type of compute to run on") -# Parse arguments -args = argparse.parse_args(args=sys.argv[1:] if "ipykernel" not in sys.argv[0] else []) -HPC = args.HPC - -print(f"HPC: {HPC}") - - -# In[ ]: - - -# check if bandicoot is set -# check if bandicoot is set -bandicoot_path = pathlib.Path(os.path.expanduser("~/mnt/bandicoot")).resolve() -if not HPC and bandicoot_path.exists(): - bandicoot = True -else: - bandicoot = False - - -# In[ ]: - - -if HPC: - raw_image_dir = pathlib.Path("/pl/active/koala/GFF_Data/GFF-Raw/").resolve( - strict=True - ) - output_base_dir = root_dir -elif bandicoot: - # comment out depending on whose computer you are on - # mike's computer - bandicoot_path = pathlib.Path( - os.path.expanduser("~/mnt/bandicoot/NF1_organoid_data") - ).resolve(strict=True) - # Jenna's computer - # bandicoot_path = pathlib.Path("/media/18tbdrive/GFF_organoid_data/") - raw_image_dir = pathlib.Path(f"{bandicoot_path}/Raw_patient_files").resolve( - strict=True - ) - output_base_dir = bandicoot_path -else: - # comment out depending on whose computer you are on - # mike's computer - raw_image_dir = pathlib.Path("~/Desktop/20TB_A/NF1_Patient_organoids").resolve( - strict=True - ) - # Jenna's computer - # raw_image_dir_local = pathlib.Path("/media/18tbdrive/GFF_organoid_data/") - output_base_dir = root_dir - - -# In[ ]: - - -output_base_dir = root_dir - - -# In[ ]: - - -# Define parent and destination directories in a single dictionary -dir_mapping = { - "NF0014_T1": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0014_T1/raw_images" - ).resolve(), - }, - "NF0014_T2": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0014_T2/raw_images" - ).resolve(), - }, - "NF0016_T1": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0016_T1/raw_images" - ).resolve(), - }, - "NF0017": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0017/raw_images" - ).resolve(), - }, - "NF0018_T6": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0018_T6/raw_images" - ).resolve(), - }, - "NF0021_T1": { - "parent": pathlib.Path(f"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined").resolve( - strict=True - ), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0021_T1/raw_images" - ).resolve(), - }, - "NF0030_T1": { - "parent": pathlib.Path( - f"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0030_T1/raw_images" - ).resolve(), - }, - "NF0040_T1": { - "parent": pathlib.Path( - f"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/NF0040_T1/raw_images" - ).resolve(), - }, - "SACRO219_T1": { - "parent": pathlib.Path( - f"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/" - ).resolve(strict=True), - "destination": pathlib.Path( - f"{output_base_dir}/data/SARCO219_T1/raw_images" - ).resolve(), - }, - "SARCO361_T1": { - "parent": pathlib.Path(f"{raw_image_dir}/SARC0361/SARC0361 Combined/").resolve( - strict=True - ), - "destination": pathlib.Path( - f"{output_base_dir}/data/SARCO361_T1/raw_images" - ).resolve(), - }, -} - -# Image extensions that we are looking to copy -image_extensions = {".tif", ".tiff"} - - -# ## Reach the nested images and copy to one folder - -# ### Set QC functions that determine if a well/site is of good quality to process based on file structure - -# In[ ]: - - -def has_consistent_naming(well_dir: pathlib.Path) -> bool: - """Check that all nested folders within a well directory have the same names as the well directory itself. - - Args: - well_dir (pathlib.Path): Path to a single well directory. - - Returns: - bool: True if all nested folders inside this well directory have the same name as the well directory, False otherwise. - """ - # Get the name of the well directory (this will be the expected folder name) - well_name = well_dir.name - - # Get the immediate subdirectories in the well directory (e.g., Field_1, Field_2) - sub_dirs = [d for d in well_dir.iterdir() if d.is_dir()] - - if not sub_dirs: - return False # No nested folders found, treat as inconsistent - - # Check if each subdirectory contains a nested folder with the same name as the well directory - for sub in sub_dirs: - nested_folders = [d.name for d in sub.iterdir() if d.is_dir()] - if well_name not in nested_folders: - return False # Inconsistent folder structure found - - return True # All subdirectories have a nested folder with the same name as the well directory - - -def is_image_folder_empty(nested_dir: pathlib.Path) -> bool: - """Check if a nested directory contains any images. - - Args: - nested_dir (pathlib.Path): Path to a directory nested within the well directory - - Returns: - bool: Boolean indicating whether the nested directory contains any images - """ - return not any( - image.suffix.lower() in image_extensions for image in nested_dir.rglob("*") - ) - - -def has_equal_images_per_channel( - nested_dir: pathlib.Path, channel_names: list[str] -) -> bool: - """Check if all specified channels have the same number of images by looking for the channel name in the filenames. - - Args: - nested_dir (pathlib.Path): Path to a directory nested within the well directory. - channel_names (list[str]): List of strings of the channel names found in the nested directory. - - Returns: - bool: Boolean indicating whether all specified channels have the same number of images. - """ - # Initialize counts for each channel - channel_counts = {channel: 0 for channel in channel_names} - - # Count images for each channel based on the channel name in the filename - for image in nested_dir.rglob("*"): # Search for all files recursively - if image.suffix.lower() in image_extensions: # Ensure it's an image file - for channel in channel_names: - if ( - channel in image.name - ): # If the channel name is found in the image filename - channel_counts[channel] += 1 - - # Get the unique set of image counts (if all counts are equal, there should be only one unique value) - image_counts = set(channel_counts.values()) - - # If all counts are equal and non-zero, return True; otherwise, return False - return len(image_counts) == 1 and 0 not in image_counts - - -# Run this cell through the script - -# In[ ]: - - -# Function to process a single nested directory - - -def process_nested_dir(nested_dir, dest_well_dir, channel_names, image_extensions): - if not nested_dir.is_dir(): - return f"Skipping {nested_dir}: Not a directory" - - if is_image_folder_empty(nested_dir): - return f"Skipping {nested_dir}: No images found" - - if not has_equal_images_per_channel(nested_dir, channel_names): - return f"Skipping {nested_dir}: Unequal images per channel" - - # Copy images to destination, skipping files with 'Tile' in their name - for image in nested_dir.rglob("*"): - if image.suffix.lower() in image_extensions and "Tile" not in image.name: - shutil.copy2(image, dest_well_dir) - - return f"Processed {nested_dir}" - - -# Function to process a single well directory -def process_well_dir(well_dir, dest_dir, channel_names, image_extensions): - if not has_consistent_naming(well_dir): - return f"Skipping {well_dir.stem}: Inconsistent nested folder names within well" - - dest_well_dir = dest_dir / well_dir.name - dest_well_dir.mkdir(parents=True, exist_ok=True) - - nested_dirs = list(well_dir.iterdir()) - for nested_dir in nested_dirs: - process_nested_dir( - nested_dir, - dest_well_dir, - channel_names, - image_extensions, - ) - - -# Set channel names -channel_names = {"405", "488", "555", "640", "TRANS", "Merge"} - -# Loop through each key in the mapping to copy data from the parent to the destination -for key, paths in dir_mapping.items(): - parent_dir = paths["parent"] - dest_dir = paths["destination"] - - print(f"Processing {key}: {parent_dir} -> {dest_dir}") - - # Ensure the destination directory exists - dest_dir.mkdir(parents=True, exist_ok=True) - - # Get all well-level directories - well_dirs = [d for d in parent_dir.iterdir() if d.is_dir()] - - if not well_dirs: - print(f"Skipping {key}: No well directories found") - continue - # Process well directories in parallel - with ProcessPoolExecutor(max_workers=multiprocessing.cpu_count() - 2) as executor: - futures = [ - executor.submit( - process_well_dir, well_dir, dest_dir, channel_names, image_extensions - ) - for well_dir in well_dirs - ] - for future in tqdm.tqdm( - as_completed(futures), - desc=f"Processing {key}", - leave=False, - total=len(well_dirs), - ): - pass - - print(f"Completed processing {key}: {parent_dir} -> {dest_dir}") - - -# ## NF0016 specific preprocessing - -# In[ ]: - - -parent_dir_NF0016 = pathlib.Path( - f"{output_base_dir}/data/NF0016_T1/raw_images" -).resolve(strict=True) -# get all dirs in the parent dir -parent_dir_NF0016 = list(parent_dir_NF0016.glob("*/")) -parent_dir_NF0016 = [x for x in parent_dir_NF0016 if x.is_dir()] -# get all child files in the parent dir -file_dir_NF0016 = [] -for parent_dir in parent_dir_NF0016: - file_dir_NF0016.extend(list(parent_dir.glob("*"))) - - -# In[ ]: - - -# rename the files in the parent dir -for file in file_dir_NF0016: - new_file_dir = pathlib.Path( - f"{file.parent}/{str(file.stem).replace(' (60X)', '')}.{file.suffix}" - ) - file.rename(new_file_dir) - -# rename the parent dir -for parent_dir in parent_dir_NF0016: - new_parent_dir = pathlib.Path( - f"{parent_dir.parent}/{str(parent_dir.stem).replace(' (60X)', '')}" - ) - # rename the parent dir - os.rename(parent_dir, new_parent_dir) - - -# ## NF0018 specific preprocessing - -# In[ ]: - - -parent_dir_NF0018 = pathlib.Path( - f"{output_base_dir}/data/NF0018_T6/raw_images" -).resolve(strict=True) -# get all dirs in the parent dir -parent_dir_NF0018 = list(parent_dir_NF0018.glob("*/")) -parent_dir_NF0018 = [x for x in parent_dir_NF0018 if x.is_dir()] -# get all child files in the parent dir -file_dir_NF0018 = [] -for parent_dir in parent_dir_NF0018: - file_dir_NF0018.extend(list(parent_dir.glob("*"))) - - -# In[ ]: - - -# rename the files in the parent dir -for file in file_dir_NF0018: - new_file_dir = pathlib.Path( - f"{file.parent}/{str(file.stem).replace(' (60X)', '')}{file.suffix}" - ) - file.rename(new_file_dir) - -# rename the parent dir -for parent_dir in parent_dir_NF0018: - new_parent_dir = pathlib.Path( - f"{parent_dir.parent}/{str(parent_dir.stem).replace(' (60X)', '')}" - ) - # rename the parent dir - os.rename(parent_dir, new_parent_dir) diff --git a/0.preprocessing_data/scripts/2b.perform_file_corruption_checks.py b/0.preprocessing_data/scripts/2.perform_file_corruption_checks.py similarity index 84% rename from 0.preprocessing_data/scripts/2b.perform_file_corruption_checks.py rename to 0.preprocessing_data/scripts/2.perform_file_corruption_checks.py index e9509865..105bb111 100644 --- a/0.preprocessing_data/scripts/2b.perform_file_corruption_checks.py +++ b/0.preprocessing_data/scripts/2.perform_file_corruption_checks.py @@ -5,33 +5,20 @@ # ## Import libraries -# In[ ]: +# In[1]: import os import pathlib import pprint -import sys import numpy as np import pandas as pd import tifffile as tiff - -# Get the current working directory -cwd = pathlib.Path.cwd() - -if (cwd / ".git").is_dir(): - root_dir = cwd -else: - root_dir = None - for parent in cwd.parents: - if (parent / ".git").is_dir(): - root_dir = parent - break -sys.path.append(str(root_dir / "utils")) from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook root_dir, in_notebook = init_notebook() + if in_notebook: import tqdm.notebook as tqdm else: @@ -106,26 +93,48 @@ def max_z_projection(patient: str, well_fov: str) -> None: # ## Set input and output directories -# In[ ]: +# In[3]: +# check if bandicoot is set bandicoot_path = pathlib.Path(os.path.expanduser("~/mnt/bandicoot")).resolve() -raw_image_dir, output_base_dir = avoid_path_crash_bandicoot(bandicoot_path) + +bandicoot = False # In[4]: -# patient_ids -# patient_id_file_path = pathlib.Path(f"{raw_image_dir}/data/patient_IDs.txt").resolve( -# strict=True -# ) -# list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist() +if bandicoot: + # comment out depending on whose computer you are on + # mike's computer + bandicoot_path = pathlib.Path( + os.path.expanduser("~/mnt/bandicoot/NF1_organoid_data") + ).resolve(strict=True) + output_base_dir = bandicoot_path +else: + # comment out depending on whose computer you are on + # mike's computer + raw_image_dir = pathlib.Path( + os.path.expanduser("~/Desktop/20TB_A/NF1_Patient_organoids") + ).resolve(strict=True) + # Jenna's computer + # raw_image_dir_local = pathlib.Path("/media/18tbdrive/GFF_organoid_data/") + output_base_dir = root_dir +print(f"Raw image dir: {root_dir}") + + +# In[ ]: + -list_of_patients = ["NF0035_T1"] +patient_ids +patient_id_file_path = pathlib.Path(f"{raw_image_dir}/data/patient_IDs.txt").resolve( + strict=True +) +list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist() -# In[5]: +# In[6]: patient_input_dict = {} @@ -148,7 +157,7 @@ def max_z_projection(patient: str, well_fov: str) -> None: # This is done by checking if the size of the channel images for a given well-fov is the same as the size of the channel images for the other well-fovs. # If the size is different, then the file is corrupted. -# In[6]: +# In[7]: patient_well_fovs_to_fix = [] @@ -179,14 +188,3 @@ def max_z_projection(patient: str, well_fov: str) -> None: f"""Need to check and fix a total of {len(patient_well_fovs_to_fix)} patient well_fovs:""" ) pprint.pprint(patient_well_fovs_to_fix) - - -# ## With the list of corrupted files, recreate the z-stack images -# This is the point where the z-stack images are created from the individual z-slice images for each FOV per well. - -# In[7]: - - -for patient_well_fov in patient_well_fovs_to_fix: - patient, well_fov = patient_well_fov.split() - max_z_projection(patient, well_fov) diff --git a/0.preprocessing_data/scripts/2a.make_z-stack_images.py b/0.preprocessing_data/scripts/2a.make_z-stack_images.py deleted file mode 100644 index 47c317ba..00000000 --- a/0.preprocessing_data/scripts/2a.make_z-stack_images.py +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# # Create z-stack images from the individual z-slice images for each FOV per well - -# ## Import libraries - -# In[ ]: - - -import os -import pathlib -import pprint -import sys - -import numpy as np -import pandas as pd -import tifffile as tiff - -# Get the current working directory -cwd = pathlib.Path.cwd() - -if (cwd / ".git").is_dir(): - root_dir = cwd -else: - root_dir = None - for parent in cwd.parents: - if (parent / ".git").is_dir(): - root_dir = parent - break -sys.path.append(str(root_dir / "utils")) -from notebook_init_utils import avoid_path_crash_bandicoot, init_notebook - -root_dir, in_notebook = init_notebook() - -if in_notebook: - import tqdm.notebook as tqdm -else: - import tqdm - - -# ## Set input and output directories - -# In[ ]: - - -bandicoot_path = pathlib.Path(os.path.expanduser("~/mnt/bandicoot")).resolve() -if bandicoot_path.exists(): - bandicoot = True -else: - bandicoot = False - - -# In[ ]: - - -raw_image_dir, output_base_dir = avoid_path_crash_bandicoot(bandicoot_path) - - -# In[ ]: - - -# # patient_ids -# patient_id_file_path = pathlib.Path(f"{root_dir}/data/patient_IDs.txt").resolve( -# strict=True -# ) -# list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist() - -list_of_patients = ["NF0035_T1"] - - -# In[ ]: - - -patient_input_dict = {} -for patient in list_of_patients: - patient_input_dict[patient] = { - "raw_images": pathlib.Path( - f"{raw_image_dir}/data/{patient}/raw_images" - ).resolve(), - "zstack_output": pathlib.Path( - f"{raw_image_dir}/data/{patient}/zstack_images" - ).resolve(), - } -pprint.pprint(patient_input_dict) - - -# In[ ]: - - -# Image extensions that we are looking to copy -image_extensions = {".tif", ".tiff"} - - -# In[ ]: - - -unlisted_images = {"patient": ["NF0014_T1"], "image_set": ["F11-3"]} - - -# In[ ]: - - -image_extensions = {".tif", ".tiff"} -channel_names = ["405", "488", "555", "640", "TRANS"] -# make a dictionary that contains a list for each channel name, storing both filepath and filename -channel_images = { - channel_name: {"filename": [], "filepath": []} for channel_name in channel_names -} -channel_images - - -# ## Create list of the well-site folders - -# In[ ]: - - -# loop through patients, well_fovs, and each channel -# outer loop through patients -for patient in tqdm.tqdm(patient_input_dict.keys(), desc="Processing patients"): - input_dirs = [ - x for x in patient_input_dict[patient]["raw_images"].iterdir() if x.is_dir() - ] - input_dirs.sort() - - for well_dir in tqdm.tqdm( - input_dirs, desc=f"Processing wells for patient {patient}", leave=False - ): - channel_images = { - channel_name: {"filename": [], "filepath": []} - for channel_name in channel_names - } - if ( - patient in unlisted_images["patient"] - and well_dir.name in unlisted_images["image_set"] - ): - print(f"Skipping {well_dir.name} because it is not listed.") - continue - - for filename in well_dir.glob("*"): - if filename.suffix in image_extensions: - for channel_name in channel_names: - if channel_name in filename.name: - channel_images[channel_name]["filepath"].append(filename) - - for channel_name in tqdm.tqdm( - channel_names, desc=f"Processing channels in {well_dir.name}", leave=False - ): - channel_images[channel_name]["filepath"] = sorted( - channel_images[channel_name]["filepath"] - ) - if not channel_images[channel_name]["filepath"]: - print( - f"No files found for channel {channel_name} in {well_dir}. Skipping..." - ) - continue - - images_to_stack = np.array( - [ - tiff.imread(filepath) - for filepath in channel_images[channel_name]["filepath"] - ] - ) - filepath = channel_images[channel_name]["filepath"][0] - well = str(filepath.parent).split("/")[-1] - output_path = ( - patient_input_dict[patient]["zstack_output"] - / f"{well}" - / f"{well}_{channel_name}.tif" - ) - output_path.parent.mkdir(exist_ok=True, parents=True) - tiff.imwrite(output_path, images_to_stack) From 73db42014ede79f6914c5fe2869c4979434650b6 Mon Sep 17 00:00:00 2001 From: MikeLippincott <1michaell2017@gmail.com> Date: Mon, 3 Nov 2025 11:39:26 -0700 Subject: [PATCH 4/5] add scripts --- .../1.make_zstack_and_copy_over.ipynb | 1782 ++++++++--------- .../2.perform_file_corruption_checks.ipynb | 247 ++- .../scripts/1.make_zstack_and_copy_over.py | 200 +- .../2.perform_file_corruption_checks.py | 12 +- 4 files changed, 1204 insertions(+), 1037 deletions(-) diff --git a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb index 1f628176..b9cd8ba2 100644 --- a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb +++ b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb @@ -125,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "8b44eb61", "metadata": {}, "outputs": [], @@ -144,39 +144,39 @@ "\"\"\"\n", "\n", "dir_mapping = {\n", - " \"NF0014_T1\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"NF0014_T2\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"NF0016_T1\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", + " # \"NF0014_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"NF0014_T2\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"NF0016_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", " # \"NF0017\": {\n", " # \"parent\": pathlib.Path(\n", " # f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", @@ -187,39 +187,39 @@ " # \"times_nested\": 2,\n", " # \"well_position\": 0,\n", " # \"channel_position\": 1 # },\n", - " \"NF0018_T6\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"NF0021_T1\": {\n", - " \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", - " strict=True\n", - " ),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"NF0030_T1\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", + " # \"NF0018_T6\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"NF0021_T1\": {\n", + " # \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", + " # strict=True\n", + " # ),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"NF0030_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", " \"NF0031_T1_part_I\": {\n", " \"parent\": pathlib.Path(\n", " f\"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2\"\n", @@ -308,39 +308,39 @@ " \"well_position\": -1,\n", " \"channel_position\": -3,\n", " },\n", - " \"NF0040_T1\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"SACRO219_T1\": {\n", - " \"parent\": pathlib.Path(\n", - " f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", - " ).resolve(strict=True),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", - " \"SARCO361_T1\": {\n", - " \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", - " strict=True\n", - " ),\n", - " \"destination\": pathlib.Path(\n", - " f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", - " ).resolve(),\n", - " \"times_nested\": 2,\n", - " \"well_position\": 0,\n", - " \"channel_position\": 1,\n", - " },\n", + " # \"NF0040_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"SACRO219_T1\": {\n", + " # \"parent\": pathlib.Path(\n", + " # f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", + " # ).resolve(strict=True),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", + " # \"SARCO361_T1\": {\n", + " # \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", + " # strict=True\n", + " # ),\n", + " # \"destination\": pathlib.Path(\n", + " # f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", + " # ).resolve(),\n", + " # \"times_nested\": 2,\n", + " # \"well_position\": 0,\n", + " # \"channel_position\": 1,\n", + " # },\n", "}" ] }, @@ -377,7 +377,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7e15866cfe4d443fab6c326a36b882f6", + "model_id": "09b775bd5e68443cb3763697218cf591", "version_major": 2, "version_minor": 0 }, @@ -391,7 +391,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f784b5a0c5e4e8897873d0ed705e399", + "model_id": "369af9b0270d497bb64856ac98d0560a", "version_major": 2, "version_minor": 0 }, @@ -405,7 +405,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d49c5eecbeaa4db4b664b5a39e1c4c44", + "model_id": "5d0ffffd6cd04c76a398c7a4b2e96a11", "version_major": 2, "version_minor": 0 }, @@ -419,7 +419,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "211bb571ba6c4df895ec8770aed3a4e0", + "model_id": "149509e2dcbb4ba0aa7f6ed666ddc03d", "version_major": 2, "version_minor": 0 }, @@ -433,7 +433,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ebb2b8f679474d52a11b0375a66e9d34", + "model_id": "d946600617d0416d883ea41fb7e1d5e8", "version_major": 2, "version_minor": 0 }, @@ -447,7 +447,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e51bcef730c44569af325a6855335997", + "model_id": "3949ee9e4e8c41c29335b1ec569c6eb5", "version_major": 2, "version_minor": 0 }, @@ -461,7 +461,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b0c40040abcd4197809a16d2b5c6b81e", + "model_id": "6718510a49bd417b83156f13ec98133a", "version_major": 2, "version_minor": 0 }, @@ -475,7 +475,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bc328ad2e8fc44abba549be6e499dd12", + "model_id": "f9c5d392911a4f89889b4a12db4a4be7", "version_major": 2, "version_minor": 0 }, @@ -489,7 +489,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1ba12dcc8bbc4e59b13e77e21e21c9ac", + "model_id": "dafb34a4d6f840feb87f0dc0debe0e50", "version_major": 2, "version_minor": 0 }, @@ -503,7 +503,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "59fa96e314ce4dd1b9f7b94873edbd0e", + "model_id": "4ab17db3c4e3495bb010f28e436a60a8", "version_major": 2, "version_minor": 0 }, @@ -517,7 +517,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5e82b4f03d494ef084639ef2d368d4f5", + "model_id": "28970e26731b40b1a26ef0438bd66564", "version_major": 2, "version_minor": 0 }, @@ -531,7 +531,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5f936018ec7b4fa6ad4e0409cd3a7ae0", + "model_id": "4a39e44bfd7545d2b3d9852f9aaf97b2", "version_major": 2, "version_minor": 0 }, @@ -545,7 +545,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8aa86682ddf24f529f48b592fd68c581", + "model_id": "eb6754274a72429ea0158b7375fde128", "version_major": 2, "version_minor": 0 }, @@ -559,7 +559,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8f697d40af049e0be987abb6eec2b54", + "model_id": "a656c6f764764ed29898dd605864347a", "version_major": 2, "version_minor": 0 }, @@ -573,7 +573,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f41c2aa81ae84c7699d1b4aa319be0b7", + "model_id": "98030280c6a842faa78900dcf1eaf7c6", "version_major": 2, "version_minor": 0 }, @@ -587,7 +587,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5c3ddb4182df43cdab53bb2e90128813", + "model_id": "e441b4ff0e7942e784c540a6cb292176", "version_major": 2, "version_minor": 0 }, @@ -601,7 +601,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "52f7c74f10f54ab0a860d197f7c92328", + "model_id": "b882d497f6b4457181fcef404f05ef8f", "version_major": 2, "version_minor": 0 }, @@ -615,7 +615,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f9080ae1cb774b6b8ed9a2399b3177ba", + "model_id": "7799e1f9c25241748babaf6786570ae3", "version_major": 2, "version_minor": 0 }, @@ -629,7 +629,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c0b36e844a654e3681ff67141cbd8da1", + "model_id": "212cb6dfc3c64e86bfe296b7a92ad3ed", "version_major": 2, "version_minor": 0 }, @@ -643,7 +643,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f4b27ccdd5c445be82b90f4ca293b365", + "model_id": "15c579aa874541f9a9643281a8d85514", "version_major": 2, "version_minor": 0 }, @@ -657,7 +657,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b38396a2132c4220a7cdb73f636f803d", + "model_id": "a4e825b6c260475ab8809ab16d264ccb", "version_major": 2, "version_minor": 0 }, @@ -671,7 +671,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c7cb2f21852f493f96a75d22dd2eaea7", + "model_id": "fdba037f4b424716af74ebe315461be7", "version_major": 2, "version_minor": 0 }, @@ -685,7 +685,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8da3962bfdcd40e7aed9da2d1f02caae", + "model_id": "5f286ce8d8674f0da8d6db62d5174d49", "version_major": 2, "version_minor": 0 }, @@ -699,7 +699,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "75c2717a240b41909f058871ea6339a0", + "model_id": "b6510335b3f54544b7d44b1f87f21a02", "version_major": 2, "version_minor": 0 }, @@ -713,7 +713,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bb433fcaf8144ad8aac54c8372452d29", + "model_id": "103c18d8d5b7470bbdd6f423a84b3cca", "version_major": 2, "version_minor": 0 }, @@ -727,7 +727,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "638e6e00a18a4ab5a62de35653a7f22a", + "model_id": "bc1b6756221c4029a0f052c1d19de5c8", "version_major": 2, "version_minor": 0 }, @@ -741,7 +741,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "acbe15bb09f4412ea91e4161dd9463a7", + "model_id": "a2bc0a720b364eb7af28082ec72d214b", "version_major": 2, "version_minor": 0 }, @@ -755,7 +755,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "41b6460963904b18a6be68fdb18684a8", + "model_id": "7a56cbe18a6b4cdf9e2993d1774e27da", "version_major": 2, "version_minor": 0 }, @@ -769,7 +769,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3c31b397c2b04bf5abc8078d48c844fd", + "model_id": "0e9daca80a6047ee8a9da2b91615ab52", "version_major": 2, "version_minor": 0 }, @@ -783,7 +783,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e640b377cc847e0b18d945d1c5aefc5", + "model_id": "70203a5dbb254631990c4f9120dc9d4e", "version_major": 2, "version_minor": 0 }, @@ -797,7 +797,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "12ed1e4665ac410e91759dadc52be221", + "model_id": "2e84864a190148ef87aa6a35d8c8f3ba", "version_major": 2, "version_minor": 0 }, @@ -811,7 +811,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "faa0191b03414c1295e04fec699afc0d", + "model_id": "22453be106c1413ea5e3b62e1c09a867", "version_major": 2, "version_minor": 0 }, @@ -825,7 +825,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cf29fdb2f276413091d7fbf9d8469e2f", + "model_id": "9eb0bbc4ad55453f96a1dbe0d35ff1ad", "version_major": 2, "version_minor": 0 }, @@ -839,7 +839,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d22ee38f2cbe4e9389784a5f77d88ec9", + "model_id": "c162508f926843e8915e61d0611ed5ad", "version_major": 2, "version_minor": 0 }, @@ -853,7 +853,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e15e2fb621114b91be6ea1eafd3306e8", + "model_id": "49ecdd56f974470f973fe85a34778aec", "version_major": 2, "version_minor": 0 }, @@ -867,7 +867,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a65151e326874e0382f7d29459ea4731", + "model_id": "11efec57d70d44099f66d5ba070d5f96", "version_major": 2, "version_minor": 0 }, @@ -881,7 +881,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "324c63a6b25245f58c57968d05d53504", + "model_id": "2bbbd9a2ea084aba9f9337930f0f9594", "version_major": 2, "version_minor": 0 }, @@ -895,7 +895,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac83de8f1dd349b1a0a0d3d45b125e98", + "model_id": "4364800ac79941a49e9c9778908d5bd4", "version_major": 2, "version_minor": 0 }, @@ -909,7 +909,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "63d4be98905f462eaf4ec8e2eeb2bb74", + "model_id": "452cdbdfc950472694fbebaf2cd6c13c", "version_major": 2, "version_minor": 0 }, @@ -923,7 +923,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5cf56a19660842bcbcfbde07781074ac", + "model_id": "4341b6b0aa1b459288eadf6b92ef2865", "version_major": 2, "version_minor": 0 }, @@ -937,7 +937,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e5b142aca73740e2b349ba214a703f04", + "model_id": "191efa126604494faa70d3836e7440ea", "version_major": 2, "version_minor": 0 }, @@ -951,7 +951,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2226aacd9e66476eb861988dbad848f6", + "model_id": "3b5a2517e1974973ad42da4919c39ab3", "version_major": 2, "version_minor": 0 }, @@ -965,7 +965,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5934c98171544c3896c014bc88dcba33", + "model_id": "8664810f6bc042c6883f4fe72cdc8843", "version_major": 2, "version_minor": 0 }, @@ -979,7 +979,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1393a4be29794bc49189a3bc9cdce726", + "model_id": "b1ff302e82134073b69f7ec6cee684b2", "version_major": 2, "version_minor": 0 }, @@ -993,7 +993,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "90b9ac5d75e142669bcfda13882929b3", + "model_id": "dec2e9e185d64898b94d23c62264ab6e", "version_major": 2, "version_minor": 0 }, @@ -1007,7 +1007,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d4330d3c451442d880149af9d02f2e6d", + "model_id": "0a7eb4ded2b244c1831107640c9ec42a", "version_major": 2, "version_minor": 0 }, @@ -1021,7 +1021,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a0928ede58d243cd86005480ba1ed397", + "model_id": "9a65cdd637af4c8392aa9cb6ff0ed9ac", "version_major": 2, "version_minor": 0 }, @@ -1035,7 +1035,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "955cc9c18d874cbf8dbc18245b10fb09", + "model_id": "4c947efe81cd43a48852d7ce7ebccf29", "version_major": 2, "version_minor": 0 }, @@ -1049,7 +1049,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b916270104244593a0bc2763cd0806c5", + "model_id": "1c229ee9e6ff43e3804b6f50c6169335", "version_major": 2, "version_minor": 0 }, @@ -1063,7 +1063,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "585223a6632c4e058fd8788f4d525815", + "model_id": "a76d88fd195a4193bf7ebbe29b06ebd5", "version_major": 2, "version_minor": 0 }, @@ -1077,7 +1077,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f64b94dbf9f8493cabda9e038ab8b7f5", + "model_id": "3e0033c0cb2941178852e63a39f9d426", "version_major": 2, "version_minor": 0 }, @@ -1091,7 +1091,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8e535bf47318498197cf659ee77c6ff5", + "model_id": "f90931139cfd4116863f8bf02723a39d", "version_major": 2, "version_minor": 0 }, @@ -1105,7 +1105,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e3eda3165c5741ed818d73c32a1c1527", + "model_id": "403717ab3cf2431eb60f0fcc2744f20e", "version_major": 2, "version_minor": 0 }, @@ -1119,7 +1119,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8c9756ac61694d89a1b07f01e68a45b8", + "model_id": "3fbecf3a71f24b32927aba0b127cc6c9", "version_major": 2, "version_minor": 0 }, @@ -1133,7 +1133,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f426ae3cc6574a03ad4ebdd714ab8d3d", + "model_id": "35ee74169c9248f693b81d4b0e14a509", "version_major": 2, "version_minor": 0 }, @@ -1147,7 +1147,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8fe0b0bd151742dc9c98a7fe86390701", + "model_id": "7376769b9ed34c0992231fe9e99d6afe", "version_major": 2, "version_minor": 0 }, @@ -1161,7 +1161,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d789f4ab969c4c2f89ff3d0a7f5683f6", + "model_id": "d80137dac3d245028ca99bc34fed0aca", "version_major": 2, "version_minor": 0 }, @@ -1175,7 +1175,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "468c6284839d4609ab9e435da99ea38a", + "model_id": "3d0490b7389347f4ae02300126395377", "version_major": 2, "version_minor": 0 }, @@ -1189,7 +1189,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a32c21e819ad420082ae6779d10991a1", + "model_id": "200688db394c4af58787913be97b08c5", "version_major": 2, "version_minor": 0 }, @@ -1203,7 +1203,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "22ce9340cf8c4306ba36d0c52947f5f1", + "model_id": "6c9bd2a482b14c999c151a264341182e", "version_major": 2, "version_minor": 0 }, @@ -1217,7 +1217,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11d4043bf809408084493da2e96d7281", + "model_id": "33573e49b1f346ab9655a54877a83727", "version_major": 2, "version_minor": 0 }, @@ -1231,7 +1231,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "56bea0978c1d47078c97babceeeef4bd", + "model_id": "4b1cd4d842d9416baffe938d99cc4c1c", "version_major": 2, "version_minor": 0 }, @@ -1245,7 +1245,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2ce34de3c3454dbda7314944c380f551", + "model_id": "2a41fad3da524696b10f0a261dd6ece5", "version_major": 2, "version_minor": 0 }, @@ -1259,7 +1259,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "db580d9728fd4b349b3178a87fb4b1de", + "model_id": "51d575d2c9ba495f9081717f280355e1", "version_major": 2, "version_minor": 0 }, @@ -1273,7 +1273,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9a631b511d204c7ebe234dd1c4159878", + "model_id": "dbdf1316b8f546ddac6be99c5833dc77", "version_major": 2, "version_minor": 0 }, @@ -1287,7 +1287,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "520d80eb6f124d6da04b744396785a7f", + "model_id": "c789e766755040528c30ba92518ed0d2", "version_major": 2, "version_minor": 0 }, @@ -1301,7 +1301,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c00db3f6aa794d81b6dbed1aff30b0ad", + "model_id": "b01d369341d74f348917f302e56d7042", "version_major": 2, "version_minor": 0 }, @@ -1315,7 +1315,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "62d2d3cda291495d9be48ea933df5bf1", + "model_id": "55bc9c44805e4d0cae364f8d04e43edc", "version_major": 2, "version_minor": 0 }, @@ -1329,7 +1329,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5cf579ff451f4becba5a47ce2ff51670", + "model_id": "daa55acf131c47978436b040c3b0fb35", "version_major": 2, "version_minor": 0 }, @@ -1343,7 +1343,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d1ca62709e944a34810edbea10aba6ba", + "model_id": "912ae52a47634fbdb579e263ac1a6374", "version_major": 2, "version_minor": 0 }, @@ -1357,7 +1357,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3fe82fb91f854fd2b8ce073ce2e81fa7", + "model_id": "06b14a65ae414966bd194544a081f080", "version_major": 2, "version_minor": 0 }, @@ -1371,7 +1371,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "465b25b670d4483b8e915b0e19c8d95a", + "model_id": "8087a22330104df3b43e219b9c35d631", "version_major": 2, "version_minor": 0 }, @@ -1385,7 +1385,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cbf0014b6b264dc3a98fd5dd9d9af555", + "model_id": "100e5b53e5e04d22a4d4d437f8a9df02", "version_major": 2, "version_minor": 0 }, @@ -1399,7 +1399,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "95ff07ec86ad454e924d8e30dbbf2798", + "model_id": "76aac5fd8a604d6884f3f0dde5e44c91", "version_major": 2, "version_minor": 0 }, @@ -1413,7 +1413,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "62aa6ee5c33e4df9aa2a8f4fb0b55605", + "model_id": "77f315afb2e6416bac8d98b4abcde140", "version_major": 2, "version_minor": 0 }, @@ -1427,7 +1427,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "10dac4c58d9b45f1a4a01f6dc374cad7", + "model_id": "c9c94e4d7c8b4480b22d6671386619bf", "version_major": 2, "version_minor": 0 }, @@ -1441,7 +1441,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "30042710d78a4fb18ec80091ee226e45", + "model_id": "d92b65db53b74662ab9f60216f152ad5", "version_major": 2, "version_minor": 0 }, @@ -1455,7 +1455,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "143a8f394712488c9f1d18df1c017a93", + "model_id": "1699498905034440b0c50ac994ae0075", "version_major": 2, "version_minor": 0 }, @@ -1469,7 +1469,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "84c94428d8c14ea9b3076842b05fb672", + "model_id": "a8281d4b1e3d49129ea10fd52a7b52e8", "version_major": 2, "version_minor": 0 }, @@ -1483,7 +1483,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f86a0e0c39e4945b4f7dfc4536b614a", + "model_id": "5045301de56d400a8f1ca71d60491eda", "version_major": 2, "version_minor": 0 }, @@ -1497,7 +1497,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4348c1105bd24613aa4d50a103304c3c", + "model_id": "4e45afa034b54e0299697618f225111c", "version_major": 2, "version_minor": 0 }, @@ -1511,7 +1511,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d629c4737a1c46afae2c41a36b3947e5", + "model_id": "174e272f8a7e4dcfbc85f9a7971b5da7", "version_major": 2, "version_minor": 0 }, @@ -1525,7 +1525,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c598394a526a4453a24f066cc77216f6", + "model_id": "cd184c35778b4ea9bc0be3365b60203a", "version_major": 2, "version_minor": 0 }, @@ -1539,7 +1539,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7ec5cbab22d401aa3d4a2587f39ea15", + "model_id": "e4d8a21a33004cfca2a9ff457c61aeb0", "version_major": 2, "version_minor": 0 }, @@ -1553,7 +1553,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "de11aefb083e49a794ec9a7d78898b09", + "model_id": "687afb65bca3469ab8ba05da69f52dcf", "version_major": 2, "version_minor": 0 }, @@ -1567,7 +1567,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac4f7bbcc6b4437ab5f099d8f6a8f47c", + "model_id": "1a8ef7253e1849239cbdf77e05e3036b", "version_major": 2, "version_minor": 0 }, @@ -1581,7 +1581,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "213a738ba02d404f9e817345aa4795e9", + "model_id": "6fd2bfbfea624c22b338a9bb75c11e8f", "version_major": 2, "version_minor": 0 }, @@ -1595,7 +1595,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "60421ef0810c4c6dbb9b39c6b66d101b", + "model_id": "31855851a66a4742b5a064729dc2fd5b", "version_major": 2, "version_minor": 0 }, @@ -1609,7 +1609,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "49de29046acd44c7901ee6f9c463408c", + "model_id": "b5c0984528064169a6a17919cae759cc", "version_major": 2, "version_minor": 0 }, @@ -1623,7 +1623,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7cca575dfde14290b7884aceb1f6ad7a", + "model_id": "c3c061000e5d42a58dbdd1baedbbdb2d", "version_major": 2, "version_minor": 0 }, @@ -1637,7 +1637,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "928eac5ca46040bcb71d43cc98ebb8ac", + "model_id": "481529aad9254adc8331176f234a1c53", "version_major": 2, "version_minor": 0 }, @@ -1651,7 +1651,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eb2acfa526bf434aabba7e39d021211b", + "model_id": "0cf9095dc83b425c87e558024466b672", "version_major": 2, "version_minor": 0 }, @@ -1665,7 +1665,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "354138e622224bd785fa534cc2237f1b", + "model_id": "a8333f16d34b4cea940c166fa1c0c9a3", "version_major": 2, "version_minor": 0 }, @@ -1679,7 +1679,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "552c361bb170437ca220333eb2a725d4", + "model_id": "788ba91714cf4364ac671140647aa697", "version_major": 2, "version_minor": 0 }, @@ -1693,7 +1693,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69319f20cfa64d7f9bb187c8e6314ae4", + "model_id": "7da39f13cf104342b25708d74ab97f7d", "version_major": 2, "version_minor": 0 }, @@ -1707,7 +1707,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "000a5c77474542768b6c784f75fdae43", + "model_id": "bb5a5b6d520c4299a25971a87e1ae94a", "version_major": 2, "version_minor": 0 }, @@ -1721,7 +1721,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1aa165ef7cc5475083b7cfbc6be4d3bc", + "model_id": "ddd57c5018944e0787c24f8068d01a3e", "version_major": 2, "version_minor": 0 }, @@ -1735,7 +1735,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f57a656d6f6f4abdbc28289fbb0b8a1a", + "model_id": "29d5438e3e954e4595c1a82d636c8fbc", "version_major": 2, "version_minor": 0 }, @@ -1749,7 +1749,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "54e69e6e31ed496896e11b0bafacde44", + "model_id": "e6e696f273be42588a5f98d3e7c2722c", "version_major": 2, "version_minor": 0 }, @@ -1763,7 +1763,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ecd1ef8bb3854068a88fcc1da89875bf", + "model_id": "eb00919b79654d75ad762fed38dfc7fa", "version_major": 2, "version_minor": 0 }, @@ -1777,7 +1777,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "681b64569f544f82ad3473d8583f472d", + "model_id": "2653b9543e224983bf69afe611a29b3b", "version_major": 2, "version_minor": 0 }, @@ -1791,7 +1791,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0d84a9ec42884dc18f5d11f6e0557087", + "model_id": "232ba407b243417496a079c227ff9516", "version_major": 2, "version_minor": 0 }, @@ -1805,7 +1805,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "56616f7997f64befba18023ef0d593a9", + "model_id": "3ff87bdcdf204839bd11d737d7f63108", "version_major": 2, "version_minor": 0 }, @@ -1819,7 +1819,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e9ef416e811b44728c49f1bd9dde7cb1", + "model_id": "512c7703178543ce99a1ffd04faa3487", "version_major": 2, "version_minor": 0 }, @@ -1833,7 +1833,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0bd503eeea7c4046aab3eb74bc37e001", + "model_id": "983c2d8168ae4c7281dd668043b865d5", "version_major": 2, "version_minor": 0 }, @@ -1847,7 +1847,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3a84f9dcbfa44349a0f095aacfbd41a8", + "model_id": "55b272acbd9d4553a3874830671c18d1", "version_major": 2, "version_minor": 0 }, @@ -1861,7 +1861,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0daa314bb12446daa46235915e91341d", + "model_id": "e569e4706775445da3379a1777b40712", "version_major": 2, "version_minor": 0 }, @@ -1875,7 +1875,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "748bc9b9b5eb4eccb4c37e7b95c79aae", + "model_id": "01d3a0f8db8146c2b65bb03c20f18364", "version_major": 2, "version_minor": 0 }, @@ -1889,7 +1889,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d19e9fe21dc2466688b530c05fcb384a", + "model_id": "c6ceebe09ad246f1a28a0bada84dd9ac", "version_major": 2, "version_minor": 0 }, @@ -1903,7 +1903,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "561cc528894549059edb184bd84e91f8", + "model_id": "1158de57dc1645d5bbf4ed07bda119b5", "version_major": 2, "version_minor": 0 }, @@ -1917,7 +1917,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e45240e4a4ff482d927262f8add975de", + "model_id": "fff86d6ec14e4a4ab908704feec8335a", "version_major": 2, "version_minor": 0 }, @@ -1931,7 +1931,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b5f2118720c4e45a4fc57e12d0946a6", + "model_id": "15b1322195634bb596cb7a9723feef69", "version_major": 2, "version_minor": 0 }, @@ -1945,7 +1945,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "911463d91acf477eb5b90c47bf5548b8", + "model_id": "280f28853c224a3082b1d11c81fadbc4", "version_major": 2, "version_minor": 0 }, @@ -1959,7 +1959,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aca4970d75824042912da3777550c94a", + "model_id": "b910c7274f9d44fcb22fbf6d70c53aa5", "version_major": 2, "version_minor": 0 }, @@ -1973,7 +1973,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "54c08807b1a748b59b2928f3d38c8322", + "model_id": "2c612e5faee1472faaa0746ec347190e", "version_major": 2, "version_minor": 0 }, @@ -1987,7 +1987,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f7a3c58e9e1431e8484cc6aabcbabff", + "model_id": "eebd127c0a174ef9b30ddcde17b9c521", "version_major": 2, "version_minor": 0 }, @@ -2001,7 +2001,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "047f9f1605ee4ad3a049eb34f019b50c", + "model_id": "3427191edde940b0a46343563fd7f438", "version_major": 2, "version_minor": 0 }, @@ -2015,7 +2015,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "770afad8d372431fb2ca89b4c8f3184a", + "model_id": "e7c93f53ca7448208d86d8e82f8d6b36", "version_major": 2, "version_minor": 0 }, @@ -2029,7 +2029,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "29fa9368b21841a390853612ea7d8975", + "model_id": "1ebab5735c4b4ff29d191a3b83cb7d45", "version_major": 2, "version_minor": 0 }, @@ -2043,7 +2043,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d4f62ccab80443eb8051ff498521e088", + "model_id": "270e422eefca4393a304e0cdd1fb1bad", "version_major": 2, "version_minor": 0 }, @@ -2057,7 +2057,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "42d3e6b899cb43c18717022b9b9ab981", + "model_id": "b14b324da14c4731808b9cc0aff3b5c6", "version_major": 2, "version_minor": 0 }, @@ -2071,7 +2071,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ea48ab642d74358abd4058464c2fb11", + "model_id": "ad405c2f593942738d3b34d745f7863a", "version_major": 2, "version_minor": 0 }, @@ -2085,7 +2085,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3208dae4a8bc4c5ba43caa5102b4ef0e", + "model_id": "6deedc94808f49cd8e6a972aa896ba06", "version_major": 2, "version_minor": 0 }, @@ -2099,7 +2099,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f77039cf61fa4ee18d75afe8baf53da5", + "model_id": "07130003c33e4a53b7b021265eb0c0b6", "version_major": 2, "version_minor": 0 }, @@ -2113,7 +2113,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eadc302e8fcf4d4fbfec2f56ce35285f", + "model_id": "a9650c7742344910a8b90e3c141c0411", "version_major": 2, "version_minor": 0 }, @@ -2127,7 +2127,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5d5565bda85940a480a59085e3ae4be2", + "model_id": "8567c0f3d09f4682bb40f41879c2ff99", "version_major": 2, "version_minor": 0 }, @@ -2141,7 +2141,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac781fc8f0044fb98f235759766875f2", + "model_id": "94446c6f21dc4d7fa3a211b5e3ffc442", "version_major": 2, "version_minor": 0 }, @@ -2155,7 +2155,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "faedd9faa46b4c29ad70ba8eb269a5aa", + "model_id": "8b52128c5efa4c0fa4babfdd91018a59", "version_major": 2, "version_minor": 0 }, @@ -2169,7 +2169,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "70c2d4befec84d7f8cef2527fd7bab1c", + "model_id": "55c99b36f5c741c1bd40d16acb156982", "version_major": 2, "version_minor": 0 }, @@ -2183,7 +2183,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f8c3f7e5da44b75abbe32c53437c3af", + "model_id": "b79f5fcda9d545f6b6c0d16ffd693d93", "version_major": 2, "version_minor": 0 }, @@ -2197,7 +2197,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "afdc3175b5b146ab9e845d011cebc54b", + "model_id": "caca35c7eb8643bd8c6516dd62667086", "version_major": 2, "version_minor": 0 }, @@ -2211,7 +2211,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9539b6bd33c64939bff0339ad7e11551", + "model_id": "2a8a18585a7f417eba248886a9f833c5", "version_major": 2, "version_minor": 0 }, @@ -2225,7 +2225,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3b947432045c446c9b2be614995452e5", + "model_id": "cc1f6bbfe68a4a7f9553690ca954fe7e", "version_major": 2, "version_minor": 0 }, @@ -2239,7 +2239,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "faa67dadb10641c1889717601218a206", + "model_id": "8bdf5651f14c487d9878db382be0c59f", "version_major": 2, "version_minor": 0 }, @@ -2253,7 +2253,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7f2d9f5cee2c462b85c070fd7e747cdd", + "model_id": "044d3551376d4574a08954e123cf117c", "version_major": 2, "version_minor": 0 }, @@ -2267,7 +2267,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "052f092dbb534618b75c6b6af2f0f57f", + "model_id": "c49aaa524513486f92459b03e038163a", "version_major": 2, "version_minor": 0 }, @@ -2281,7 +2281,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "39c8f4a0778740d9ae8512099829a104", + "model_id": "d55fd555ed91474c924655cfd1990523", "version_major": 2, "version_minor": 0 }, @@ -2295,7 +2295,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f254861aab2c49bc9df6a303aa3dbff7", + "model_id": "8cfd4386c6ef43c1b2f1896c4c3685a3", "version_major": 2, "version_minor": 0 }, @@ -2309,7 +2309,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ae60c35a78bb4004ba337fd1f590b85c", + "model_id": "29e81e867196404087e9090893de964a", "version_major": 2, "version_minor": 0 }, @@ -2323,7 +2323,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "589f7dc27d5b4c39b53a497e9e81315b", + "model_id": "532d2ac36e934ea8acfa0599fafad1e0", "version_major": 2, "version_minor": 0 }, @@ -2337,7 +2337,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "995d4b5935674422ad2683938ac776a4", + "model_id": "9b6342a05a674145aac770793f546f8e", "version_major": 2, "version_minor": 0 }, @@ -2351,7 +2351,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "05bfbf1d55934bd795c184080034dd3d", + "model_id": "dc3dcb52180345f0bc3ff606771c6162", "version_major": 2, "version_minor": 0 }, @@ -2365,7 +2365,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5cdf186564ed4d66b18d16be98ff1102", + "model_id": "c6fe395260d448ff9f82c7878f2ba61d", "version_major": 2, "version_minor": 0 }, @@ -2379,7 +2379,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e9773dec28b4a1fbef508caea69722a", + "model_id": "c68d50193dfe461e9e3429d397a244a0", "version_major": 2, "version_minor": 0 }, @@ -2393,7 +2393,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f8b5581708bb4e17985f1c87f98c0ca2", + "model_id": "ea55e994b0cb4b4893046ce5271e8141", "version_major": 2, "version_minor": 0 }, @@ -2407,7 +2407,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "049aaa8f0ce34cd79ef680a47b6a5d2b", + "model_id": "6cd63e9a875d4e858595d21fedbc149f", "version_major": 2, "version_minor": 0 }, @@ -2421,7 +2421,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e8668b0c226d4c3b944c4b0203796b0f", + "model_id": "1d598b7027e84e5e8b5b29c3ab5a6399", "version_major": 2, "version_minor": 0 }, @@ -2435,7 +2435,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6220d1f7cc1c4419a585aa718a14e3b0", + "model_id": "db931982fc754acdaa0f48322f624c29", "version_major": 2, "version_minor": 0 }, @@ -2449,7 +2449,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "979261efa048470ba73111e841a64500", + "model_id": "e426fdad9a2948f982de4dc1d1568d55", "version_major": 2, "version_minor": 0 }, @@ -2463,7 +2463,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f266b42c66024bcd90f28a7d1575ab0b", + "model_id": "554c69bddffe499d9584a0d1e1d16584", "version_major": 2, "version_minor": 0 }, @@ -2477,7 +2477,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8e0e984d4b3344c49eda29d35c50b680", + "model_id": "27e6d861df6b457aabcfd44d9890d862", "version_major": 2, "version_minor": 0 }, @@ -2491,7 +2491,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2521b86b2b0942358e0329b80b577897", + "model_id": "595f9e6e080c47f691cb0adfd428561e", "version_major": 2, "version_minor": 0 }, @@ -2505,7 +2505,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "50f8511983514f37a03acb4cb5ee4d45", + "model_id": "5ecfdc2cba354005afc03dcf7c9c43d2", "version_major": 2, "version_minor": 0 }, @@ -2519,7 +2519,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c038a547c1f4774ab8c351efc0fc788", + "model_id": "0b67bdd1edd6471e93af73429dcd0557", "version_major": 2, "version_minor": 0 }, @@ -2533,7 +2533,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b9c74fa072e84f1d81ee9c69bbbdce70", + "model_id": "37e9bfb0ab184f6d81a02ee53d5f9683", "version_major": 2, "version_minor": 0 }, @@ -2547,7 +2547,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a08e8c37e383484ebb533348ffb896d3", + "model_id": "39e6a136a5ba4da492663b5fd1a54a5a", "version_major": 2, "version_minor": 0 }, @@ -2561,7 +2561,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c6c1fa9fa88a494eb03aa76497c5d321", + "model_id": "145e6dbb034c45ee88b9bbd5edb8bd7f", "version_major": 2, "version_minor": 0 }, @@ -2575,7 +2575,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5ac9e57acffe4f42aa0e59c3de1aaf45", + "model_id": "50f6538533de422d874dab5a1f268714", "version_major": 2, "version_minor": 0 }, @@ -2589,7 +2589,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3e6deef19d40450da86decbd33f5c9d5", + "model_id": "69d60d617a6a42a9b704965c7cf59b8d", "version_major": 2, "version_minor": 0 }, @@ -2603,7 +2603,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "69055279097344e0a5d3f67d45252fc9", + "model_id": "0137fd566cbd48b48b9eb16fa2edafb1", "version_major": 2, "version_minor": 0 }, @@ -2617,7 +2617,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f87af2d5d56475883f7cb31b2c84788", + "model_id": "574878d5579448e19b538ea830c04d77", "version_major": 2, "version_minor": 0 }, @@ -2631,7 +2631,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "32cf28a55df5458290b5bafcc6687b7d", + "model_id": "6726a27187084ea5920065118a25e7fc", "version_major": 2, "version_minor": 0 }, @@ -2645,7 +2645,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "73adfccdb67e4118811b7ba4e97e7ea2", + "model_id": "0374ffd7ef5b4566b715f7dbd6cfbd57", "version_major": 2, "version_minor": 0 }, @@ -2659,7 +2659,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a95371ed1a7e41cc8bcb5915befd3ca9", + "model_id": "7a2ffdf6293a4e82931c2614b71d1220", "version_major": 2, "version_minor": 0 }, @@ -2673,7 +2673,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1bac667d2c704bac91b13f3ce727cd97", + "model_id": "43315df2f3a047d2a7ddcdeb9d5b8a8a", "version_major": 2, "version_minor": 0 }, @@ -2687,7 +2687,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "02c7ecc1bea4487fbdcc2d4d1b8c14fe", + "model_id": "b12cd7489fe741ddb89dd388c42eaeeb", "version_major": 2, "version_minor": 0 }, @@ -2701,7 +2701,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "db7e49e156874fb8b0aab3edc35bde8b", + "model_id": "ef8d21aff00c4eb5a6877d6f80bdc69d", "version_major": 2, "version_minor": 0 }, @@ -2715,7 +2715,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "240757daa9fb4e6597326b6a067b7270", + "model_id": "9544ea48d3b2469ab511bcdd6c613e09", "version_major": 2, "version_minor": 0 }, @@ -2729,7 +2729,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "319ec244b46c4194b8d1ba41deff5ebc", + "model_id": "4bc74aad42ea41eebd2bef3fc5ccf389", "version_major": 2, "version_minor": 0 }, @@ -2743,7 +2743,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4835c7b951be481aa8dde33cb6f23e8d", + "model_id": "3f7d8d2159574578bcaf6094794e6917", "version_major": 2, "version_minor": 0 }, @@ -2757,7 +2757,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "90a6b21234124954b9de66e996f22d88", + "model_id": "7fd7ea91d6ad4e96bfad66ecc07209aa", "version_major": 2, "version_minor": 0 }, @@ -2771,7 +2771,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c008e657c4f44a0ebf4d67707c68040e", + "model_id": "2830a802a36248deac69e48e8979047b", "version_major": 2, "version_minor": 0 }, @@ -2785,7 +2785,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b324b7d095af45359c819226791ac7f3", + "model_id": "a06183f3759e400db49629201a6850bc", "version_major": 2, "version_minor": 0 }, @@ -2799,7 +2799,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "53d5d8c22376428f9a3c61f94f748e1b", + "model_id": "bb9fde3554e6486aa05e31d4e6976e88", "version_major": 2, "version_minor": 0 }, @@ -2813,7 +2813,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f0722ce4e8d844eeb9c124dbf772d87b", + "model_id": "1900dfc155c5475080b2605fc1377baf", "version_major": 2, "version_minor": 0 }, @@ -2827,7 +2827,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f9a4bcbbe7e74f77a6d30afb098cd147", + "model_id": "986b0d36f9f3419db8a7b8e941c5499b", "version_major": 2, "version_minor": 0 }, @@ -2841,7 +2841,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eab1d49c1bb646ada72f7aacabddcf66", + "model_id": "fd1436251cde4ad39e820d3016507595", "version_major": 2, "version_minor": 0 }, @@ -2855,7 +2855,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "099d898e0da948fe9807e66b3b793161", + "model_id": "dc60939971cb458583d71d36a0049806", "version_major": 2, "version_minor": 0 }, @@ -2869,7 +2869,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dcacaa0409644fef9fbf1e982308f4ad", + "model_id": "973c2672298c4e07aea8976a11f165ff", "version_major": 2, "version_minor": 0 }, @@ -2883,7 +2883,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5859faa4ac034d61b3d42f22037fbe5b", + "model_id": "7f170ff2812349a98fbb8006cfce41c7", "version_major": 2, "version_minor": 0 }, @@ -2897,7 +2897,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "309dce37f16d4334a823b4bf8f1a6b00", + "model_id": "040174dab6db4c7290ed9ec79d5200cd", "version_major": 2, "version_minor": 0 }, @@ -2911,7 +2911,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d2437f9ff5bd455dbed6dee8961dbb58", + "model_id": "42931ec6a3fb4586b05a47371aa84c5c", "version_major": 2, "version_minor": 0 }, @@ -2925,7 +2925,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "049f9fb87f06482ca85b2ace4534bb8e", + "model_id": "f2c3a7fe4c67452c92c1ebc27068b119", "version_major": 2, "version_minor": 0 }, @@ -2939,7 +2939,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "de75b7cbbb75485fb486b0ab9aebd6c3", + "model_id": "d8dba3cf03f7455db2af6448f248af65", "version_major": 2, "version_minor": 0 }, @@ -2953,7 +2953,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d514667e15e94f8cbe5557df0df3720f", + "model_id": "cc5a816780394e86b49168611a584c35", "version_major": 2, "version_minor": 0 }, @@ -2967,7 +2967,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d4b321f670a1442b9d99e8b31853cf93", + "model_id": "ea92c173526948d198adb48875e9c497", "version_major": 2, "version_minor": 0 }, @@ -2981,7 +2981,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ca85a173a17f4943a49b73aae4f2a61e", + "model_id": "243db02df7e64f94a5cdad4329eb9333", "version_major": 2, "version_minor": 0 }, @@ -2995,7 +2995,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7863a3e309ac4355a6ca75c1248fd928", + "model_id": "0560ecae280448e496c27409475fa7d2", "version_major": 2, "version_minor": 0 }, @@ -3009,7 +3009,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b734311349447a8bd49b292058d1fd2", + "model_id": "010c1a3afd004dfdaa05eec66c9abdd1", "version_major": 2, "version_minor": 0 }, @@ -3023,7 +3023,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ed4f01d4734f46b8b9b7f3d0e20a309a", + "model_id": "8f5c84ddc5ab4055a6cb4fe76bb4cf8f", "version_major": 2, "version_minor": 0 }, @@ -3037,7 +3037,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "73da061cd1ad447c8bd74252c0bf4308", + "model_id": "2d36f26ee30c45dbbeaacdc0a225be7b", "version_major": 2, "version_minor": 0 }, @@ -3051,7 +3051,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f98a078155b4c96869029d432109207", + "model_id": "1606ce93e1fc47aaa9970a6c5e07de9a", "version_major": 2, "version_minor": 0 }, @@ -3065,7 +3065,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "47425f88f9f641ea997fc2639cbd7690", + "model_id": "c6363182a00f4ea2b8cae642fa96e56b", "version_major": 2, "version_minor": 0 }, @@ -3079,7 +3079,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "675f783667a34a6cb639c6a970e939c5", + "model_id": "eff07cebc7894b0fba7d3c245c1a86e2", "version_major": 2, "version_minor": 0 }, @@ -3093,7 +3093,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3a65f32aa91847ee824c31d969b55804", + "model_id": "8a53105a04e1409baa80a402daab7ff0", "version_major": 2, "version_minor": 0 }, @@ -3107,7 +3107,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e53d782360864eea99edaabbf49ecfa5", + "model_id": "2a6acad9224741afad2ea105aa689475", "version_major": 2, "version_minor": 0 }, @@ -3121,7 +3121,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "211e3421ef5d498cbc47764e906cc510", + "model_id": "781ec9c7cee24046b6010403a8dd0a21", "version_major": 2, "version_minor": 0 }, @@ -3135,7 +3135,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "84f5e91ba0fa4d1ca9f573c8e5cc41e4", + "model_id": "4494037aa54444a792c50de16fe0cb3f", "version_major": 2, "version_minor": 0 }, @@ -3149,7 +3149,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b947afecdb444951b46020aa9ed5af4f", + "model_id": "d1cd9c6c17f94533ba4be31f57fdd65d", "version_major": 2, "version_minor": 0 }, @@ -3163,7 +3163,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c56a042d621c4de89e8dd70890232207", + "model_id": "b613212973f8431e9523b80a84db910a", "version_major": 2, "version_minor": 0 }, @@ -3177,7 +3177,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e6db4540848d468da218540c24709620", + "model_id": "001d452ae8c2451cbd63e723ea344647", "version_major": 2, "version_minor": 0 }, @@ -3191,7 +3191,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cd51d54fe95f45d5bdc6d95238ada937", + "model_id": "ab9031cbf99b47e587f4706d92bef785", "version_major": 2, "version_minor": 0 }, @@ -3205,7 +3205,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5411c822f8894d19805544430250ae8d", + "model_id": "ce2c7e485e5f47ef91c4fae12c98e9ad", "version_major": 2, "version_minor": 0 }, @@ -3219,7 +3219,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "987e20a89a064a69aed9315fcc0949fd", + "model_id": "cbc873fc12b34b2598753c67f0bd9eec", "version_major": 2, "version_minor": 0 }, @@ -3233,7 +3233,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "39880bb7b7454908b9d8db905adbad03", + "model_id": "90ae853d6baa40d3a6b97a0f6cead6b6", "version_major": 2, "version_minor": 0 }, @@ -3247,7 +3247,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ad5e2bbd63447be962262b72ba7192f", + "model_id": "07f5421d84d543e7b7e36b506a1ea62d", "version_major": 2, "version_minor": 0 }, @@ -3261,7 +3261,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "14e77c106c5543a582401b902ff6b7cb", + "model_id": "279348c6f975491c94c1e34c63322505", "version_major": 2, "version_minor": 0 }, @@ -3275,7 +3275,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ee0a83b7a22406387e4a71970b34162", + "model_id": "19fe1a0bd3044d2b9668ce41e39e3b2a", "version_major": 2, "version_minor": 0 }, @@ -3289,7 +3289,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "021f2e86d8f24c448f9e12efbcd435c2", + "model_id": "086a53fc2a7c4943834741be2ebaa21c", "version_major": 2, "version_minor": 0 }, @@ -3303,7 +3303,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ea44053f6e24efda34ba8cf2c0b5a64", + "model_id": "8758d0e6ece94d62a9d989b74ddbcbbd", "version_major": 2, "version_minor": 0 }, @@ -3317,7 +3317,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "08dfa954ccc94953ae9b3f5234f0fc65", + "model_id": "3c65de4c847d44d3a50148594687d927", "version_major": 2, "version_minor": 0 }, @@ -3331,7 +3331,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "56153ab3eda84c97947b34114e44e848", + "model_id": "745a528daaa2471e8329a54120df686c", "version_major": 2, "version_minor": 0 }, @@ -3345,7 +3345,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efe9041df7d44f04827b0af73e92fad4", + "model_id": "c8d2d8e75cc04d04bd1be079d713697c", "version_major": 2, "version_minor": 0 }, @@ -3359,7 +3359,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5acbe98c197649fbb0bcada7c848d9a1", + "model_id": "2701e34a325540edad8ea49cd88f8a4f", "version_major": 2, "version_minor": 0 }, @@ -3373,7 +3373,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e5503656b8c4e838a92b81c293f82db", + "model_id": "288fd3f0228e4c0191721ba86c8f9e5d", "version_major": 2, "version_minor": 0 }, @@ -3387,7 +3387,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c9aca4ec425041c1bb1d2cb4dcc1441d", + "model_id": "fe57d639a7604b22856b93913e2b65ac", "version_major": 2, "version_minor": 0 }, @@ -3401,7 +3401,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0095481c3eac45beb7092dffbde682a0", + "model_id": "1635215e33db415cafd0a98b6f0721a0", "version_major": 2, "version_minor": 0 }, @@ -3415,7 +3415,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0d2d4d16078a4e10867c9364d6ab2c3f", + "model_id": "8f62ebf2f8d94504a87c2e9c9e900f49", "version_major": 2, "version_minor": 0 }, @@ -3429,7 +3429,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eb3e4e6334b941429016240cb20f113f", + "model_id": "b09089abdace4e0aba9db58cd52c5152", "version_major": 2, "version_minor": 0 }, @@ -3443,7 +3443,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1255890a35e64e1ba9ed88cf3629b09a", + "model_id": "38c8c45092684d27a9b4baeb24ea9ed0", "version_major": 2, "version_minor": 0 }, @@ -3457,7 +3457,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4fb48ba1b09e4f319a04b113b09ade4e", + "model_id": "4ba34e4dd455495eb641480b0ead25e2", "version_major": 2, "version_minor": 0 }, @@ -3471,7 +3471,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "da069dd896444dcd95777f7d5f639f0c", + "model_id": "93ac8872231a4285869d1c9823799614", "version_major": 2, "version_minor": 0 }, @@ -3485,7 +3485,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b68e507c1c7341009614932055b593a7", + "model_id": "84dd6d0e3bf44b54a8f1126d88acefc5", "version_major": 2, "version_minor": 0 }, @@ -3499,7 +3499,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "09d7e5393b0d491b897c686c75771a03", + "model_id": "d8afdc25327a4b1a92c2ce8157743d09", "version_major": 2, "version_minor": 0 }, @@ -3513,7 +3513,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4fd7493234244370a34332953edcabe6", + "model_id": "2d14fda3df1a43a889c5bd3830665044", "version_major": 2, "version_minor": 0 }, @@ -3527,7 +3527,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fa5a81e1737048ed84de9787a58f99cb", + "model_id": "578ffb723b9f464f85f76915609c49df", "version_major": 2, "version_minor": 0 }, @@ -3541,7 +3541,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b40c15983533482795a3a39249f9fd81", + "model_id": "eb41e0558df44840a50bec2f2f85069a", "version_major": 2, "version_minor": 0 }, @@ -3555,7 +3555,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e2425cda9077476a8a5e2cd4bf96a4a6", + "model_id": "592db9c878174462b634a9917195d73d", "version_major": 2, "version_minor": 0 }, @@ -3569,7 +3569,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4326bad36e3c4f048f3f24e6b88a7913", + "model_id": "e02bf63d46314947a13aba76f8551ea6", "version_major": 2, "version_minor": 0 }, @@ -3583,7 +3583,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3fabab9488fd4b4b8baada50f33f23a4", + "model_id": "0895d46417d04dafa96d85289f0ebb38", "version_major": 2, "version_minor": 0 }, @@ -3597,7 +3597,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "071fd3d480c44f8b80d4b7c3100420fc", + "model_id": "9b0f1e6296bf4d8f80e76f5c326d6151", "version_major": 2, "version_minor": 0 }, @@ -3611,7 +3611,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bfcc81ff2fed45a296b7d6068b681e79", + "model_id": "339c0604e0b848e9bf8dc1aa03498334", "version_major": 2, "version_minor": 0 }, @@ -3625,7 +3625,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "298c32f174d84339aa0bb78c90ea4816", + "model_id": "43e1e94b4e3a4aa09622df03da354e02", "version_major": 2, "version_minor": 0 }, @@ -3639,7 +3639,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "844b22e03eca4a589f6008184c412b9d", + "model_id": "bfa88e1a16db4b0294a463787a581cbc", "version_major": 2, "version_minor": 0 }, @@ -3653,7 +3653,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c05ce847dcca47f38a57047f2fe597a4", + "model_id": "555f54530ce14694943bede86e52e708", "version_major": 2, "version_minor": 0 }, @@ -3667,7 +3667,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23c8e8c4df0e4e1fbc353a936d03cea8", + "model_id": "e41ea5ce07ce43f7816f0193e29652c1", "version_major": 2, "version_minor": 0 }, @@ -3681,7 +3681,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c60fb0d2db9d422aab64e4493fb9e2bc", + "model_id": "a3eabdbde921466188a373e1b8d7a467", "version_major": 2, "version_minor": 0 }, @@ -3695,7 +3695,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0e1bfafbeb824acc82889189f30fc904", + "model_id": "fc4be874b3ee42679c75110df15257d7", "version_major": 2, "version_minor": 0 }, @@ -3709,7 +3709,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d0afa76c8d8349569fcd5010ab5e0b58", + "model_id": "0017c6ac99e343e791bb93ff0fe331f7", "version_major": 2, "version_minor": 0 }, @@ -3723,7 +3723,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1fe9476ba4d34497b009239469f4bf6a", + "model_id": "3ca4d99c46cd4408b93fbce20a75e335", "version_major": 2, "version_minor": 0 }, @@ -3737,7 +3737,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cd93517a57f34ccf9a8387a681d91680", + "model_id": "bb929712195a4599aebd894c28e2adc9", "version_major": 2, "version_minor": 0 }, @@ -3751,7 +3751,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "30a415c0a12046678e880d1cb1d75a65", + "model_id": "61ab4dc21ef541f4a3dc36364ae0e817", "version_major": 2, "version_minor": 0 }, @@ -3765,7 +3765,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "469cb4af75014844adfd9fbf3671965b", + "model_id": "a84d2fcdb89c4cc4b3c0d41e6480778a", "version_major": 2, "version_minor": 0 }, @@ -3779,7 +3779,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8ccf6e904e1f42cea57ce868a98ff2f7", + "model_id": "958180a692eb4cf8a964a62d97fa60b5", "version_major": 2, "version_minor": 0 }, @@ -3793,7 +3793,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f6851f30c63641a8829735d20dc98ac1", + "model_id": "a6a76d190c0c47fdbe9ec578e1f61248", "version_major": 2, "version_minor": 0 }, @@ -3807,7 +3807,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "423c6264773a44f9b3926af6e098527c", + "model_id": "40c6114ff48941978e928be5185999ae", "version_major": 2, "version_minor": 0 }, @@ -3821,7 +3821,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dfc905f503b14d5ea259836bc05d0872", + "model_id": "aafa51551ccc440085914b87a2fb4fc5", "version_major": 2, "version_minor": 0 }, @@ -3835,7 +3835,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "10e89b21876445c4959ce3f3f2a7cb8b", + "model_id": "1f3b3cf6fa684003a7b931c92f920327", "version_major": 2, "version_minor": 0 }, @@ -3849,7 +3849,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c5c1bdb9d8294ab2bd7ffdf0f310e7be", + "model_id": "eee571b8e5b1415393489ad0dbf69ad3", "version_major": 2, "version_minor": 0 }, @@ -3863,7 +3863,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3de281298f524b55817f4b5f2a0ee8bc", + "model_id": "2a79e014e2284b44b31db6196d763a78", "version_major": 2, "version_minor": 0 }, @@ -3877,7 +3877,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3e55b4ef68144427b53e83509c53dd4a", + "model_id": "5fb8e369816a436a887909afd0f5e2a7", "version_major": 2, "version_minor": 0 }, @@ -3891,7 +3891,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1780040100e740e391fc9bb7d943daf5", + "model_id": "cac98b0e61bb4c2d8467c00ae423ea8d", "version_major": 2, "version_minor": 0 }, @@ -3905,7 +3905,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7bd3ebd491af4e9ea041da2b57475c8c", + "model_id": "a3460a6b58d446b0aa4b1e5399442d05", "version_major": 2, "version_minor": 0 }, @@ -3919,7 +3919,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf6cc87047544e76bc5b3f071c492534", + "model_id": "67c5b0b7bd524a99b8806fb97039b28f", "version_major": 2, "version_minor": 0 }, @@ -3933,7 +3933,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e5950d8a52f148a4b2da5ce49dc20b1c", + "model_id": "6ab465e8b7494b649548574f743a3390", "version_major": 2, "version_minor": 0 }, @@ -3947,7 +3947,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7fb1db91996b4669922256a42bad8cfe", + "model_id": "c391b36a32924e568052227799fe2d34", "version_major": 2, "version_minor": 0 }, @@ -3961,7 +3961,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d5e185241015416db4f56df1dd72197d", + "model_id": "d7685f1a5161404cb8b5ebead0965bee", "version_major": 2, "version_minor": 0 }, @@ -3975,7 +3975,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f09fc5a544864ae68cfea009aa9f5961", + "model_id": "31bbfe03ffa6437cb4a1131c82ffbc0e", "version_major": 2, "version_minor": 0 }, @@ -3989,7 +3989,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "09edef19d6274299b5e1f591c79ea5e9", + "model_id": "1ae621d1ae7a46f7877c7037f2d067df", "version_major": 2, "version_minor": 0 }, @@ -4003,7 +4003,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b047939acc1441aeacf2634ea5ca5d81", + "model_id": "fcf7d12ba0a549a7b254801d22def3ad", "version_major": 2, "version_minor": 0 }, @@ -4017,7 +4017,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83664c8b1444411f967d10d0c263add9", + "model_id": "f7904af298b64c7a8995dbf4450570c2", "version_major": 2, "version_minor": 0 }, @@ -4031,7 +4031,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a79f072a0a114f81b232102804181401", + "model_id": "36645bac870b4e54901d1b358a2a90b8", "version_major": 2, "version_minor": 0 }, @@ -4045,7 +4045,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d45a411edb554b9ab43bfdfe98575430", + "model_id": "16186cd0ac124e9f8ca05dfa70f5f81e", "version_major": 2, "version_minor": 0 }, @@ -4059,7 +4059,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f9fce5a80b934963959cff4b15dd0add", + "model_id": "e8a112d2a0554960aca1d7fdf323cee9", "version_major": 2, "version_minor": 0 }, @@ -4073,7 +4073,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7919687919494d19835159f13f0eb098", + "model_id": "0afb5e86175745a7adffa75bc513d6dc", "version_major": 2, "version_minor": 0 }, @@ -4087,7 +4087,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf528c7eeba048ba979a6a731f4d744e", + "model_id": "2a6b99781e804e84aee65d8ad0c7a40a", "version_major": 2, "version_minor": 0 }, @@ -4101,7 +4101,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "60452ec85240440ebb1fbbf2891254d2", + "model_id": "dad60f72e88d4e69a63098994931d881", "version_major": 2, "version_minor": 0 }, @@ -4115,7 +4115,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ebd65252a5148729f546f3e2ce256fb", + "model_id": "6f775fc85f644830b1a1bed127c40c8f", "version_major": 2, "version_minor": 0 }, @@ -4129,7 +4129,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6fb5427df9844dd68a46a7f3a8a6acb7", + "model_id": "24c0aff026474818949c3d45a295fe8f", "version_major": 2, "version_minor": 0 }, @@ -4143,7 +4143,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c2a1e3fac85c45749c4cbcf6a91a2e73", + "model_id": "d4cb7cd029de4775b54fad2aa5015c65", "version_major": 2, "version_minor": 0 }, @@ -4157,7 +4157,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a63dca391f4145818dbd0f70215a5cdd", + "model_id": "0ab85b3d41bb44fb8024b00fef39696c", "version_major": 2, "version_minor": 0 }, @@ -4171,7 +4171,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3231ed0eb8a8496fabda9516467c35a3", + "model_id": "e1a289fb498849ddb6f921cd82198f0d", "version_major": 2, "version_minor": 0 }, @@ -4185,7 +4185,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a5aa1d867d274f23b713a4c044e1308a", + "model_id": "28db313501aa40e3890d3215259cadb9", "version_major": 2, "version_minor": 0 }, @@ -4199,7 +4199,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8d6854843f124ec3a181c7f3c5d72a26", + "model_id": "70cc517519014a4eb2ff4086c48ea73e", "version_major": 2, "version_minor": 0 }, @@ -4213,7 +4213,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fcb8495dddb542309cbf7732abb0c2b4", + "model_id": "68de6ff3db714ccd81d1f394f826dc49", "version_major": 2, "version_minor": 0 }, @@ -4227,7 +4227,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "84ff80ef04974e83b73675ad95325008", + "model_id": "f57bc2a7ead04bc7af10b1840b5b4be5", "version_major": 2, "version_minor": 0 }, @@ -4241,7 +4241,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4d2ef534f71c4c8e9ac03b344a30713f", + "model_id": "397b145f390b4b27b32ad9a0767a86b5", "version_major": 2, "version_minor": 0 }, @@ -4255,7 +4255,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1221ee41f0a74fccb0c1f505faea8573", + "model_id": "4cea8f4a05d041f5a7c1b4ae9adbb859", "version_major": 2, "version_minor": 0 }, @@ -4269,7 +4269,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e661b375bdc43ffaabbd468405f304a", + "model_id": "f5e1c5c033664ac2b4003b62c8581663", "version_major": 2, "version_minor": 0 }, @@ -4283,7 +4283,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "82f6c6f36acc4c8986d899fc5a2a8e51", + "model_id": "159382e7fee848c4a8abaca5643473db", "version_major": 2, "version_minor": 0 }, @@ -4297,7 +4297,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9944aeb3c70442f586f9f917bcf0fef9", + "model_id": "0268662647874c95b302f70a2b732ca1", "version_major": 2, "version_minor": 0 }, @@ -4311,7 +4311,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bb0644b0c4a444d98372c7ea53a6e9bf", + "model_id": "1f1a2789c5934e238fc6db5c40183b6a", "version_major": 2, "version_minor": 0 }, @@ -4325,7 +4325,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "613863105dd34118b46b65aa06859f18", + "model_id": "f3fee684d4b343f98f125fe7a63b3a3b", "version_major": 2, "version_minor": 0 }, @@ -4339,7 +4339,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "52b236b170274c0fa7075f6b7f4cb289", + "model_id": "1963f60c1e154e9caa8fbaf3fc43dc45", "version_major": 2, "version_minor": 0 }, @@ -4353,7 +4353,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3c01f06274234b8c90f2663cd10e0958", + "model_id": "43110248c3fc42338824cf5eb43ba1a8", "version_major": 2, "version_minor": 0 }, @@ -4367,7 +4367,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fab845ac683f4f68a19218bc7ef3dab1", + "model_id": "16a9444896f14ffa8fc736f819648c60", "version_major": 2, "version_minor": 0 }, @@ -4381,7 +4381,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "acace0c6ccb445a588b511cafbbfb24c", + "model_id": "9c5c597a123d46d29f2b2a952f932be4", "version_major": 2, "version_minor": 0 }, @@ -4395,7 +4395,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23f5d4a7f5744c6296c28a831dd6db46", + "model_id": "48069692d16245e2ab3d90155a2382d1", "version_major": 2, "version_minor": 0 }, @@ -4409,7 +4409,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a9b5b9db23884343b28919ebdb45afd4", + "model_id": "45fc889b93d64db3b95e1ae77e287f78", "version_major": 2, "version_minor": 0 }, @@ -4423,7 +4423,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1aad82d19a841fb8e9e91232cdb9587", + "model_id": "dc2af12c62354da7b92ec3875d9cd546", "version_major": 2, "version_minor": 0 }, @@ -4437,7 +4437,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7d6f866e0825452480973514939afb12", + "model_id": "1bf97ac5bab24fb4b375044193bd765a", "version_major": 2, "version_minor": 0 }, @@ -4451,7 +4451,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3d6caec1224544859f718246af75b854", + "model_id": "a03464598d8b43de9aaeabd312753f9a", "version_major": 2, "version_minor": 0 }, @@ -4465,7 +4465,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b3431d6c90a4b57a911b92842027d5c", + "model_id": "78f27bbb09784832a00fdb657ed9095e", "version_major": 2, "version_minor": 0 }, @@ -4479,7 +4479,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5b1d5fb5a5bb433f9e653494e22ec825", + "model_id": "d8bc33a768774d6aad8c0664af89d15f", "version_major": 2, "version_minor": 0 }, @@ -4493,7 +4493,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3020699b949741c4b9200a8fbed9d142", + "model_id": "a6b673e1499b4042aeb59c0e4ede34e0", "version_major": 2, "version_minor": 0 }, @@ -4507,7 +4507,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "076eaa1264804ccb9e4904abd23fac44", + "model_id": "7ce727aa714b4467adf4a609689e46a7", "version_major": 2, "version_minor": 0 }, @@ -4521,7 +4521,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e3e42ba1a0334d2d9a44e17a95da494c", + "model_id": "8827bb442ac54ca290ecb3b856082db9", "version_major": 2, "version_minor": 0 }, @@ -4535,7 +4535,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b484b030562141cea5cfba175ce04efc", + "model_id": "c508b8a8edc7432f98435e1dec54457b", "version_major": 2, "version_minor": 0 }, @@ -4549,7 +4549,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2ad86849b3304f3fb02cb67d721e35c3", + "model_id": "c7220db700db41b0b12cc24325199a32", "version_major": 2, "version_minor": 0 }, @@ -4563,7 +4563,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "33eb0668d9fc43df89c6cdb4df03ad26", + "model_id": "5c41517d8d98418a89472f309d3cb748", "version_major": 2, "version_minor": 0 }, @@ -4577,7 +4577,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "91a5ad02f3e54a56a266779eab2a98f1", + "model_id": "4e69156cd0b94135965538e25a512b6d", "version_major": 2, "version_minor": 0 }, @@ -4591,7 +4591,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "312021b504344fc590991c735a9ff770", + "model_id": "266dd6fda35b457d8d10cc225ba8921f", "version_major": 2, "version_minor": 0 }, @@ -4605,7 +4605,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "12ddd16c4a744545afdd752d025e1f10", + "model_id": "38e93ff4e17a43feb7ae69709fd852b5", "version_major": 2, "version_minor": 0 }, @@ -4619,7 +4619,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f72b64fb873e458aae27283a015e94a3", + "model_id": "d2506b34b52f47419db03abdd26a2c30", "version_major": 2, "version_minor": 0 }, @@ -4633,7 +4633,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9dfd5d8d88694a608f906af4f4686a72", + "model_id": "7cc534f6abfd445eb51eb587f2d1609d", "version_major": 2, "version_minor": 0 }, @@ -4647,7 +4647,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fce43e93158d466da298470ba0cf45ec", + "model_id": "ce76c73b787249558d376a877c25662f", "version_major": 2, "version_minor": 0 }, @@ -4661,7 +4661,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7c0bd324671542129a36c51340b39108", + "model_id": "de9927ece403457d9add3a2608dbe7ec", "version_major": 2, "version_minor": 0 }, @@ -4675,7 +4675,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6d0fd75fe0ab451abb3557832f4acdc9", + "model_id": "ece60c3bd5cb42cf8dca6ab67bd50749", "version_major": 2, "version_minor": 0 }, @@ -4689,7 +4689,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1f7a91b164754ff4a9a9c8d3391a2ab2", + "model_id": "a947e155ece248e0a46cc23df2544ff6", "version_major": 2, "version_minor": 0 }, @@ -4703,7 +4703,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bacdea88d41a4af18ee11a6c701940f6", + "model_id": "bb5805cd32b64c03bbfe1a89148a2da8", "version_major": 2, "version_minor": 0 }, @@ -4717,7 +4717,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "36cd4234db4542248900672a0a96988a", + "model_id": "aba3bfb0c69f44cf9850d420a3dfd9cc", "version_major": 2, "version_minor": 0 }, @@ -4731,7 +4731,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac17bccbea3f403c924a1231d69d794f", + "model_id": "608dfd777e364ab2be28ab40649bb146", "version_major": 2, "version_minor": 0 }, @@ -4745,7 +4745,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9d04801bcd554a09af07720009b2f201", + "model_id": "1fdf5a66453e4760bc8d90c2242934cf", "version_major": 2, "version_minor": 0 }, @@ -4759,7 +4759,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "378614aeb5864d8d9c31f231ea28809e", + "model_id": "00c766e4f0a0493986c673270900be5c", "version_major": 2, "version_minor": 0 }, @@ -4773,7 +4773,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "64d9c8046b5f4dff9295faf441d757a9", + "model_id": "638be67449b74ba79bd6072f6c3a8a8b", "version_major": 2, "version_minor": 0 }, @@ -4787,7 +4787,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac2859cd2efc4194abcbedee5bc9822e", + "model_id": "64b9c151060444ada8311d78cd2b7b8f", "version_major": 2, "version_minor": 0 }, @@ -4801,7 +4801,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "684152ab83d34b45924ca6293361defc", + "model_id": "2dc81e71fb2e4c4cbfcefa2668c8cd81", "version_major": 2, "version_minor": 0 }, @@ -4815,7 +4815,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5c64536135d2496999d9e577b1da006e", + "model_id": "7d03aa69804640b985ab86a53e65b234", "version_major": 2, "version_minor": 0 }, @@ -4829,7 +4829,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "04970d9c33e94f329100474cf03c7587", + "model_id": "6b581a375a7f4a47abee3b33523d004f", "version_major": 2, "version_minor": 0 }, @@ -4843,7 +4843,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b82c019b979e43e9a917205c90182fc5", + "model_id": "80e0fdb3b69846879194dffa7fbdeff6", "version_major": 2, "version_minor": 0 }, @@ -4857,7 +4857,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a7820e7418214343822b52a672f7104e", + "model_id": "2030e5235c1b41b497f82b49641f285c", "version_major": 2, "version_minor": 0 }, @@ -4871,7 +4871,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b88af6ddfaac42e1975c3bf218a8b973", + "model_id": "b7d796734afd436caa253ef898d55e4d", "version_major": 2, "version_minor": 0 }, @@ -4885,7 +4885,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cfb654605f2142c58c7bc7d3eaf169de", + "model_id": "172aade289ea4627b7942586efb2fbc9", "version_major": 2, "version_minor": 0 }, @@ -4899,7 +4899,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "883659cd501e45e5b8a825d70544bf85", + "model_id": "54ebda1cba4a40b192f6f4ef9a3b00a4", "version_major": 2, "version_minor": 0 }, @@ -4913,7 +4913,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "72b6574bb6094413a17cedeaacd1d6ca", + "model_id": "6a453fa17a9f4a32a4f607a82e80af22", "version_major": 2, "version_minor": 0 }, @@ -4927,7 +4927,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "153997d8f2ae449fb715af384ae6b16a", + "model_id": "c9116c30859b44a8a2dc5cad2552f16c", "version_major": 2, "version_minor": 0 }, @@ -4941,7 +4941,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d9e3bb5ec59941b88f78688885eb9814", + "model_id": "b7ecbfd69f234d0797860ca083c89262", "version_major": 2, "version_minor": 0 }, @@ -4955,7 +4955,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f388b33fe594464c99b47951844b031c", + "model_id": "22ea6e4f5b7b4ccdb1d29b6d35c2b3a3", "version_major": 2, "version_minor": 0 }, @@ -4969,7 +4969,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aca3970042de47d7a085931082ea328c", + "model_id": "cc1945c0c79d47058079175f9dd20593", "version_major": 2, "version_minor": 0 }, @@ -4983,7 +4983,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7c214636ba4a449184e9113ee7552787", + "model_id": "598025c33a604eca8d46168ea45fa21e", "version_major": 2, "version_minor": 0 }, @@ -4997,7 +4997,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "19f795c0fc224701b0b0b6cc290f0e19", + "model_id": "e861dde21a974ed28e4d3be037b68d95", "version_major": 2, "version_minor": 0 }, @@ -5011,7 +5011,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "055ccd0156234e6f8f3a5159cdfdb7eb", + "model_id": "8301daac297b448d9eed8915e286848a", "version_major": 2, "version_minor": 0 }, @@ -5025,7 +5025,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "491101371c2044128804bcaecac4e6ee", + "model_id": "a5dd7706eb3941b29c56dd5fc3db7710", "version_major": 2, "version_minor": 0 }, @@ -5039,7 +5039,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5808da4119a54482aab9ba78a0a0bd53", + "model_id": "7d7a4dd93ecd47a08b069a42b3bf8603", "version_major": 2, "version_minor": 0 }, @@ -5053,7 +5053,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e3e02689c2ad4ce08b6dd1bd561cc23a", + "model_id": "1a54befd16ab41758f1e05381c427390", "version_major": 2, "version_minor": 0 }, @@ -5067,7 +5067,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "85a6f32bee804514a882847f7ee8616d", + "model_id": "da48699f51c1473fac6598b08bf0d759", "version_major": 2, "version_minor": 0 }, @@ -5081,7 +5081,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "81454538556c40e284c70cb8c59aca40", + "model_id": "f7df3d3facf8499da41704f119c49c5c", "version_major": 2, "version_minor": 0 }, @@ -5095,7 +5095,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3ff2ce2d06eb48b5babcd4fecc2fcb64", + "model_id": "52862316989341729ed66354ea7d4f00", "version_major": 2, "version_minor": 0 }, @@ -5109,7 +5109,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "148d80375e9340839c12d7d3ca860692", + "model_id": "b4f24895116e4c8f93348fb731b6feaa", "version_major": 2, "version_minor": 0 }, @@ -5123,7 +5123,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c6ede2c515534837879ac00f58442ef0", + "model_id": "708713b41b8d42ec8a49b688ab57f266", "version_major": 2, "version_minor": 0 }, @@ -5137,7 +5137,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6c0c0dc54bcd4c55a16af6fad4106966", + "model_id": "de69bde5fdd74462bae2985f9f189303", "version_major": 2, "version_minor": 0 }, @@ -5151,7 +5151,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e0f23c07c114926b3afdab403ae276d", + "model_id": "e6b5247d915c4b2bbe3396ad676e5afc", "version_major": 2, "version_minor": 0 }, @@ -5165,7 +5165,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6ed86f7def2b401688fae36e26709cc2", + "model_id": "2aaa09bf01fd410e8e0a6b4f58eb653f", "version_major": 2, "version_minor": 0 }, @@ -5179,7 +5179,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9569e7ccda484449a749224546314c96", + "model_id": "bb627cd1f30a4da4b93dc090acadb543", "version_major": 2, "version_minor": 0 }, @@ -5193,7 +5193,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "42a1860d1ab34500b7cc907fddb49807", + "model_id": "e6bed0fb191c44b9baa1ccd97d70945b", "version_major": 2, "version_minor": 0 }, @@ -5207,7 +5207,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77056a00640b4ee78890533cd37acd40", + "model_id": "c249948a15db4338b65d8b8fa46116a8", "version_major": 2, "version_minor": 0 }, @@ -5221,7 +5221,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "36b2bdb35fc748c7bab75814d5ab133a", + "model_id": "e00ef426567040b2aee8a1487456ca73", "version_major": 2, "version_minor": 0 }, @@ -5235,7 +5235,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "beb6bc88f7cb4ddb8cdb228ffde6fdbe", + "model_id": "812ae7b6007f47e8ae7e4393f8387adc", "version_major": 2, "version_minor": 0 }, @@ -5249,7 +5249,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a477b75e79a5470cbf70e5dbd2be98ec", + "model_id": "8685b5dcdfc04a81a44a0515823aea3e", "version_major": 2, "version_minor": 0 }, @@ -5263,7 +5263,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a27aae3ed13242ea894a6bc825e33455", + "model_id": "b11d4169a6744e22b1b03dbc16d56525", "version_major": 2, "version_minor": 0 }, @@ -5277,7 +5277,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1b6162fa66a04a60aca804d5db924986", + "model_id": "23d591fcb3a445ad8b2dde0781f208fa", "version_major": 2, "version_minor": 0 }, @@ -5291,7 +5291,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a82349dbf38489eb9fa7d279d982fdc", + "model_id": "1f1b30a9ce9b451489e5f74cb3a5ede5", "version_major": 2, "version_minor": 0 }, @@ -5305,7 +5305,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a24caf386bae455d9fc548ba6b238464", + "model_id": "14d93f541e8a4343a653d2feae47c901", "version_major": 2, "version_minor": 0 }, @@ -5319,7 +5319,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "80a37cb568544b83a98d177ebddd3961", + "model_id": "143077904ce5404f8cf629cb94ef6ae1", "version_major": 2, "version_minor": 0 }, @@ -5333,7 +5333,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aca35dd72fea4264a32744051cb220dc", + "model_id": "a6840246bf56446bbf1ef948301a76a2", "version_major": 2, "version_minor": 0 }, @@ -5347,7 +5347,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d70520d909394f78a3e03e9a4e62e312", + "model_id": "7449670c75324f379955d2b98efe8fa2", "version_major": 2, "version_minor": 0 }, @@ -5361,7 +5361,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "79f7adb653fb43e38dfe0572c129fd73", + "model_id": "4dcdef9b15124c00b6e5ea44814f3eb7", "version_major": 2, "version_minor": 0 }, @@ -5375,7 +5375,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8908c8f8639f48e0a8f6a0f803834aca", + "model_id": "8dbb7943126943369aa4c5fa0b16ef85", "version_major": 2, "version_minor": 0 }, @@ -5389,7 +5389,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "faac8a01063f4f2d92e1987389283ce8", + "model_id": "f7b155ece917486a9c54f6ff5c257e3e", "version_major": 2, "version_minor": 0 }, @@ -5403,7 +5403,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "452dd51e2203411cbd60429c4e89e5cb", + "model_id": "4214f7844a8c44719037e4a7d3d62654", "version_major": 2, "version_minor": 0 }, @@ -5417,7 +5417,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2012c72d90c94407aa728c1b63984459", + "model_id": "c8b90eb65f934b539dcf73fef028d01b", "version_major": 2, "version_minor": 0 }, @@ -5431,7 +5431,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cafd1fa414064e209a4f39d31c97cb1e", + "model_id": "ec31a994837047e2b9f4d03119115b34", "version_major": 2, "version_minor": 0 }, @@ -5445,7 +5445,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf108bda545a43c2a021b588abaf8715", + "model_id": "26d9595c9f9f48a0911ec0f8e8207e67", "version_major": 2, "version_minor": 0 }, @@ -5459,7 +5459,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d3281a6ca7e4ba793938032557ccd41", + "model_id": "eb00e3323a744f9ea406a917dc02e1cd", "version_major": 2, "version_minor": 0 }, @@ -5473,7 +5473,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7b9e435879e64c67a43608276b3f7211", + "model_id": "86d72844bd344a5e99559a94c363da4d", "version_major": 2, "version_minor": 0 }, @@ -5487,7 +5487,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8120c142471c4c2eb2363b1feb9f4765", + "model_id": "16e2edc3adab409998b9799fdb7ee28e", "version_major": 2, "version_minor": 0 }, @@ -5501,7 +5501,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6000261814ba4aafb325e880ea3d593b", + "model_id": "9d26da6d8f374c7aa2341fa472af63f9", "version_major": 2, "version_minor": 0 }, @@ -5515,7 +5515,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0369a0d448b4fd2b012f953836ffc18", + "model_id": "11a129452a654c299cdd690471f932d8", "version_major": 2, "version_minor": 0 }, @@ -5529,7 +5529,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2169e70bb84d4536a6a48e2f8d7fea2e", + "model_id": "cefcb0c1acd44f0d84b342b1677a619b", "version_major": 2, "version_minor": 0 }, @@ -5543,7 +5543,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b4b23f5d25574ed8b04d7188e87aac40", + "model_id": "c6fd20c98b4c40b0b6401a2b27f0cac7", "version_major": 2, "version_minor": 0 }, @@ -5557,7 +5557,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f4cf62f2331344728b1ccb2c05af6481", + "model_id": "73c5d0bbb74e43d896113bd26307a109", "version_major": 2, "version_minor": 0 }, @@ -5571,7 +5571,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77e7c09c3ed44f78910947e3e2253158", + "model_id": "1268e1dfc97f4fe7bafc5fba6427fed9", "version_major": 2, "version_minor": 0 }, @@ -5585,7 +5585,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "38008bed37894163bc01fce4736de989", + "model_id": "16a75cf45f0f45f7989d85f2e46d16fa", "version_major": 2, "version_minor": 0 }, @@ -5599,7 +5599,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ead3cc106c24438286ccc90b1114cbe7", + "model_id": "1700ad4e700b4d60bf43651d3c096168", "version_major": 2, "version_minor": 0 }, @@ -5613,7 +5613,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5e9efc937a7f477790d00fcfe7179488", + "model_id": "4d87cfe06749449cad282046203dcce7", "version_major": 2, "version_minor": 0 }, @@ -5627,7 +5627,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "97e86785caca4c0481e3b5bb4bc4e0d5", + "model_id": "37f2fb00170b47b08b7684969a29e762", "version_major": 2, "version_minor": 0 }, @@ -5641,7 +5641,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "320b2230f6b84220a895f29efd6bf0e4", + "model_id": "b9166d7879fc418ba72db8e137980a8c", "version_major": 2, "version_minor": 0 }, @@ -5655,7 +5655,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac3e0b2d24314fa5b1b0f96f92294a4a", + "model_id": "375e4120bce54f7ea46ab151eb0f3d8b", "version_major": 2, "version_minor": 0 }, @@ -5669,7 +5669,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6ec4d5714164536b4a391f72b9aa801", + "model_id": "7f8048e858a2467199777d043a1e879b", "version_major": 2, "version_minor": 0 }, @@ -5683,7 +5683,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "50b2c526f9174e85a28f7d58bc86798a", + "model_id": "1990cf7b68a044dfabf0471a1bf50542", "version_major": 2, "version_minor": 0 }, @@ -5697,7 +5697,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "39a00da6ea3d4dea8b723f53a37a8b34", + "model_id": "3ede20ab7c314ab2aa6f800385de2c53", "version_major": 2, "version_minor": 0 }, @@ -5711,7 +5711,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "db1adffc091b41c0bafd97e7db841a9b", + "model_id": "fcf3e6bcd3ea4fa3b94b3ce9c9c20772", "version_major": 2, "version_minor": 0 }, @@ -5725,7 +5725,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "01cec95a112a4020bb4ef04ecc7be058", + "model_id": "2fc7010c78704be0adf0c66689895e69", "version_major": 2, "version_minor": 0 }, @@ -5739,7 +5739,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "94dead395e15492c871fa36e2eb205a0", + "model_id": "9b5432a0bc9140c7a3809c234593376b", "version_major": 2, "version_minor": 0 }, @@ -5753,7 +5753,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b1724d1bfae94d4d86fd96c8c5e1bf7d", + "model_id": "8d85becf86574641ba2d08d2818bafe5", "version_major": 2, "version_minor": 0 }, @@ -5767,7 +5767,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b1026a9728f4033970f0758ce9e4cb9", + "model_id": "e04585ab90a041739f071a3c8d1ec861", "version_major": 2, "version_minor": 0 }, @@ -5781,7 +5781,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3d7710a168eb43a6816a4dcb1bd217dd", + "model_id": "d76eda4640fa4b099252429e87ae0850", "version_major": 2, "version_minor": 0 }, @@ -5795,7 +5795,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b81d351ab45a48fd986ae7dd75feb162", + "model_id": "af7bb05044ae4f85beab6ba65e27f7ec", "version_major": 2, "version_minor": 0 }, @@ -5809,7 +5809,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "874fefab9b4043ff920def1ea4eb084c", + "model_id": "111306b4b8da46dab26455e0ccee1e8c", "version_major": 2, "version_minor": 0 }, @@ -5823,7 +5823,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f540b67f8c2b44f38331d387c353b84b", + "model_id": "71bf30996d1b4cdc83e48cb0beba3f5d", "version_major": 2, "version_minor": 0 }, @@ -5837,7 +5837,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b276bd3edde54329aa9d69eb75a04bdb", + "model_id": "bfefb0559c46425ab4e9f87ab78bec94", "version_major": 2, "version_minor": 0 }, @@ -5851,7 +5851,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4fd4a32ad3724df6a41929267d6d523f", + "model_id": "014386341c00413da3e1003a3038afb6", "version_major": 2, "version_minor": 0 }, @@ -5865,7 +5865,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a73d840ae3624bc0b11c70932c5bff7e", + "model_id": "8b7601a12a6449baaea43ef12860f780", "version_major": 2, "version_minor": 0 }, @@ -5879,7 +5879,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1a229b8cb3e343f1bd1f8351e778519c", + "model_id": "40e890bc487d4689b85fd1d59c572e31", "version_major": 2, "version_minor": 0 }, @@ -5893,7 +5893,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6b3ede68a43448efb39e33eb6a8e0614", + "model_id": "3d6fd70cf6f140c2921c94388f45ef8c", "version_major": 2, "version_minor": 0 }, @@ -5907,7 +5907,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ecfc3cd4ff854973b0cb7b97beed11cb", + "model_id": "352be1139e6a469da30390a587c011c4", "version_major": 2, "version_minor": 0 }, @@ -5921,7 +5921,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ec215c1a175d4507b9f826c24fa597b3", + "model_id": "236b3c09035a441b8bd74b179b542b42", "version_major": 2, "version_minor": 0 }, @@ -5935,7 +5935,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "285a7a7b1aa346f5b1ab83a43b74dabf", + "model_id": "9dc467c9f88e44b784b3a718fbbb94a4", "version_major": 2, "version_minor": 0 }, @@ -5949,7 +5949,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "55cca5185b6444f99011a55c7d94667c", + "model_id": "3eba2686eb364235b7b10bbb82b2dc8c", "version_major": 2, "version_minor": 0 }, @@ -5963,7 +5963,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6718386ddbbf4dd09ed6ffa3e2303b27", + "model_id": "d7ce628a95b84926a77cdd8d862610a0", "version_major": 2, "version_minor": 0 }, @@ -5977,7 +5977,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2f92de6c8cfa42ed8b3081cad06445c9", + "model_id": "1a08a776c8814146b2439d2a4fb56abc", "version_major": 2, "version_minor": 0 }, @@ -5991,7 +5991,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7e55429fabd044f18c064af48ac1686b", + "model_id": "4c8427d6a73e4104b61162179aed0caa", "version_major": 2, "version_minor": 0 }, @@ -6005,7 +6005,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8c47e1a8805d43ed934555750b9a524f", + "model_id": "075d6d7a07104a9fb2d1bb5b4034968d", "version_major": 2, "version_minor": 0 }, @@ -6019,7 +6019,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5bbfaa3e70824e02bab2bca1361ee58c", + "model_id": "90897a5278fb4d4881ea4a57bc0a8776", "version_major": 2, "version_minor": 0 }, @@ -6033,7 +6033,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c24b5a125ef04487bbeb216d06a1ba00", + "model_id": "cb8dcc00808b43c2945dac2d5487ff6c", "version_major": 2, "version_minor": 0 }, @@ -6047,7 +6047,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5fce0e038b5d4087a292ec910c37d4cf", + "model_id": "32a6699f91e0432c98b948a45b312464", "version_major": 2, "version_minor": 0 }, @@ -6061,7 +6061,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f7e773815aa6421283c29b90908375db", + "model_id": "fe61fc1076634d64a2a66b506d645dd5", "version_major": 2, "version_minor": 0 }, @@ -6075,7 +6075,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "005545adb0994e018e24781d5d6c1b2f", + "model_id": "7e865f22b9ed406a97454d99ec76fde9", "version_major": 2, "version_minor": 0 }, @@ -6089,7 +6089,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5ba4c726a5b74e748296086f1027f3b1", + "model_id": "673b5df2081f41a4b08da1c18dbae1c6", "version_major": 2, "version_minor": 0 }, @@ -6103,7 +6103,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4c992d822724793920314931ce344ca", + "model_id": "34c216e97c284f2f8ed198e93527fd1e", "version_major": 2, "version_minor": 0 }, @@ -6117,7 +6117,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b110765ac41e460f9221bb453261c16d", + "model_id": "2f7b1d9974da47a685337a42880ad0b1", "version_major": 2, "version_minor": 0 }, @@ -6131,7 +6131,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96880effcfd14268b87764db86be716f", + "model_id": "e8f78db738f146cf8755ea9eb0bcaf6e", "version_major": 2, "version_minor": 0 }, @@ -6145,7 +6145,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "84bfed11b4614cbb89c098604ff53aeb", + "model_id": "851cc5f5d4c14bcfbc41d1bd39679d25", "version_major": 2, "version_minor": 0 }, @@ -6159,7 +6159,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3e2095aa1e284f13a4e891d84010fbdd", + "model_id": "61287d8be5f3428d8ed713f05bb950e9", "version_major": 2, "version_minor": 0 }, @@ -6173,7 +6173,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aac914a3ad1d466c8a623f75c75cb5c8", + "model_id": "3b35b79ef05649e88de9ab0d58e2f754", "version_major": 2, "version_minor": 0 }, @@ -6187,7 +6187,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "034afa0437b74592ba16e9ef51e411ca", + "model_id": "8bb9076f567744d2a3f7ec34122bc9d8", "version_major": 2, "version_minor": 0 }, @@ -6201,7 +6201,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9ea5d15066e94c5bae24b98beda886b0", + "model_id": "a59ec4ce7aea42f2877d90687aba69df", "version_major": 2, "version_minor": 0 }, @@ -6215,7 +6215,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96890bf0241f4c5ea4fc6d254104fe34", + "model_id": "94910f66f2e94d0499bc48dfb8ec0203", "version_major": 2, "version_minor": 0 }, @@ -6229,7 +6229,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "811059bbc3ff41b6b8c959ce968f5c10", + "model_id": "9a1d06a6ca5842df8da18ab6c3f5b327", "version_major": 2, "version_minor": 0 }, @@ -6243,7 +6243,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d69d21d955c0448d9fb762336a00e16f", + "model_id": "c1c9a5bdfd60460799e6e258a713f8fc", "version_major": 2, "version_minor": 0 }, @@ -6257,7 +6257,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7082ad19cb1f410b8566d498b8298f36", + "model_id": "8c118d246c3b429198415dee17489cbf", "version_major": 2, "version_minor": 0 }, @@ -6271,7 +6271,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ad55f83d01824a598dffb3cdd5521694", + "model_id": "81e837a0684f4334b43556494ee7c081", "version_major": 2, "version_minor": 0 }, @@ -6285,7 +6285,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f8b94f4c7b84abe8ce74fa1cf62fe65", + "model_id": "7290f89e37ad4d619baea5156d760be9", "version_major": 2, "version_minor": 0 }, @@ -6299,7 +6299,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "12a75d72d0c941caada0bb2bdd17a573", + "model_id": "c88646bebf8e45e0a08c75148e231015", "version_major": 2, "version_minor": 0 }, @@ -6313,7 +6313,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "baaf5b1baff44e56aee4142bdfd47820", + "model_id": "0ce8f4e4e26d4c66994c2f12ade6bda0", "version_major": 2, "version_minor": 0 }, @@ -6327,7 +6327,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd4429cc6b70411f8ed54b901ebcf12f", + "model_id": "4e3ff4e500b4446f90f6ec49e1b4aa2f", "version_major": 2, "version_minor": 0 }, @@ -6341,7 +6341,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5e36e33e83d4405cbf63638b8bd77fb0", + "model_id": "86a3792ff7274f4cacf40413b60a49ac", "version_major": 2, "version_minor": 0 }, @@ -6355,7 +6355,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e6b697a008274e06b1aa53370be9bc3a", + "model_id": "4090725ce7c44276bd000a0fc5ac1d3f", "version_major": 2, "version_minor": 0 }, @@ -6369,7 +6369,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eb8ecc077f624e74aafae3fc076c69eb", + "model_id": "9b5610845083442eaf120968659ea106", "version_major": 2, "version_minor": 0 }, @@ -6383,7 +6383,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "53efd3b45aad4c41965be328c9b187e5", + "model_id": "2a00f7f15fd5481aa4c16eb8f60eef01", "version_major": 2, "version_minor": 0 }, @@ -6397,7 +6397,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9553f15a37d6421989a71b15cd4bb2a0", + "model_id": "2c1699c4d692410b98507b43feb3146d", "version_major": 2, "version_minor": 0 }, @@ -6411,7 +6411,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "534bf714c87347dca2a4778c8a2345d8", + "model_id": "901c461053684576bfc856799cb6b2d5", "version_major": 2, "version_minor": 0 }, @@ -6425,7 +6425,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c3b07e6fc35c4c738c508e15e4e9aa34", + "model_id": "a10cf3b24ecc465abd21551928b7136d", "version_major": 2, "version_minor": 0 }, @@ -6439,7 +6439,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "439ea4786af447ff98f7814e9c69fdfb", + "model_id": "3610d7351f9d41e0b977118ab6ee56c2", "version_major": 2, "version_minor": 0 }, @@ -6453,7 +6453,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8085f4280c4a431dbbdbeb48c2a9ca1b", + "model_id": "db53bfff95174944acccbcbf698ebfdd", "version_major": 2, "version_minor": 0 }, @@ -6467,7 +6467,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bb7193c49aea4cbe9bc3ec24ef42095e", + "model_id": "dedb113437da42d7b159cf4ca8466b73", "version_major": 2, "version_minor": 0 }, @@ -6481,7 +6481,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9a70e100969f4d89a8c176fcc85515f6", + "model_id": "ad598560dbb4464b85659a8983f31cf6", "version_major": 2, "version_minor": 0 }, @@ -6495,7 +6495,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "189213aa5c724b8b81262a0706033211", + "model_id": "9910452e47e043baa1765043c45bc62a", "version_major": 2, "version_minor": 0 }, @@ -6509,7 +6509,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4495b83206b348ea9ab95897f70b7db9", + "model_id": "2f27097cfca14312ae4470def93c8284", "version_major": 2, "version_minor": 0 }, @@ -6523,7 +6523,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5105e54d5804448594df67f7b96bcaa9", + "model_id": "cab3acf1ca434fcebfdfd59cedd36d18", "version_major": 2, "version_minor": 0 }, @@ -6537,7 +6537,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e965a4c58fe04ff7b24108ce2ccfeb65", + "model_id": "e74bc19d80614490b9a4e9724d2bc3a2", "version_major": 2, "version_minor": 0 }, @@ -6551,7 +6551,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bc16bc8f7359425fb20ff7285bc37dae", + "model_id": "3257fc92786c4093985d4b23172c4384", "version_major": 2, "version_minor": 0 }, @@ -6565,7 +6565,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "416d9ec7a7de4d7f90c9bc7c142aedbd", + "model_id": "65e58b5258834e70aa5cc272c946d0ff", "version_major": 2, "version_minor": 0 }, @@ -6579,7 +6579,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "96900fe731f04a7b915b98adba72da26", + "model_id": "0f0dc87db97d4715a3bf2eb6f020cdf9", "version_major": 2, "version_minor": 0 }, @@ -6593,7 +6593,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ceeb94fe463c4f94bb616ddccd524ed9", + "model_id": "4de6486d02cb48889390f324d06929fa", "version_major": 2, "version_minor": 0 }, @@ -6607,7 +6607,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3fa0933c31a8428e820cbe6fd392fbc1", + "model_id": "27a58fe0032c4022b351bc654ef4b093", "version_major": 2, "version_minor": 0 }, @@ -6621,7 +6621,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6b727cbac347436d8e34a729284a12f5", + "model_id": "a9ff2df346204e4b88711028bd337686", "version_major": 2, "version_minor": 0 }, @@ -6635,7 +6635,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9b34dd87ad874a1fa584ab2bfd88a7ea", + "model_id": "73f85e7dbdf948f0b3468f0dd24e3b17", "version_major": 2, "version_minor": 0 }, @@ -6649,7 +6649,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a061ff977f0340659c8f11598478d6f4", + "model_id": "1a3dc09705e1464199b3b5f7b235cb2e", "version_major": 2, "version_minor": 0 }, @@ -6663,7 +6663,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "960cc8cfa7ac48179188025ea2c36a2f", + "model_id": "c2a06a02ff224bd1a2afce8f21b7cfba", "version_major": 2, "version_minor": 0 }, @@ -6677,7 +6677,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d322be81712a42e2bf0f942d8efb8d58", + "model_id": "acbcf83736634ad6b4aea3d7bd6c272c", "version_major": 2, "version_minor": 0 }, @@ -6691,7 +6691,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9cc1c8c785f64372971decf10fef2672", + "model_id": "1150de44c5f24f9d97b874cc195b4574", "version_major": 2, "version_minor": 0 }, @@ -6705,7 +6705,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e538589aae6f4f03affc1f36af5d6af2", + "model_id": "187be90c654e4c7f8f2cd107624ce0af", "version_major": 2, "version_minor": 0 }, @@ -6719,7 +6719,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f8436f0d8eb74bf1b3696ba2b94c214d", + "model_id": "332667a2e79d4a04a158da75a7b456d5", "version_major": 2, "version_minor": 0 }, @@ -6733,7 +6733,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f91384d7f12b493da7175a1988697f39", + "model_id": "dc2e3a76a6694f19be8d5f03bad7f16c", "version_major": 2, "version_minor": 0 }, @@ -6747,7 +6747,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8751bb11bd164b6cb53a16d2016bc781", + "model_id": "d6764a2e5dee4f0a90f87651a75e0c16", "version_major": 2, "version_minor": 0 }, @@ -6761,7 +6761,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2448bbdc8c1a46fbaf2ca34abca3d235", + "model_id": "0b20e378670a46f1ab8c00f7def68c6e", "version_major": 2, "version_minor": 0 }, @@ -6775,7 +6775,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c54263444147406083bc85d51da56b53", + "model_id": "711692f069aa4671bfc9da205c0636f7", "version_major": 2, "version_minor": 0 }, @@ -6789,7 +6789,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "822907da383144eab6433d0a996037f5", + "model_id": "c704cd2007844d398d1ccc980965dd59", "version_major": 2, "version_minor": 0 }, @@ -6803,7 +6803,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "639396b7c8144b86a49594bde86ca470", + "model_id": "be935e56337743f8b889b550386ee273", "version_major": 2, "version_minor": 0 }, @@ -6817,7 +6817,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4322b3cde073492fb2761751d7a936ff", + "model_id": "a483cb2a1cfd43cfb48d100fff0a140b", "version_major": 2, "version_minor": 0 }, @@ -6831,7 +6831,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "561319f0871d4a1994478fe70df81c67", + "model_id": "554b30661bab4e8897e5c849c8707571", "version_major": 2, "version_minor": 0 }, @@ -6845,7 +6845,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7bee085dbcb340f6be69a4d9ee80e7d1", + "model_id": "3450f0ba662a453eb2a2b738362421d5", "version_major": 2, "version_minor": 0 }, @@ -6859,7 +6859,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "050b6a9359ca42869cd60744b12ea170", + "model_id": "78d9eca4985c4cb38d6ea3610768e916", "version_major": 2, "version_minor": 0 }, @@ -6873,7 +6873,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b1e5cf397e944fe58abf6f51c8f73602", + "model_id": "a9ab0d10dfd849ea8d07bb376237dd7b", "version_major": 2, "version_minor": 0 }, @@ -6887,7 +6887,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6a0f2aef822845f8a7438a20e4f3bc22", + "model_id": "3a57a95413c24c62ab571f4eb768225d", "version_major": 2, "version_minor": 0 }, @@ -6901,7 +6901,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1b7978c301d148398cf2e16d172f0317", + "model_id": "0ff99c5b1d8141e3a426c32c1771aaaa", "version_major": 2, "version_minor": 0 }, @@ -6915,7 +6915,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3d595c84836242d78a0d2c5746025003", + "model_id": "ec24eb5bf14245e089df6e9af8040ca5", "version_major": 2, "version_minor": 0 }, @@ -6929,7 +6929,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a019d92f4f394e79ba72096a004ed2ea", + "model_id": "1f41f7c3e9c747f4990379ec7b477ea0", "version_major": 2, "version_minor": 0 }, @@ -6943,7 +6943,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eff6a182cd274c758fe5ce58880dd278", + "model_id": "d037d612e8d6420d88221e755c1cf181", "version_major": 2, "version_minor": 0 }, @@ -6957,7 +6957,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3543bd115ee4e04a772a2ce7725eae9", + "model_id": "a1a42a5360f94936854b2df811ed078f", "version_major": 2, "version_minor": 0 }, @@ -6971,7 +6971,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "139dc134ad0e470b826484f5a086efab", + "model_id": "aadcf857e1cd4b54bf02be860d691eff", "version_major": 2, "version_minor": 0 }, @@ -6985,7 +6985,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5a55c510960641d0a93d113e5e99f856", + "model_id": "9f32d477c1ea48919e4beb4af68595b8", "version_major": 2, "version_minor": 0 }, @@ -6999,7 +6999,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe854ed37b3c4672b46acdc7a38a7a38", + "model_id": "685dd5528b8c4dd99a340d503e284520", "version_major": 2, "version_minor": 0 }, @@ -7013,7 +7013,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3c3cf0ad470f4807bc36da7d2b760034", + "model_id": "b16b61bf11814be8befd2f85bfec36c7", "version_major": 2, "version_minor": 0 }, @@ -7027,7 +7027,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c533ddceeba047e2bf262d2495774ce6", + "model_id": "b2e470d296f44fa19f979692f9521b8c", "version_major": 2, "version_minor": 0 }, @@ -7041,7 +7041,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7eb84aec388a405295a9a48522d1bf95", + "model_id": "77bb18ae0e794a85aebdc1dc0d4e1267", "version_major": 2, "version_minor": 0 }, @@ -7055,7 +7055,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6994676eb04b4eb78e787d2279a8234a", + "model_id": "bec58380f7dc4fb8a7c2798d129df299", "version_major": 2, "version_minor": 0 }, @@ -7069,7 +7069,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1837b5a1c88a45ffa9792b8a1c59a919", + "model_id": "d585a576cd204665991400f4bae80843", "version_major": 2, "version_minor": 0 }, @@ -7083,7 +7083,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b6ec42e5ecfe410bbe117b256e69e1a5", + "model_id": "9f91076113f64deb850e6917a42248e1", "version_major": 2, "version_minor": 0 }, @@ -7097,7 +7097,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "337c22013a154934b62d23c6944c1381", + "model_id": "e1220fdea85f4ab28a8c8babfe6a575d", "version_major": 2, "version_minor": 0 }, @@ -7111,7 +7111,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d7d8e27499dc4a10bb2855ea8af131f9", + "model_id": "af41e763a89444ce9382a3b6e3a41777", "version_major": 2, "version_minor": 0 }, @@ -7125,7 +7125,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d9fe4c158b7b4a78af596d8413d3dffc", + "model_id": "d6b216a972d249db9c0663e89393bfee", "version_major": 2, "version_minor": 0 }, @@ -7139,7 +7139,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4b51438225b847fba5d21a4e338a337d", + "model_id": "8c9d148e34f8486bb50200d73aafc991", "version_major": 2, "version_minor": 0 }, @@ -7153,7 +7153,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "30d6dee412944963ba963e25d9b9c782", + "model_id": "ad4cf0fcdbcf473f89971665d50ad633", "version_major": 2, "version_minor": 0 }, @@ -7167,7 +7167,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b67ff883f4c4180b67969116671612f", + "model_id": "087bf482a56c4c2eaa9074d73c56c7cc", "version_major": 2, "version_minor": 0 }, @@ -7181,7 +7181,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11e012196bd849a5a772b6acbacba02d", + "model_id": "a5bdaa5660b24686a85a33fb088cfdb0", "version_major": 2, "version_minor": 0 }, @@ -7195,7 +7195,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23fc0b4d978940b98d6f530a4433fdfb", + "model_id": "2466c587b36b4bef8f281b47d2862f16", "version_major": 2, "version_minor": 0 }, @@ -7209,7 +7209,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf39196c4329403e85ea5f578987c938", + "model_id": "c728d122f4164d02892f6ff48787e5e2", "version_major": 2, "version_minor": 0 }, @@ -7223,7 +7223,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4ab7a42f207f45029abc2be786fb4505", + "model_id": "9a461960f82841c5bf189c7876133895", "version_major": 2, "version_minor": 0 }, @@ -7237,7 +7237,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ddb53c1c0a5c4e0a8cd251731b003971", + "model_id": "474feaa123ef4082b0b28163d0560f9f", "version_major": 2, "version_minor": 0 }, @@ -7251,7 +7251,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f8b0635f17d43558dc176a7ff8789cf", + "model_id": "711fa096a99142d5a53fd6800578d5f4", "version_major": 2, "version_minor": 0 }, @@ -7265,7 +7265,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d5c38fb8a81644b7a5284c487179ac64", + "model_id": "52d3e1ac972b42359558562e614421bc", "version_major": 2, "version_minor": 0 }, @@ -7279,7 +7279,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5b595c656c3f4b0b9a1b9aa3ca86fe94", + "model_id": "8aba5dd9615c45a6941c75eb7508eec4", "version_major": 2, "version_minor": 0 }, @@ -7293,7 +7293,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9d52d0f41c8d471db77c19e44c4b6c56", + "model_id": "d52c73fc0e904bb5a3c545b1efd0d03a", "version_major": 2, "version_minor": 0 }, @@ -7307,7 +7307,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6491f12bce74bfb8ec9562e260cecd1", + "model_id": "728da7b5f37441de8902f2ffb25f2404", "version_major": 2, "version_minor": 0 }, @@ -7321,7 +7321,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5fb0aaec53db42ffb2cefe4cdde45dda", + "model_id": "c049407a7b454f48b264bb3c4f10ae60", "version_major": 2, "version_minor": 0 }, @@ -7335,7 +7335,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1aaef74bd2944aea8fe98001c1da02f0", + "model_id": "53aee0a855934fcfab001acb48434b03", "version_major": 2, "version_minor": 0 }, @@ -7349,7 +7349,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d432f1b9ed024a66b3a8b94be6284fa5", + "model_id": "e41d6997834a4dd7bf015875d013f73f", "version_major": 2, "version_minor": 0 }, @@ -7363,7 +7363,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f3a28b2d47be4e029c63a158862af15e", + "model_id": "dff552517acf4fccbe8dc6b0717f807f", "version_major": 2, "version_minor": 0 }, @@ -7377,7 +7377,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8d3573cc36dc47d4b0e29674502382d0", + "model_id": "89b322f359c349cf88fc244d88b4e8fc", "version_major": 2, "version_minor": 0 }, @@ -7391,7 +7391,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0a15c68470284e05b3e4f0f4a65f1214", + "model_id": "3476b84f94c640f88f3e9bcaf08bee97", "version_major": 2, "version_minor": 0 }, @@ -7405,7 +7405,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "921c9d2e8b5c4b37901e036e9102255a", + "model_id": "5c49cf574cf14995baa1e79ab08f8a4a", "version_major": 2, "version_minor": 0 }, @@ -7419,7 +7419,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "530678bf3e2a4f4199efda4ac8f0c5c5", + "model_id": "0622e34335504bf29f7ba560c8674d6c", "version_major": 2, "version_minor": 0 }, @@ -7433,7 +7433,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "464c612deb234500a932681a731c9ebd", + "model_id": "35713bbf0a4e4da1b784c904f364a8f1", "version_major": 2, "version_minor": 0 }, @@ -7447,7 +7447,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "68c8f35a2e7443bbb1710bee4f8fa8c3", + "model_id": "980182fe4c21430283fc2c1bf13d689f", "version_major": 2, "version_minor": 0 }, @@ -7461,7 +7461,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "783184cfde1f4cd38a6a7af021e2f3d1", + "model_id": "4e4368f64c4740e1b98318aeeab26d27", "version_major": 2, "version_minor": 0 }, @@ -7475,7 +7475,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "edd74d421b2d44a685ee652dc1fd902c", + "model_id": "895d5ab697274442b777f0df73d5bd4f", "version_major": 2, "version_minor": 0 }, @@ -7489,7 +7489,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b0ef276c85b845d9b96895473c5a0472", + "model_id": "a6f8b232d2f94bbd89f249e0bdb1f13e", "version_major": 2, "version_minor": 0 }, @@ -7503,7 +7503,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2a5a753162ae47869c0366c6dc5a055e", + "model_id": "e7641d1ad1b441eeac7323370c44c2a6", "version_major": 2, "version_minor": 0 }, @@ -7517,7 +7517,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "32927c5bae7c4c8fa8db71e6b7325d77", + "model_id": "cf33775119644fbfb71b9e8e31fa8723", "version_major": 2, "version_minor": 0 }, @@ -7531,7 +7531,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7993b7518e3b4e23a6bac3b59a4a72d5", + "model_id": "e7b92366d5714ea5afb9b07fa05bf98b", "version_major": 2, "version_minor": 0 }, @@ -7545,7 +7545,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2ae89aa83cad4f56bd8bf225b5abaf29", + "model_id": "af613e7963da4639865103b79d1a365e", "version_major": 2, "version_minor": 0 }, @@ -7559,7 +7559,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8beac381be044e9086fab395bf0af9b4", + "model_id": "50f82b251db6443c80a21c200755e470", "version_major": 2, "version_minor": 0 }, @@ -7573,7 +7573,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "61671969aa86429d837cd3c898552f43", + "model_id": "4569985d8b8e4c47afc8cd2b440996c2", "version_major": 2, "version_minor": 0 }, @@ -7587,7 +7587,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a8a3125578f94fa19f8541fe3d768eea", + "model_id": "9943a28f3e44471face85daff5aa3201", "version_major": 2, "version_minor": 0 }, @@ -7601,7 +7601,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8e26e4c6dfff401591782696ad7c574f", + "model_id": "dee63d87d36341609e435442ea3092a8", "version_major": 2, "version_minor": 0 }, @@ -7615,7 +7615,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dad9c8a1a0b4453b834fcad0eeb7203a", + "model_id": "8a72debbd45c40d6838edcc3fe369991", "version_major": 2, "version_minor": 0 }, @@ -7629,7 +7629,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a83e22c20dfe4f6c9cee050d33823f13", + "model_id": "8a5bd49511304a8faff174f7c4b15632", "version_major": 2, "version_minor": 0 }, @@ -7643,7 +7643,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "34363e4746af4ea083593a241dcc3de2", + "model_id": "6e49aa79d08b40f7b99670cfa133199e", "version_major": 2, "version_minor": 0 }, @@ -7657,7 +7657,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b7d51ebf9844487ebb0710e7672b4cbf", + "model_id": "ee71808c708a4ed9a27024e7be15a38d", "version_major": 2, "version_minor": 0 }, @@ -7671,7 +7671,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "63c82288e21b418f95cb5390835d31c2", + "model_id": "8929217e2f5a46738e3eb847cd29b58e", "version_major": 2, "version_minor": 0 }, @@ -7685,7 +7685,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d157936d0884491595d481c984e12437", + "model_id": "0836b470bb02472b8ee09b53d6992ed0", "version_major": 2, "version_minor": 0 }, @@ -7699,7 +7699,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2435fb4764bf450b92b2e9bb4c7efaa5", + "model_id": "1bf90fed3c844600a6c066873371f8d9", "version_major": 2, "version_minor": 0 }, @@ -7713,7 +7713,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "30ca3bb7f7ca47bdaa9292f8ccb06e43", + "model_id": "230fae7f250e46f4b24a0a4d06bc7388", "version_major": 2, "version_minor": 0 }, @@ -7727,7 +7727,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "24d5c6c14dc047fbb2dabdca5654cf45", + "model_id": "05d10c9da254400bb7ad5df6b8ba404d", "version_major": 2, "version_minor": 0 }, @@ -7741,7 +7741,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "55a537f72c394dec8c979aa1fff991e1", + "model_id": "884d2b965b44465f92f0d33d53d427e0", "version_major": 2, "version_minor": 0 }, @@ -7755,7 +7755,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f50912c8fb324479a4e95b764b12af9e", + "model_id": "0a5186d41c004e728b47c9c6ff117ea5", "version_major": 2, "version_minor": 0 }, @@ -7769,7 +7769,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "141d0030edbb4539925bac0124be0516", + "model_id": "356a2a28874f4c25a58a0074877facf7", "version_major": 2, "version_minor": 0 }, @@ -7783,7 +7783,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c617a566c7fa4be8ac3da9f883b9825f", + "model_id": "430d9d05b3f04697b5aff10f59dac792", "version_major": 2, "version_minor": 0 }, @@ -7797,7 +7797,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b023b119db8f4b199d13d8d023581205", + "model_id": "49ecc113500c47248184f9915e026751", "version_major": 2, "version_minor": 0 }, @@ -7811,7 +7811,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a873bf3d9af543999551698b468c5ad2", + "model_id": "96b7eccab1ef41299ba857fe97d9fa13", "version_major": 2, "version_minor": 0 }, @@ -7825,7 +7825,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9e1db2f4d4f6450f83f768c5510e39ac", + "model_id": "11e22539f9a140289a667128ace93e34", "version_major": 2, "version_minor": 0 }, @@ -7839,7 +7839,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c90177a8b1042a3bd4467373575f15b", + "model_id": "5077cc02c1304da792913ac0bfc5bd44", "version_major": 2, "version_minor": 0 }, @@ -7853,7 +7853,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "53be3133b38344bfa537a6b6290ed34c", + "model_id": "14e74a1833984e3d97f733f346f7ce41", "version_major": 2, "version_minor": 0 }, @@ -7867,7 +7867,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "14a8b3cc01054d18b87743ce2640d277", + "model_id": "87e8a2d56e1e4628bd7d62a526766017", "version_major": 2, "version_minor": 0 }, @@ -7881,7 +7881,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c5e4f50b1254444952b57b897216430", + "model_id": "bc929ee3f2544cc6bead141120d49537", "version_major": 2, "version_minor": 0 }, @@ -7895,7 +7895,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9866b50dad9d4165b0a07f85f2e14b13", + "model_id": "17d4c3ba8cd14e91933c25d57e289ffb", "version_major": 2, "version_minor": 0 }, @@ -7909,7 +7909,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "50aab40a7ac8493cae04b883341f7de4", + "model_id": "2463e2cd11fc47138d6e4f5341d01110", "version_major": 2, "version_minor": 0 }, @@ -7923,7 +7923,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ed55d2045be1481c9486ac72a100c5c8", + "model_id": "d80433a4ec434832b0d0568cdc051d51", "version_major": 2, "version_minor": 0 }, @@ -7937,7 +7937,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "64c47dd3c05c409dbfbcbb91062ef6b1", + "model_id": "bdae87ec2fe14372b7bdb097f86917af", "version_major": 2, "version_minor": 0 }, @@ -7951,7 +7951,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7b85a7f33ee94c5887bd712d015430c3", + "model_id": "4453c75f170249ad90340ec5a7beeb4d", "version_major": 2, "version_minor": 0 }, @@ -7965,7 +7965,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bfa06bbd0afa411a8adf7de73977560d", + "model_id": "feef03fa797547249c84802bda69af41", "version_major": 2, "version_minor": 0 }, @@ -7979,7 +7979,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7720155bbf3e42918fbe790271f6d875", + "model_id": "26174d94a85548838a2df1b9133bde8a", "version_major": 2, "version_minor": 0 }, @@ -7993,7 +7993,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "41ea0113f4364552b64c54e16d8705f7", + "model_id": "e3e265c5771a4ddab62fb706d84b910d", "version_major": 2, "version_minor": 0 }, @@ -8007,7 +8007,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "37e49ca33cee433283c973472a446682", + "model_id": "bd4b1a74e280445bb6da1983bccb40a3", "version_major": 2, "version_minor": 0 }, @@ -8021,7 +8021,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "71094f0cabba42a2a1951a56f0b85681", + "model_id": "b85ebee94e3e426c856b773dae3e0b8b", "version_major": 2, "version_minor": 0 }, @@ -8035,7 +8035,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "85e05f0ce7c04195a11138d7b711a689", + "model_id": "16b2d3c22c2246b2890bf452a86c407b", "version_major": 2, "version_minor": 0 }, @@ -8049,7 +8049,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "528ba3054cab4589ad676367e50e9ea5", + "model_id": "23fdda1e3182439fa6272484031bc302", "version_major": 2, "version_minor": 0 }, @@ -8063,7 +8063,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "56e2778c2916451c933533e9de6e34a2", + "model_id": "a4746dd20917465580e6a243893c246e", "version_major": 2, "version_minor": 0 }, @@ -8077,7 +8077,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8b7178266fdb4a07b002b2881f172785", + "model_id": "007e90a097944ef18229f78eb537fb44", "version_major": 2, "version_minor": 0 }, @@ -8091,7 +8091,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "52cabece91ba465ea06220b083b6e21c", + "model_id": "9b62ea903f064095b0a383b6b0c20653", "version_major": 2, "version_minor": 0 }, @@ -8105,7 +8105,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "11a157da68e24ae99e0dd0884805ce9b", + "model_id": "c6f8305c800347c7b21fdf76903ddc5e", "version_major": 2, "version_minor": 0 }, @@ -8119,7 +8119,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ae0f54fbabd2428680374559ca2445e9", + "model_id": "8d67be59fe4e47389dc5c1f1649599a3", "version_major": 2, "version_minor": 0 }, @@ -8133,7 +8133,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "219dbf05f0c2460f99e0adcafe333e98", + "model_id": "1a4950c4272840289aeabf6784415733", "version_major": 2, "version_minor": 0 }, @@ -8147,7 +8147,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2d1cb52da83b4f35b75166a09126a00c", + "model_id": "3f6a46bc523e41118031ba083d036a59", "version_major": 2, "version_minor": 0 }, @@ -8161,7 +8161,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8a49b8ffb90c4deabf6f33a58f238707", + "model_id": "80de0fd135d7428a8dc12305348220e7", "version_major": 2, "version_minor": 0 }, @@ -8175,7 +8175,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d2f931c5700d4159acb806217fd5b84d", + "model_id": "51c73184542b40edb0e8f5732f02304d", "version_major": 2, "version_minor": 0 }, @@ -8189,7 +8189,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ada478efcd354206a7d66c825d44735a", + "model_id": "3b9052ae20844e188a7f507df21aa20d", "version_major": 2, "version_minor": 0 }, @@ -8203,7 +8203,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "995a429b56c74346a142f3229dc031fe", + "model_id": "2bbad6f72b5f459c8dd7d28128d576a2", "version_major": 2, "version_minor": 0 }, @@ -8217,7 +8217,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "58ba4983c8a841bf9d95a9c3892d9f6b", + "model_id": "25af9d87ec3345b8823b38021de862a8", "version_major": 2, "version_minor": 0 }, @@ -8231,7 +8231,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e93d2f31d5064d21bbddd0bab03caebf", + "model_id": "87b693261dcf4f35b675c0ff16d2b32b", "version_major": 2, "version_minor": 0 }, @@ -8245,7 +8245,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f4ccfea72ef4221a6c7fe3b1d9de6a5", + "model_id": "787fcfae2eb24d02a8693fbd547539af", "version_major": 2, "version_minor": 0 }, @@ -8259,7 +8259,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6d2442ab91c64f07af666cd7793c1cc7", + "model_id": "31bd22e3ad1b4f61bc6f166778666102", "version_major": 2, "version_minor": 0 }, @@ -8273,7 +8273,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8a30a6f2dad94c8aa3b17e4472f48d23", + "model_id": "c611633dac934d52be371d7376d4a8dd", "version_major": 2, "version_minor": 0 }, @@ -8287,7 +8287,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "492343e61f574c4c996519c15a31a384", + "model_id": "9a5fd254d08e480d9792ce0574c1b54e", "version_major": 2, "version_minor": 0 }, @@ -8301,7 +8301,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "adfa14d14a7442cb87309104013df456", + "model_id": "c60cd1a9d7fb4098bfc80682ae39a2ec", "version_major": 2, "version_minor": 0 }, @@ -8315,7 +8315,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "aa8ccffd49cf4fccb9999e7438bf39e1", + "model_id": "5649f9e40c3d451289bae1bb8f9eca18", "version_major": 2, "version_minor": 0 }, @@ -8329,7 +8329,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fff4f3e12025463f82fad602fcb17924", + "model_id": "3d9d805f34b64ee19fec702f478a9f1f", "version_major": 2, "version_minor": 0 }, @@ -8343,7 +8343,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9ac4718f59d849fd8f703c46bf04f443", + "model_id": "5001bebc6a8e4bca9acc27ded8b0c209", "version_major": 2, "version_minor": 0 }, @@ -8357,7 +8357,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6d27158d5e15466485eef2ae69fd49e7", + "model_id": "ab59c2a953074f30bad683c261ae6b89", "version_major": 2, "version_minor": 0 }, @@ -8371,7 +8371,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0305cec6626d4bba9f5f7bd26bc310ef", + "model_id": "ce5b1c78fee443a7a6a6cf98f46010c2", "version_major": 2, "version_minor": 0 }, @@ -8385,7 +8385,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d8d864decfa647caa0fd520ba8b09782", + "model_id": "d934961f5ff94cabb5ed18a30c75013c", "version_major": 2, "version_minor": 0 }, @@ -8399,7 +8399,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1f7c77cbdb9a43eeafb7ff5892eee405", + "model_id": "8656c8c3b073471a8ec2f6e672bb1e93", "version_major": 2, "version_minor": 0 }, @@ -8413,7 +8413,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5ed9a81bb636483c9215ff4b7727c515", + "model_id": "5ffdb30e64334577b6bae3bbb09c00b7", "version_major": 2, "version_minor": 0 }, @@ -8427,7 +8427,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "34b28fa5979d4c458d06341673bcdd59", + "model_id": "c85f7b2374b4498584f243b0f16bc091", "version_major": 2, "version_minor": 0 }, @@ -8441,7 +8441,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0ad7df9a64c64efe8426005966272528", + "model_id": "256c23d9f9334fafb53356d480852d29", "version_major": 2, "version_minor": 0 }, @@ -8455,7 +8455,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cff23ee2d79b41ea9f3bc7126fa24309", + "model_id": "b839ac55509d40e79a923dd287e7ba59", "version_major": 2, "version_minor": 0 }, @@ -8469,7 +8469,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2ce31ee4aac14376a3846df5dda62c1f", + "model_id": "62407a0078434a318f29ab9ceca690fa", "version_major": 2, "version_minor": 0 }, @@ -8483,7 +8483,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e7a3beba730d4dc9acf0731e671a1371", + "model_id": "fd445c502d1244c1aa2e0b1262d5ce65", "version_major": 2, "version_minor": 0 }, @@ -8497,7 +8497,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "75593cc4e84b4bf0b84f6f5d328e867b", + "model_id": "1674ff5fb38f489ca60fb2c329540268", "version_major": 2, "version_minor": 0 }, @@ -8511,7 +8511,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2c002e383c424d84aa7882e194356cd3", + "model_id": "aa5117207c814d2e9349ef56e770a4ee", "version_major": 2, "version_minor": 0 }, @@ -8525,7 +8525,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7cd962693062447abf4eea61fd298500", + "model_id": "d8213c98c9d845bdb61c9fdd7b2519cb", "version_major": 2, "version_minor": 0 }, @@ -8539,7 +8539,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b444e45098154f3c9328e8846bb0c8a7", + "model_id": "fa644168532649659882837a02cdecc7", "version_major": 2, "version_minor": 0 }, @@ -8553,7 +8553,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c16e120677da41fc8e861b75d03c8591", + "model_id": "0c445d01b7b64bd48faf70b0117993e3", "version_major": 2, "version_minor": 0 }, @@ -8567,7 +8567,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "44c6eb106e9d4bba98c3cb8c958081d9", + "model_id": "1c610c6263da44e5ba7694c7e0aba0e3", "version_major": 2, "version_minor": 0 }, @@ -8581,7 +8581,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "877d3a066e764e72b1f6669522b8532f", + "model_id": "5054f72fa798458fb1dc6b38412d9840", "version_major": 2, "version_minor": 0 }, @@ -8595,7 +8595,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "66a865f014234802844dadba07b47ca9", + "model_id": "8a81b9c6b2254ed99a53be25c9fe7ef6", "version_major": 2, "version_minor": 0 }, @@ -8609,7 +8609,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3b801f3e28cc4d28ad7c23efc1f0dd76", + "model_id": "eb7a2772c59d4f79af037b1865852616", "version_major": 2, "version_minor": 0 }, @@ -8623,7 +8623,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e375e158ab3b4335b248398f7a16d1d8", + "model_id": "5df32ede02d7497e9a019fb45bad8c3e", "version_major": 2, "version_minor": 0 }, @@ -8637,7 +8637,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d7b8540692f94f1e8c86df41e042f330", + "model_id": "b53a9651dafc41c4b425278c837ae719", "version_major": 2, "version_minor": 0 }, @@ -8651,7 +8651,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "910a53deee914f1a94cd69abade16cfa", + "model_id": "2a4fd6533d524fd79c5a82f6f911bae5", "version_major": 2, "version_minor": 0 }, @@ -8665,7 +8665,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8aafced4e8684f809d6b70bc8da9c552", + "model_id": "bece1289a6554b4e82a70b45bcab8b72", "version_major": 2, "version_minor": 0 }, @@ -8679,7 +8679,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0793abe71c4b4261b6c020c95d19dac6", + "model_id": "77596c7fd4f44a9986a8feb893149d38", "version_major": 2, "version_minor": 0 }, @@ -8693,7 +8693,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb3c853be6104fe6adf6dbb6a23df0bf", + "model_id": "e158d1d66397435086f639682ec458c4", "version_major": 2, "version_minor": 0 }, @@ -8707,7 +8707,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1e4c0254af0b49e09c89bffc32c42a50", + "model_id": "d085d532b833408f86b748ac845eddc1", "version_major": 2, "version_minor": 0 }, @@ -8721,7 +8721,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f75b1450f31540ecb75194c2e770e92f", + "model_id": "5924ac220489410e8c2be7fe7efdfd02", "version_major": 2, "version_minor": 0 }, @@ -8735,7 +8735,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cbea27b176d94719bff474b7af0b6a4e", + "model_id": "3be41e0cbb85479e81fd583e14b1b47b", "version_major": 2, "version_minor": 0 }, @@ -8749,7 +8749,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "51127d528fba4d4d96c8dbe371be7981", + "model_id": "77cdf3b4743644da9f12831d48dee3ed", "version_major": 2, "version_minor": 0 }, @@ -8763,7 +8763,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "47a567e4e1414dd283fc0fc1ed120177", + "model_id": "ae9337a85bf54499a729ad6b08291b54", "version_major": 2, "version_minor": 0 }, @@ -8777,7 +8777,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83e8b0e00f4b45708b08016661bd078b", + "model_id": "713c4f00516d49e8b5e689bb84d66b97", "version_major": 2, "version_minor": 0 }, @@ -8791,7 +8791,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e7c16b6fccb74d649150ce09545c98cb", + "model_id": "fa97b275e49e471eb360f43d0c6402a3", "version_major": 2, "version_minor": 0 }, @@ -8805,7 +8805,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b9027ecd91fd4c8a8a4d0f227ad9e1d9", + "model_id": "ae2e9e17c22a46d2ac07d39ff384087d", "version_major": 2, "version_minor": 0 }, @@ -8819,7 +8819,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7ecb7ca89a41415b81eb223cc406488e", + "model_id": "5a22dc5b0ead4257bade5e1187a7de97", "version_major": 2, "version_minor": 0 }, @@ -8833,7 +8833,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb5402dc03494defb35f0eb674032a1f", + "model_id": "c169fd8adb1e4d488b9ba540246740a6", "version_major": 2, "version_minor": 0 }, @@ -8847,7 +8847,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "08773ef71d1e4f7fa6ab28e0ddbad520", + "model_id": "ff0c6f13f089462bb3d862859c0d2794", "version_major": 2, "version_minor": 0 }, @@ -8861,7 +8861,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "50d3c403c2cf48f1bd821ae271c859ff", + "model_id": "80d4a042f8994862b4cd0e67c24d8e88", "version_major": 2, "version_minor": 0 }, @@ -8875,7 +8875,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d3d27503ee324c03899d845c3a4a9eec", + "model_id": "aa43b8afd59e4081a1019800ff4450dd", "version_major": 2, "version_minor": 0 }, @@ -8889,7 +8889,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cd2a1c64dfa9415587a920d9daf35460", + "model_id": "52980cdb7c6d4383a85f6f6f66d63e33", "version_major": 2, "version_minor": 0 }, @@ -8903,7 +8903,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e6d1e5c095f4b87ab217c4a615738fc", + "model_id": "dfe057361e134f03964233bf3e0914b8", "version_major": 2, "version_minor": 0 }, @@ -8917,7 +8917,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "43ba685169064d60accda38ab64aa5b2", + "model_id": "f574f285edbb4731ba5ec32e4651dc30", "version_major": 2, "version_minor": 0 }, @@ -8931,7 +8931,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ef315ff8699d4783b8e159f080d79d7a", + "model_id": "279425ccb6f8456bbf3b3bdc74b61025", "version_major": 2, "version_minor": 0 }, @@ -8945,7 +8945,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "069e2a55fb5e4ca6bcad88d4b8ee021b", + "model_id": "591bbc8405d3492b8e3793c7188e8d83", "version_major": 2, "version_minor": 0 }, @@ -8959,7 +8959,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2224f5b405df42c3afea88ab28a28b2e", + "model_id": "41f8a889ae614e90b74cde690bb78506", "version_major": 2, "version_minor": 0 }, @@ -8973,7 +8973,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d481d3a87f7c4763bd675fea18a1a2df", + "model_id": "9f559dd7704945bc9644ff80f467ecf8", "version_major": 2, "version_minor": 0 }, @@ -8987,7 +8987,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b91615de9e9f49c6b40a222ff88d1bf3", + "model_id": "bfcfa7a0b8ac4ceab669ce4bd4d99353", "version_major": 2, "version_minor": 0 }, @@ -9001,7 +9001,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a9cb2efe6d834893a2a1003e1c1c91b4", + "model_id": "2addfe8ef1f74256a3dbd59718f830e1", "version_major": 2, "version_minor": 0 }, @@ -9015,7 +9015,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c0a75b5f49884e3794d50eb073dff01b", + "model_id": "b326ea08d44a4c8ea5455cc20c7af162", "version_major": 2, "version_minor": 0 }, @@ -9029,7 +9029,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c56ec782acf2438996b7b603db3990ca", + "model_id": "798290444d984a33a35e9b4b3da22c28", "version_major": 2, "version_minor": 0 }, @@ -9043,7 +9043,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1c0f07bb437643538317383635014dcc", + "model_id": "6621471d3ca44388b5cf415158f12237", "version_major": 2, "version_minor": 0 }, @@ -9057,7 +9057,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a1f6fe155e8d4f34a8135b7bf1b31418", + "model_id": "79714448ed1e4b5e83781d256d82349b", "version_major": 2, "version_minor": 0 }, @@ -9071,7 +9071,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c008a83edd1d4ab29d5899c396e4162d", + "model_id": "a4b2405840d44d969b284e9808a3bfc9", "version_major": 2, "version_minor": 0 }, @@ -9085,7 +9085,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a5554b4b8c104ab3b54aabb64c50627a", + "model_id": "9605ce242aba432abcefacceeba71a31", "version_major": 2, "version_minor": 0 }, @@ -9099,7 +9099,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6af12027686b4f529a0f1d9e208b5bf9", + "model_id": "089bc2df8f60480c9e352fc7a448dc43", "version_major": 2, "version_minor": 0 }, @@ -9113,7 +9113,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "24990c5bc35346b08b4043c08eef0c62", + "model_id": "e512d5ebafdf4593941a22dbe24c5e04", "version_major": 2, "version_minor": 0 }, @@ -9127,7 +9127,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5c7ef6da308b4777bce50749088d0cc7", + "model_id": "3607133b801645b89952d31c0321b83b", "version_major": 2, "version_minor": 0 }, @@ -9141,7 +9141,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a3aa9dbc8fc44e68b13eae4b0204360b", + "model_id": "6554322665cc4d43b53ff25b58f2bf98", "version_major": 2, "version_minor": 0 }, @@ -9155,7 +9155,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "880128a5f12d47be88a9059237226402", + "model_id": "a2035fb18325467eada85fdf381d2d3a", "version_major": 2, "version_minor": 0 }, @@ -9169,7 +9169,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0f5e6fc67b764cf5a113c6853633f215", + "model_id": "d12e944047c346bf9765200cadc6b3b3", "version_major": 2, "version_minor": 0 }, @@ -9183,7 +9183,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "adb60c952a1e425b8a8e74a0bae88042", + "model_id": "1b70d96da78c40a98194bf4b5b52124c", "version_major": 2, "version_minor": 0 }, @@ -9197,7 +9197,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f5fad26cbbc645bbac2d79684ec81b3a", + "model_id": "ec39b3e9996f48c5a46f2c8a13fd0adf", "version_major": 2, "version_minor": 0 }, @@ -9211,7 +9211,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4432cc0795374f8facbae648d65bf201", + "model_id": "f4721d2d8ee94e7c9ca58c10a84c1fe4", "version_major": 2, "version_minor": 0 }, @@ -9225,7 +9225,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f2e9a9057f1d427f86b36856c51b9479", + "model_id": "fdd32ae74a2c4fc68ca735fb51071d55", "version_major": 2, "version_minor": 0 }, @@ -9239,7 +9239,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8bcb5e35fe3d400390d636bb47463467", + "model_id": "e6d6c48a5ecf4892b64b438aabf87d27", "version_major": 2, "version_minor": 0 }, @@ -9253,7 +9253,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b5b4a72b9fbe452b9441ca95729514f2", + "model_id": "9069cc4dc00e412cb142abe35791b189", "version_major": 2, "version_minor": 0 }, @@ -9267,7 +9267,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7cb2f0b209e94c54af5bbdf654844c36", + "model_id": "2e3330c703fe440bb8a882e307093972", "version_major": 2, "version_minor": 0 }, @@ -9281,7 +9281,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e91492996f8f4b5c8c1a07faba9887eb", + "model_id": "3985c4ca906b49928b5e20dfc5765dd0", "version_major": 2, "version_minor": 0 }, @@ -9295,7 +9295,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "464f3a7023eb4760a120ae6215b3f0a9", + "model_id": "74fc464038b544e7bd5fa9b0d6a99fb6", "version_major": 2, "version_minor": 0 }, @@ -9309,7 +9309,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e5c1624e235a4884928010a1d8222ced", + "model_id": "2494c8f89e474dc8ab3a916fdf0be888", "version_major": 2, "version_minor": 0 }, @@ -9323,7 +9323,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b3b61055c7594790947ebeb83a241d9d", + "model_id": "b796d586b22342208a4095565640d713", "version_major": 2, "version_minor": 0 }, @@ -9337,7 +9337,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9d20c020465a497e85f579c60aafa5ed", + "model_id": "9481e2b13db0452f95f3d7f6dc056635", "version_major": 2, "version_minor": 0 }, @@ -9351,7 +9351,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d28a66bcdd814a1eba89afdb5349f52c", + "model_id": "5def848079ec4c54a0abb684ed3c962f", "version_major": 2, "version_minor": 0 }, @@ -9365,7 +9365,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "722d271d3164448aa5be32b944c24836", + "model_id": "46eead67abe645139913086e2b1d9547", "version_major": 2, "version_minor": 0 }, @@ -9379,7 +9379,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5c6af22c9a8d46599fd0a39bab76bff7", + "model_id": "e69c76575b9d45449ff894e351c94fb7", "version_major": 2, "version_minor": 0 }, @@ -9393,7 +9393,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "557dd9fbd62b4aa2a592531f21531c5b", + "model_id": "af8134b978c64c8983fde6d6035a7b4f", "version_major": 2, "version_minor": 0 }, @@ -9407,7 +9407,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "efcec0099da942e4af211c92c139758b", + "model_id": "c1b8d841455449d5a7412fcd350aaa2c", "version_major": 2, "version_minor": 0 }, @@ -9421,7 +9421,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "570df6ddcbc24b6c99cd234a9a89cb42", + "model_id": "643b7105a3ee4d3ea2eeb44bb5dc4b50", "version_major": 2, "version_minor": 0 }, @@ -9435,7 +9435,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8c2dd6114f948cb9e291afc518ba7c9", + "model_id": "ce8c41008c6c4830a83e45915bd7c1c1", "version_major": 2, "version_minor": 0 }, @@ -9449,7 +9449,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c8941e4347a04539818fcb915b5fce5c", + "model_id": "369e10fc8e1345ee853044028480c0ee", "version_major": 2, "version_minor": 0 }, @@ -9463,7 +9463,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "19d5a5dff3834da0854731e3d0d7ac8f", + "model_id": "98b5db325d5340699a217bbbb46d0898", "version_major": 2, "version_minor": 0 }, @@ -9477,7 +9477,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0387ce69aae943d2be829b7c9b4aa220", + "model_id": "6a1e17bbffdf46209f275a8eed083bd2", "version_major": 2, "version_minor": 0 }, @@ -9491,7 +9491,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fde2bfa5f83349d580743a8d354e2b3d", + "model_id": "5a5992182ef047b7a58973b2a606d98e", "version_major": 2, "version_minor": 0 }, @@ -9505,7 +9505,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e49486058c384bfe83b635eb58135393", + "model_id": "6ec2a342506d4e20a82fe385e0bef146", "version_major": 2, "version_minor": 0 }, @@ -9519,7 +9519,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5bba6b571b454cdb8e5790f18365c621", + "model_id": "79b8b9dd6848424f8e0a57e17ea1e0aa", "version_major": 2, "version_minor": 0 }, @@ -9533,7 +9533,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6248386b67814fc2b54053b8d57ae540", + "model_id": "934f2c9e24da4bea8f8462bffb90b554", "version_major": 2, "version_minor": 0 }, @@ -9547,7 +9547,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6c680c7c4eff4c04b8c292edd6b3f0a4", + "model_id": "e9bfcbba57fc4fe7b42d79e52e48d3ed", "version_major": 2, "version_minor": 0 }, @@ -9561,7 +9561,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "86cb7aa42eb34b7497504d7bab6c8879", + "model_id": "b880e299692c4b28872425245eda387c", "version_major": 2, "version_minor": 0 }, @@ -9575,7 +9575,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "50e54e70be3f4f9a9e11f011e0fb227e", + "model_id": "772d8fd0b7664a03a43dd5fd53015491", "version_major": 2, "version_minor": 0 }, @@ -9589,7 +9589,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "00e827571619460589934d021da8dba4", + "model_id": "dcc1fd81b05d4f4397fd8fd34e94ccf4", "version_major": 2, "version_minor": 0 }, @@ -9603,7 +9603,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "633ad3f89d814f909a5d911fbdfe7ba0", + "model_id": "e988255757234a049fab37a5405aeba3", "version_major": 2, "version_minor": 0 }, @@ -9617,7 +9617,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "284e8feebff242eb930123f7a7634c1a", + "model_id": "950f6500436f439ea6031bb1788daa2f", "version_major": 2, "version_minor": 0 }, @@ -9631,7 +9631,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "33d14322fd6e4217aa9ab3e1a0183da2", + "model_id": "60042e3985e148c29e15ee5fc240a7d0", "version_major": 2, "version_minor": 0 }, @@ -9645,7 +9645,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0f7756fc9bff4c97899927a5f8973600", + "model_id": "9798d1de5a844e31a28976a16c669e6f", "version_major": 2, "version_minor": 0 }, @@ -9659,7 +9659,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f62bda48f264bd3a76197b99a90e9d8", + "model_id": "3b59f993296040a09c265f77c338f23a", "version_major": 2, "version_minor": 0 }, @@ -9673,7 +9673,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "26445415d2db4615b6c74ae99147b8bd", + "model_id": "62d833239f284a61b29abc0a7e4d0a87", "version_major": 2, "version_minor": 0 }, @@ -9687,7 +9687,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "66053f70b87c4304a1dab658e5a5d429", + "model_id": "29fe98be139b43639ac728326134a7e1", "version_major": 2, "version_minor": 0 }, @@ -9701,7 +9701,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6cbc68ade2a94f2a876d73d449acddc2", + "model_id": "01c6a108a91d418aafbbda5a9979c04c", "version_major": 2, "version_minor": 0 }, @@ -9715,7 +9715,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "85c4f71f412546659ed465cd780cbb67", + "model_id": "0e4585f8ff0e45bca3d3c84a7603e03d", "version_major": 2, "version_minor": 0 }, @@ -9729,7 +9729,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0ac6243ea6794f6ca02769317bdf8018", + "model_id": "2b8f66d1bbb849d7819d0931c770b987", "version_major": 2, "version_minor": 0 }, @@ -9743,7 +9743,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e437cee0af4d491f9c38bd4f86483b0d", + "model_id": "c4d3866ed54843d287711731a4cb7db7", "version_major": 2, "version_minor": 0 }, @@ -9757,7 +9757,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fe268dcc387c482181e899e7cabfe43a", + "model_id": "779c444f73d94845a44f2bd39bff1993", "version_major": 2, "version_minor": 0 }, @@ -9771,7 +9771,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f70690fd1ec74529abcd03f9db291ef8", + "model_id": "5dc88391a33640fa8f9ae7e1002136ac", "version_major": 2, "version_minor": 0 }, @@ -9785,7 +9785,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "867819e681444d9eb6f8a7fd46654f60", + "model_id": "2f0b4460dddf41918af49a770236ed87", "version_major": 2, "version_minor": 0 }, @@ -9799,7 +9799,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dbc6e1e543d34b7d80298d1374ad31b2", + "model_id": "7f1d616374ae4bb98f9a126807c53364", "version_major": 2, "version_minor": 0 }, @@ -9813,7 +9813,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4bc877e3c54340cdb9f91f9ec2760dc4", + "model_id": "5c23ee05548443bb8e8447c3b12f42c8", "version_major": 2, "version_minor": 0 }, @@ -9827,7 +9827,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5252675c0e1e41c7b7d992a11fa1ba58", + "model_id": "b97420a7d529429696371e1a1a9fc06a", "version_major": 2, "version_minor": 0 }, @@ -9841,7 +9841,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c48890f0c6c84c23af286b1384bfbf80", + "model_id": "87399b0b00c04316a84755e080c4bd01", "version_major": 2, "version_minor": 0 }, @@ -9855,7 +9855,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c231276a595d41748c5e79d9693a1eb7", + "model_id": "c2fd15aafbd749839f83e1949308bc1c", "version_major": 2, "version_minor": 0 }, @@ -9869,7 +9869,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4bd2816683bb4ce0bbb9ede7653488df", + "model_id": "052b48e4928949b7a24afe3644f5d16c", "version_major": 2, "version_minor": 0 }, @@ -9883,7 +9883,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "22f89445acfe46aa9d08a2ebfa697799", + "model_id": "eed5e843b609432daa7d2eb5bbc7daa0", "version_major": 2, "version_minor": 0 }, @@ -9897,7 +9897,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6c68abc032c14315aa8fc88f3e3e75d4", + "model_id": "0bed2b12f8f042dbb87a4968d5f60ef9", "version_major": 2, "version_minor": 0 }, @@ -9911,7 +9911,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "83073ed968614c0a840693e07657e9cb", + "model_id": "67cdefedddaf4534838ceff6cc3b0bf6", "version_major": 2, "version_minor": 0 }, @@ -9925,7 +9925,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf1e0955882b4b859d5c5884bc2cd4f1", + "model_id": "4863e45ca9e44913b46511399094b827", "version_major": 2, "version_minor": 0 }, @@ -9939,7 +9939,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "069851b6c1b140e0b0fdc2324709c9c6", + "model_id": "664390d5e2754a4dbca51fefd6ca20a6", "version_major": 2, "version_minor": 0 }, @@ -9953,7 +9953,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "23dc8a2b3a894be3bef794ce8dfa0292", + "model_id": "859a1124b2694e12b5a9b477cf4f5b82", "version_major": 2, "version_minor": 0 }, @@ -9967,7 +9967,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a9bddaae4f664a95a931d18493fca6ee", + "model_id": "3cee3de080d444dbb579666e08df1058", "version_major": 2, "version_minor": 0 }, @@ -9981,7 +9981,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e3709290f1df48da8b5e061a70b41b47", + "model_id": "1679ec3e29e745b2ba573415290136a8", "version_major": 2, "version_minor": 0 }, @@ -9995,7 +9995,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1fc92510bb9343eb92f8667c91d8194e", + "model_id": "09f1dffc79c646afb509b0b873843298", "version_major": 2, "version_minor": 0 }, @@ -10009,7 +10009,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b33966a5f90d465a914f6d93dd3bdb32", + "model_id": "e69a00b1d0a14077a735badbba966d50", "version_major": 2, "version_minor": 0 }, @@ -10023,7 +10023,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "139b3effe5a64376b1db85c892654316", + "model_id": "6257db8f25c943968afe1bf0fda6c99d", "version_major": 2, "version_minor": 0 }, @@ -10037,7 +10037,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e73279fd131f41869e3702da04fb241b", + "model_id": "354aabb28f904a7a9783f7c9577584a8", "version_major": 2, "version_minor": 0 }, @@ -10051,7 +10051,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "231c1916a18341fd848d57babcfacdf7", + "model_id": "5f2e219bfcc74acbbb248496b5150077", "version_major": 2, "version_minor": 0 }, @@ -10065,7 +10065,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b4eb596889104141a736d975da399e53", + "model_id": "7b50d1966e7047d19d00712ed4a76f50", "version_major": 2, "version_minor": 0 }, @@ -10079,7 +10079,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "246da86650d4401cac22d04e1145d6f8", + "model_id": "07b03aad805f4374bc9021b8fdf1dc48", "version_major": 2, "version_minor": 0 }, @@ -10093,7 +10093,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cc9e13321e5d4e6982bda87edd05acac", + "model_id": "99eec906231e49aca353976ef6734994", "version_major": 2, "version_minor": 0 }, @@ -10107,7 +10107,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "01cd4fdec75d473daf6640b3b348f897", + "model_id": "88d2ba2f2c56466289d58ea873e29045", "version_major": 2, "version_minor": 0 }, @@ -10121,7 +10121,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0006634563474a19a6a735b3fca48c03", + "model_id": "3e3005feed104b04820e52a6a1714b45", "version_major": 2, "version_minor": 0 }, @@ -10135,7 +10135,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fddfc00f4d894c67a9a22d70874643e2", + "model_id": "a1a358ebc1504a1b88512f4d8df49618", "version_major": 2, "version_minor": 0 }, @@ -10149,7 +10149,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b880fe7badbe42c2b3609488d14ca7cb", + "model_id": "1f97b5de6b4d4094a01d2474a09a4293", "version_major": 2, "version_minor": 0 }, @@ -10163,7 +10163,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "95070bd264804e7c9a275cb7d51caf29", + "model_id": "8900e4773adc4a13b507fcc76e569637", "version_major": 2, "version_minor": 0 }, @@ -10177,7 +10177,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1b1246e89b04966877167c732913644", + "model_id": "a31ae2d8f35b48aba25ad2bce20a3b5e", "version_major": 2, "version_minor": 0 }, @@ -10191,7 +10191,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dc31e566fb1a4686bfe3fc65746dd4f7", + "model_id": "d3666c7dca1a4cb8a17ca8c4c7841176", "version_major": 2, "version_minor": 0 }, @@ -10205,7 +10205,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ca83a980e1e64b5fa691686618fb121a", + "model_id": "9c2a7ef9820c4f289a458c91dbe2c059", "version_major": 2, "version_minor": 0 }, @@ -10219,7 +10219,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ab32c616bd664566bc8db5bf30347ffa", + "model_id": "dc32008595f24ceca0effdb05d2c3cd4", "version_major": 2, "version_minor": 0 }, @@ -10233,7 +10233,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "85d0588658154f8ca0ac68168324c693", + "model_id": "cd2befd959df4809832f7cde0c42f781", "version_major": 2, "version_minor": 0 }, @@ -10247,7 +10247,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1aff6e4cae04442937336e6325912a7", + "model_id": "81b3cc06d3914b389449ccbe63da2100", "version_major": 2, "version_minor": 0 }, @@ -10261,7 +10261,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "26d7db905ba84911aa1838c93b06bff1", + "model_id": "26af3d2cda504b7b80c22d8cad57361a", "version_major": 2, "version_minor": 0 }, @@ -10275,7 +10275,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "251785c2c9244145ad447421f66a21a1", + "model_id": "e61009f07d6e4e009cfb95e734b345b7", "version_major": 2, "version_minor": 0 }, @@ -10289,7 +10289,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b1aa7b98fd4f4c49ba93fd91af8bff13", + "model_id": "88087f48ecc54bf0ab811a2a5322f888", "version_major": 2, "version_minor": 0 }, @@ -10303,7 +10303,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fb8a518f6b9e463f83a9ad14d30035fa", + "model_id": "5f5023fd9c2040ef85210bfce777d381", "version_major": 2, "version_minor": 0 }, @@ -10324,7 +10324,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e9f3fd5b715e431db54f6cb777b66041", + "model_id": "3485be43beae4540b8b1dedcc1360fb7", "version_major": 2, "version_minor": 0 }, @@ -10338,7 +10338,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cf63aaf55fd54cf4befdc138f0d71992", + "model_id": "d91b6ccb10b547f5adb2a6f72ed01e1d", "version_major": 2, "version_minor": 0 }, @@ -10352,7 +10352,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "281d25b1c9f0478ba0fa7a1293ccbcae", + "model_id": "38501dad8e95487aa97f6f08b3309244", "version_major": 2, "version_minor": 0 }, @@ -10366,7 +10366,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "718cf465a56647788eee60dcc6e16a74", + "model_id": "7fd5241af36744478d0380e00bf33614", "version_major": 2, "version_minor": 0 }, @@ -10380,7 +10380,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ca83b57cef60407886ada1b30cd62302", + "model_id": "c4cb16d5efce483c9d9fcfbcabbb2f32", "version_major": 2, "version_minor": 0 }, @@ -10394,7 +10394,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "584503b9bfc24b5c8c8c7368c1ed64fe", + "model_id": "6332044c18584c6f93cb542e1357a632", "version_major": 2, "version_minor": 0 }, @@ -10408,7 +10408,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9a030b73b90640e0ae1d6ecb354f50bb", + "model_id": "57320da92fea4fb5ba136b1a00bdea20", "version_major": 2, "version_minor": 0 }, @@ -10422,7 +10422,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a027924a6b84929b1e7823d87521be0", + "model_id": "613a8ddb2721456fb7d740b7e466c806", "version_major": 2, "version_minor": 0 }, @@ -10436,7 +10436,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d222271ba8b34ee78b8e185294e2d275", + "model_id": "fb9dfcfe9b8844829bd50cba0c54880e", "version_major": 2, "version_minor": 0 }, @@ -10450,7 +10450,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8203e7f01d4342ef9134214d87b41937", + "model_id": "d1980f214c084c3c914a939764aa1f13", "version_major": 2, "version_minor": 0 }, @@ -10464,7 +10464,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6fe8b73406a1481d8975c9a994b7a655", + "model_id": "0739752f526e4aa58dedbd570208be2b", "version_major": 2, "version_minor": 0 }, @@ -10478,7 +10478,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a7fafddabc2445069fda90d337dd27e9", + "model_id": "f772f194cafe4ddaa167e42359a0f4f7", "version_major": 2, "version_minor": 0 }, @@ -10492,7 +10492,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "443f9cb736ca4a659f673731169053ba", + "model_id": "1b3ef0dbbca542c49e0e28f49285c9fd", "version_major": 2, "version_minor": 0 }, @@ -10506,7 +10506,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f1dc86f1da2147d7b86188d12a9b6b0e", + "model_id": "739804587328476aba1573ec94371f8a", "version_major": 2, "version_minor": 0 }, @@ -10520,7 +10520,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "84e0ceeadda5459b84c568fe510fa712", + "model_id": "393fa06040444650a010d823fc3cdcf7", "version_major": 2, "version_minor": 0 }, @@ -10534,7 +10534,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9285e0289c0e43ee99b751a079ff3dfd", + "model_id": "dba48d19e0204840ae21b28f2b6873b0", "version_major": 2, "version_minor": 0 }, @@ -10548,7 +10548,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b645c4806f7549ecbcf387dc9c1d7a59", + "model_id": "fce2d536da554cde9969bbea5001b07b", "version_major": 2, "version_minor": 0 }, @@ -10562,7 +10562,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d68b888b4ae14f70b3221acb6a9877c9", + "model_id": "c781e0c8566b4362b1c5fb34cc4eea98", "version_major": 2, "version_minor": 0 }, @@ -10576,7 +10576,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6733e3cd118749ba9bf061773d57bf52", + "model_id": "a00b1a3d6955442a944c53d1d283f391", "version_major": 2, "version_minor": 0 }, @@ -10590,7 +10590,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6a8b469db6ed48418214b26df4cf0450", + "model_id": "921f280ea4044fc5979388589ac0ba96", "version_major": 2, "version_minor": 0 }, @@ -10604,7 +10604,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4f934e5fd9c14fd7ae1799d11358dd2b", + "model_id": "e7e1ef8a25924c22a4609c08d91bb49e", "version_major": 2, "version_minor": 0 }, @@ -10618,7 +10618,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "198a83ea1ac0413182d05ebbbbb8da52", + "model_id": "5ad9500cafaa44dd8045e0281b669311", "version_major": 2, "version_minor": 0 }, @@ -10632,7 +10632,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b60cafcb4fd342b2b396233117bee661", + "model_id": "9a579acf809a4b4284725c98946962b8", "version_major": 2, "version_minor": 0 }, @@ -10646,7 +10646,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9b399c33fbbc4b8eadcfd2ad524eaf3e", + "model_id": "881ed04443384366923622f582db0165", "version_major": 2, "version_minor": 0 }, @@ -10660,7 +10660,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d60724a6aec14ebeae6775a995122b1e", + "model_id": "77ebd7adf6364f7db644de0cc0f0b4d5", "version_major": 2, "version_minor": 0 }, @@ -10674,7 +10674,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2337758872e24c2faf4153fef7b3f742", + "model_id": "084d1506032042cbaa077cece3de82be", "version_major": 2, "version_minor": 0 }, @@ -10688,7 +10688,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6befa35c69384a798017549187005c0a", + "model_id": "a7ba6569b69b499c811b42d2467c04bd", "version_major": 2, "version_minor": 0 }, @@ -10702,7 +10702,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a8e454334bab428a8b01674e267341c6", + "model_id": "266989bf63f64eed87c9555427b4f677", "version_major": 2, "version_minor": 0 }, @@ -10716,7 +10716,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "287543c702ae447aa3e882ba33e7d6b4", + "model_id": "a66aa5742fe9469c82fbb915cac9c8a9", "version_major": 2, "version_minor": 0 }, @@ -10730,7 +10730,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "df28d2e0f1844cc885565ea84371c8af", + "model_id": "6c0e147c9364464e9670fd4980314c9c", "version_major": 2, "version_minor": 0 }, @@ -10744,7 +10744,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "88b7e4f505984c9ca0f0bf666ac7c4e8", + "model_id": "6fd5f4f2855e4fce8201e10ece918a51", "version_major": 2, "version_minor": 0 }, @@ -10758,7 +10758,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "53f8f06f3e6d42729bc93d467b97a5d6", + "model_id": "e385f56112894b8c935f7e2a7debd58d", "version_major": 2, "version_minor": 0 }, @@ -10772,7 +10772,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a25f3c4905cc4dabba36ce433c67c7c7", + "model_id": "5b26b461773349008110430c30377cd6", "version_major": 2, "version_minor": 0 }, @@ -10786,7 +10786,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a63b8e0d815247ffa4373becf244f056", + "model_id": "1cd9107720bb48f4ada2b060bf63d0de", "version_major": 2, "version_minor": 0 }, @@ -10800,7 +10800,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4a0ddd8e19a74808820b7fd8b46155d4", + "model_id": "e02b1fc939c3428bb11ceb22230bae30", "version_major": 2, "version_minor": 0 }, @@ -10814,7 +10814,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "882979888cd947a58c0694bf38e31a0d", + "model_id": "b902cc5b579f4276b8856f0d51f6e37e", "version_major": 2, "version_minor": 0 }, @@ -10828,7 +10828,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "640486deb53046f5a47e0620d7755348", + "model_id": "55730795d7a14be9aa6ea86a25c5c08e", "version_major": 2, "version_minor": 0 }, @@ -10842,7 +10842,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "008c9cf2d91d4ea58070dd5d5fb9bf78", + "model_id": "f0299a2a82ac4295b8f5b6db67d9d76f", "version_major": 2, "version_minor": 0 }, @@ -10856,7 +10856,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "65565be3d8c34201b47fbbce7a295699", + "model_id": "1f80a26f4e784aef8306db45d5d0e14b", "version_major": 2, "version_minor": 0 }, @@ -10870,7 +10870,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b75fcca26a548f48f15e88fe0bbc2e8", + "model_id": "5e7b691b0ad544aa9b6dc2cfde8d265c", "version_major": 2, "version_minor": 0 }, @@ -10884,7 +10884,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e6a0f90a27d4dedacf28f7e9d035e9a", + "model_id": "2e318ac0166344aba2babeb62ccfc184", "version_major": 2, "version_minor": 0 }, @@ -10898,7 +10898,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "df5d6abf66dc447a8f388128ce8053ec", + "model_id": "4d8155346fe84fa6adecdc0eedea8201", "version_major": 2, "version_minor": 0 }, @@ -10912,7 +10912,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7cea5180a25e4a71a2efbf8625314d47", + "model_id": "3e30a30859254520b6c65272eb8f6c4f", "version_major": 2, "version_minor": 0 }, @@ -10926,7 +10926,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "85edf7fea9d348bfac9acfb54488bdd5", + "model_id": "dcd536e983974834b83e92c184e918d9", "version_major": 2, "version_minor": 0 }, @@ -10940,7 +10940,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1afc6096951d4e4e8d27a2bb43fae56f", + "model_id": "d1f00cec54cf4bc582dad918e90d8daa", "version_major": 2, "version_minor": 0 }, @@ -10954,7 +10954,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c4974416bab4cee8c0dd45897bef700", + "model_id": "67d308ba71594b4aab4e472b517f52e1", "version_major": 2, "version_minor": 0 }, @@ -10968,7 +10968,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "97399b8f9c2a4ef3a4dcca1d979b4c0c", + "model_id": "bc50c13a6f004f5db456ee3ad1e40814", "version_major": 2, "version_minor": 0 }, @@ -10982,7 +10982,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7a969c062f3c4d1f86e9b33e94a533a4", + "model_id": "3c62936ad7574354b268292fc67b487f", "version_major": 2, "version_minor": 0 }, @@ -10996,7 +10996,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5dee28017b4745f7ac783ef078b7ab8e", + "model_id": "aa886536e5b24592a2389fa0bdbe0152", "version_major": 2, "version_minor": 0 }, @@ -11010,7 +11010,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5071cf74e1d645868fa01fff086169e8", + "model_id": "333e29af51404ab48b3f2c2e2c9352dc", "version_major": 2, "version_minor": 0 }, @@ -11024,7 +11024,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "91f8e16d84a74da0986c44d80850f88b", + "model_id": "6d238d9a6ec04a609d05be05ceeffc4e", "version_major": 2, "version_minor": 0 }, @@ -11038,7 +11038,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3f8812b6e6424b57ae0905178afa9d0d", + "model_id": "21ce6bbda8d243398d175102dc54ac80", "version_major": 2, "version_minor": 0 }, @@ -11052,7 +11052,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd56412270d34c3dab56a4fbc614a5bb", + "model_id": "81114d10f7dd4c378ae715b936229824", "version_major": 2, "version_minor": 0 }, @@ -11066,7 +11066,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1eee6ccaeb034f25bb62d170d38124ff", + "model_id": "c76318f0b171444e9b6b97bbf1dd6331", "version_major": 2, "version_minor": 0 }, @@ -11080,7 +11080,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4413e352491b46a0ab65adefbcd2e329", + "model_id": "88e6027a7e93436a995141b254192942", "version_major": 2, "version_minor": 0 }, @@ -11094,7 +11094,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d9abf24d3ecd465c98b22fd7dbf9d7d3", + "model_id": "36ba7717e843456dbc459cf0b0913e5b", "version_major": 2, "version_minor": 0 }, @@ -11108,7 +11108,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e90d794d17fa4110b1d3a12cdf8f2c0f", + "model_id": "35ca532d07ad40aaaa9dc7003db7da9c", "version_major": 2, "version_minor": 0 }, @@ -11122,7 +11122,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4836ff402ca9424ba74f4dc2ff377f67", + "model_id": "330e5a9c964848398c769ae0e129e878", "version_major": 2, "version_minor": 0 }, @@ -11136,7 +11136,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "835d4f2cf2f6470aacb894c5224a8ad3", + "model_id": "ca8725968af5442f8017e4f94300b08c", "version_major": 2, "version_minor": 0 }, @@ -11150,7 +11150,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a39060ae14954756a1ed37241a46bb0f", + "model_id": "4d3037213adc4e178357968a23139360", "version_major": 2, "version_minor": 0 }, @@ -11164,7 +11164,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "de20d56d9f114d3887d3f0582860068b", + "model_id": "3b36152b38a84063977a0e83966bd7ca", "version_major": 2, "version_minor": 0 }, @@ -11178,7 +11178,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "836794bde12a4eefaaebcc56faffea1d", + "model_id": "a0883f4d5dff48478902b3182791e019", "version_major": 2, "version_minor": 0 }, @@ -11192,7 +11192,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dd1c65ce3447415eb38674ffbecbd927", + "model_id": "21f0113468f74531b158f17e1f3e0f95", "version_major": 2, "version_minor": 0 }, @@ -11206,7 +11206,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c2763a3d80b54c6fb0fd39068300c355", + "model_id": "2a697f733ef04805a70493ad21cc16af", "version_major": 2, "version_minor": 0 }, @@ -11220,7 +11220,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cb68e06e9e024f56a451914a343739e1", + "model_id": "360547fd0f8b45418a543c5d3d848490", "version_major": 2, "version_minor": 0 }, @@ -11234,7 +11234,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c69c8e1c1974ffda175882c107611ad", + "model_id": "a372fd8dc403490cb72b985d361624da", "version_major": 2, "version_minor": 0 }, @@ -11248,7 +11248,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "55824e3969c64be6bb0b7ef46dace031", + "model_id": "4ae4f48dd196456ba0bc5a0128cd8dc1", "version_major": 2, "version_minor": 0 }, @@ -11262,7 +11262,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4abcf3c39ec04d44aff96291edc23c3f", + "model_id": "5fbba249b6344ab69fa28e2f1e37a644", "version_major": 2, "version_minor": 0 }, @@ -11276,7 +11276,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "744f8d0c4783488289a4fbc17d00df4c", + "model_id": "ab59d9e0e61445c688994dcce739804d", "version_major": 2, "version_minor": 0 }, @@ -11290,7 +11290,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1d8aa1a52bf74ab98aba81a5b20489a1", + "model_id": "1cf29935afba41de864cfac0263ff043", "version_major": 2, "version_minor": 0 }, @@ -11304,7 +11304,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "92614910435c4e73ad86777add1b99ca", + "model_id": "af424528392d41dcaee74f0e044176f2", "version_major": 2, "version_minor": 0 }, @@ -11318,7 +11318,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "14fd13eb169045abb1b12e0679284358", + "model_id": "4d5f7a7f20974d778192a3fd31077932", "version_major": 2, "version_minor": 0 }, @@ -11332,7 +11332,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4cc6880583894c7d95948873482bf015", + "model_id": "d6e93c47c6e94061a927579eb0233e56", "version_major": 2, "version_minor": 0 }, @@ -11346,7 +11346,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "441993f972c84ba087c3c24d203b9181", + "model_id": "590945d2877049fb8e88254b03ec168c", "version_major": 2, "version_minor": 0 }, @@ -11360,7 +11360,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8f1b34be0067445798ff759ba9a6f110", + "model_id": "2fda3b5616f840d68b523f3d2964e3d4", "version_major": 2, "version_minor": 0 }, @@ -11374,7 +11374,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5f5151b450024d75a017b1f912d1d648", + "model_id": "5eff678b8e244da7bac26be31f56f374", "version_major": 2, "version_minor": 0 }, @@ -11388,7 +11388,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a1fa964b2de4461ab29db9e17d00bb0b", + "model_id": "cb3a66e27f574f74bbb77562b77ec981", "version_major": 2, "version_minor": 0 }, @@ -11402,7 +11402,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a6b73d5161124bfda6f170b7088cb702", + "model_id": "b1c71f6f5c8c4ed9b0a13c6392663eee", "version_major": 2, "version_minor": 0 }, @@ -11416,7 +11416,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1cf5333655cf452ab806ba82d4082b7d", + "model_id": "8619101b833e4d9abdc590466f7dde45", "version_major": 2, "version_minor": 0 }, @@ -11430,7 +11430,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6f22e644b30a43f484c0904f8d478e47", + "model_id": "ad5523cfc6374517b9fbd0cb7fad69ce", "version_major": 2, "version_minor": 0 }, @@ -11544,7 +11544,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.15" + "version": "3.11.14" } }, "nbformat": 4, diff --git a/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb index 331dfe28..56533400 100644 --- a/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb +++ b/0.preprocessing_data/notebooks/2.perform_file_corruption_checks.ipynb @@ -124,22 +124,14 @@ "# check if bandicoot is set\n", "bandicoot_path = pathlib.Path(os.path.expanduser(\"~/mnt/bandicoot\")).resolve()\n", "\n", - "bandicoot = False" + "bandicoot = True" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Raw image dir: /home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline\n" - ] - } - ], + "outputs": [], "source": [ "if bandicoot:\n", " # comment out depending on whose computer you are on\n", @@ -156,18 +148,16 @@ " ).resolve(strict=True)\n", " # Jenna's computer\n", " # raw_image_dir_local = pathlib.Path(\"/media/18tbdrive/GFF_organoid_data/\")\n", - " output_base_dir = root_dir\n", - "print(f\"Raw image dir: {root_dir}\")" + " output_base_dir = raw_image_dir" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "patient_ids\n", - "patient_id_file_path = pathlib.Path(f\"{raw_image_dir}/data/patient_IDs.txt\").resolve(\n", + "patient_id_file_path = pathlib.Path(f\"{root_dir}/data/patient_IDs.txt\").resolve(\n", " strict=True\n", ")\n", "list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist()" @@ -182,18 +172,34 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'NF0031_T1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0031_T1/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0031_T1/zstack_images')},\n", - " 'NF0035_T1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0035_T1/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0035_T1/zstack_images')},\n", - " 'NF0037_T1-Z-0.1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.1/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.1/zstack_images')},\n", - " 'NF0037_T1-Z-0.2': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.2/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.2/zstack_images')},\n", - " 'NF0037_T1-Z-0.5': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-0.5/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-0.5/zstack_images')},\n", - " 'NF0037_T1-Z-1': {'raw_images': PosixPath('/home/lippincm/Desktop/20TB_A/NF1_Patient_organoids/data/NF0037_T1-Z-1/raw_images'),\n", - " 'zstack_output': PosixPath('/home/lippincm/Documents/GFF_3D_organoid_profiling_pipeline/data/NF0037_T1-Z-1/zstack_images')}}\n" + "{'NF0014_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0014_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0014_T1/zstack_images')},\n", + " 'NF0016_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0016_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0016_T1/zstack_images')},\n", + " 'NF0018_T6': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0018_T6/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0018_T6/zstack_images')},\n", + " 'NF0021_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0021_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0021_T1/zstack_images')},\n", + " 'NF0030_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0030_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0030_T1/zstack_images')},\n", + " 'NF0031_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0031_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0031_T1/zstack_images')},\n", + " 'NF0035_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0035_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0035_T1/zstack_images')},\n", + " 'NF0037_T1-Z-0.1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.1/zstack_images')},\n", + " 'NF0037_T1-Z-0.2': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.2/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.2/zstack_images')},\n", + " 'NF0037_T1-Z-0.5': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.5/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-0.5/zstack_images')},\n", + " 'NF0037_T1-Z-1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0037_T1-Z-1/zstack_images')},\n", + " 'NF0040_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0040_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/NF0040_T1/zstack_images')},\n", + " 'SARCO219_T2': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/SARCO219_T2/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/SARCO219_T2/zstack_images')},\n", + " 'SARCO361_T1': {'raw_images': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/SARCO361_T1/raw_images'),\n", + " 'zstack_output': PosixPath('/home/lippincm/mnt/bandicoot/NF1_organoid_data/data/SARCO361_T1/zstack_images')}}\n" ] } ], @@ -202,7 +208,7 @@ "for patient in list_of_patients:\n", " patient_input_dict[patient] = {\n", " \"raw_images\": pathlib.Path(\n", - " f\"{raw_image_dir}/data/{patient}/raw_images\"\n", + " f\"{output_base_dir}/data/{patient}/raw_images\"\n", " ).resolve(),\n", " \"zstack_output\": pathlib.Path(\n", " f\"{output_base_dir}/data/{patient}/zstack_images\"\n", @@ -231,12 +237,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3f485f31c585441a8a8b28af10bb7c01", + "model_id": "03df7ee9d6e148c68f98d81eef652692", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "Processing patients: 0%| | 0/6 [00:00 None: # check if bandicoot is set bandicoot_path = pathlib.Path(os.path.expanduser("~/mnt/bandicoot")).resolve() -bandicoot = False +bandicoot = True # In[4]: @@ -120,15 +120,13 @@ def max_z_projection(patient: str, well_fov: str) -> None: ).resolve(strict=True) # Jenna's computer # raw_image_dir_local = pathlib.Path("/media/18tbdrive/GFF_organoid_data/") - output_base_dir = root_dir -print(f"Raw image dir: {root_dir}") + output_base_dir = raw_image_dir -# In[ ]: +# In[5]: -patient_ids -patient_id_file_path = pathlib.Path(f"{raw_image_dir}/data/patient_IDs.txt").resolve( +patient_id_file_path = pathlib.Path(f"{root_dir}/data/patient_IDs.txt").resolve( strict=True ) list_of_patients = pd.read_csv(patient_id_file_path, header=None)[0].tolist() @@ -141,7 +139,7 @@ def max_z_projection(patient: str, well_fov: str) -> None: for patient in list_of_patients: patient_input_dict[patient] = { "raw_images": pathlib.Path( - f"{raw_image_dir}/data/{patient}/raw_images" + f"{output_base_dir}/data/{patient}/raw_images" ).resolve(), "zstack_output": pathlib.Path( f"{output_base_dir}/data/{patient}/zstack_images" From ae1ecbfd75dd42e120bad05c5d60af9a925ecfdc Mon Sep 17 00:00:00 2001 From: MikeLippincott <1michaell2017@gmail.com> Date: Mon, 3 Nov 2025 11:41:18 -0700 Subject: [PATCH 5/5] add scripts --- .../1.make_zstack_and_copy_over.ipynb | 221 +++++++++--------- .../scripts/1.make_zstack_and_copy_over.py | 221 +++++++++--------- 2 files changed, 222 insertions(+), 220 deletions(-) diff --git a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb index b9cd8ba2..7b87aae5 100644 --- a/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb +++ b/0.preprocessing_data/notebooks/1.make_zstack_and_copy_over.ipynb @@ -125,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "8b44eb61", "metadata": {}, "outputs": [], @@ -144,82 +144,83 @@ "\"\"\"\n", "\n", "dir_mapping = {\n", - " # \"NF0014_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"NF0014_T2\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"NF0016_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"NF0017\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0017/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1 # },\n", - " # \"NF0018_T6\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"NF0021_T1\": {\n", - " # \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", - " # strict=True\n", - " # ),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"NF0030_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", + " \"NF0014_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0014_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0014_T2\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0014_T2/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0016_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0016_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0017\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0017/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0018_T6\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0018_T6/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0021_T1\": {\n", + " \"parent\": pathlib.Path(f\"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined\").resolve(\n", + " strict=True\n", + " ),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0021_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"NF0030_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0030_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", " \"NF0031_T1_part_I\": {\n", " \"parent\": pathlib.Path(\n", " f\"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2\"\n", @@ -308,39 +309,39 @@ " \"well_position\": -1,\n", " \"channel_position\": -3,\n", " },\n", - " # \"NF0040_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"SACRO219_T1\": {\n", - " # \"parent\": pathlib.Path(\n", - " # f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", - " # ).resolve(strict=True),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", - " # \"SARCO361_T1\": {\n", - " # \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", - " # strict=True\n", - " # ),\n", - " # \"destination\": pathlib.Path(\n", - " # f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", - " # ).resolve(),\n", - " # \"times_nested\": 2,\n", - " # \"well_position\": 0,\n", - " # \"channel_position\": 1,\n", - " # },\n", + " \"NF0040_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/NF0040_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"SACRO219_T1\": {\n", + " \"parent\": pathlib.Path(\n", + " f\"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/\"\n", + " ).resolve(strict=True),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/SARCO219_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", + " \"SARCO361_T1\": {\n", + " \"parent\": pathlib.Path(f\"{raw_image_dir}/SARC0361/SARC0361 Combined/\").resolve(\n", + " strict=True\n", + " ),\n", + " \"destination\": pathlib.Path(\n", + " f\"{output_base_dir}/data/SARCO361_T1/zstack_images\"\n", + " ).resolve(),\n", + " \"times_nested\": 2,\n", + " \"well_position\": 0,\n", + " \"channel_position\": 1,\n", + " },\n", "}" ] }, diff --git a/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py b/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py index 40a4d1b0..c5b138a9 100644 --- a/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py +++ b/0.preprocessing_data/scripts/1.make_zstack_and_copy_over.py @@ -87,7 +87,7 @@ # ## Define paths -# In[5]: +# In[ ]: # Define parent and destination directories in a single dictionary @@ -104,82 +104,83 @@ """ dir_mapping = { - # "NF0014_T1": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0014_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "NF0014_T2": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0014_T2/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "NF0016_T1": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0016_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "NF0017": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0017/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1 # }, - # "NF0018_T6": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0018_T6/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "NF0021_T1": { - # "parent": pathlib.Path(f"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined").resolve( - # strict=True - # ), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0021_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "NF0030_T1": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0030_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, + "NF0014_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0014-Thawed 3 (Raw image files)-Combined/NF0014-Thawed 3 (Raw image files)-Combined copy" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0014_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0014_T2": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0014-T2 Cell Painting/NF0014-T2 Combined/" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0014_T2/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0016_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0016 Cell Painting-Pilot Drug Screening-selected/NF0016-Cell Painting Images/NF0016-images copy" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0016_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0017": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0017-T3-P7 (AGP, Mito Parameter optimization)/Acquisition 03-07-2025" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0017/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0018_T6": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0018 (T6) Cell Painting-Pilot Drug Screeining/NF0018-Cell Painting Images/NF0018-All Acquisitions" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0018_T6/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0021_T1": { + "parent": pathlib.Path(f"{raw_image_dir}/NF0021-T1/NF0021-T1 Combined").resolve( + strict=True + ), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0021_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "NF0030_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/NF0030 Cell Painting/NF0030 Cell Painting/NF0030-Cell Painting Images/Combined" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0030_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, "NF0031_T1_part_I": { "parent": pathlib.Path( f"{raw_image_dir}/NF0031-T1 Combined 1_2/NF0031-T1 Combined 1:2" @@ -268,39 +269,39 @@ "well_position": -1, "channel_position": -3, }, - # "NF0040_T1": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/NF0040_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "SACRO219_T1": { - # "parent": pathlib.Path( - # f"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/" - # ).resolve(strict=True), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/SARCO219_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, - # "SARCO361_T1": { - # "parent": pathlib.Path(f"{raw_image_dir}/SARC0361/SARC0361 Combined/").resolve( - # strict=True - # ), - # "destination": pathlib.Path( - # f"{output_base_dir}/data/SARCO361_T1/zstack_images" - # ).resolve(), - # "times_nested": 2, - # "well_position": 0, - # "channel_position": 1, - # }, + "NF0040_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040) Cell Painting/SARC0376 (NF0040)-Cell Painting Images/Combined" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/NF0040_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "SACRO219_T1": { + "parent": pathlib.Path( + f"{raw_image_dir}/SARC0219-T2 Cell Painting-selected/SARC0219-T2 Combined Cell Painting images/SARC0219-T2 Combined/" + ).resolve(strict=True), + "destination": pathlib.Path( + f"{output_base_dir}/data/SARCO219_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, + "SARCO361_T1": { + "parent": pathlib.Path(f"{raw_image_dir}/SARC0361/SARC0361 Combined/").resolve( + strict=True + ), + "destination": pathlib.Path( + f"{output_base_dir}/data/SARCO361_T1/zstack_images" + ).resolve(), + "times_nested": 2, + "well_position": 0, + "channel_position": 1, + }, }