{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generate Population from National Transport Survey Data\n",
"\n",
"Generate caveat schedules and attributes inputs from UK NTS data.\n",
"\n",
"Provided example uses toy data. You can access the real [UK travel survey from 2002-2021](https://beta.ukdataservice.ac.uk/datacatalogue/studies/study?id=5340) from the [UK Data Service](https://beta.ukdataservice.ac.uk)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"\n",
"import pandas as pd\n",
"from pam import read\n",
"from pam.core import Population\n",
"from pam.utils import datetime_to_matsim_time\n",
"\n",
"from caveat.evaluate.describe.times import (\n",
" joint_time_distributions_plot,\n",
" times_distributions_plot,\n",
")\n",
"from caveat.evaluate.describe.transitions import sequence_prob_plot"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"dir = Path(\"data/dummyNTS/\")\n",
"trips_csv = dir / \"trips.tab\"\n",
"attributes_csv = dir / \"individuals.tab\"\n",
"hhs_csv = dir / \"households.tab\"\n",
"\n",
"# dir = Path(\"/home/fred/Data/UKDA-5340-tab/tab\")\n",
"# trips_csv = dir / \"trip_eul_2002-2023.tab\"\n",
"# attributes_csv = dir / \"individual_eul_2002-2023.tab\"\n",
"# hhs_csv = dir / \"household_eul_2002-2023.tab\"\n",
"\n",
"assert dir.exists()\n",
"assert trips_csv.exists()\n",
"assert attributes_csv.exists()\n",
"assert hhs_csv.exists()\n",
"\n",
"years = [2021]\n",
"\n",
"write_dir = Path(\"tmp\")\n",
"write_dir.mkdir(exist_ok=True)\n",
"schedules_path = write_dir / \"nts_schedules.csv\"\n",
"attributes_path = write_dir / \"nts_attributes.csv\"\n",
"home_schedules_path = write_dir / \"nts_home_schedules.csv\"\n",
"home_attributes_path = write_dir / \"nts_home_attributes.csv\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" iid | \n",
" hid | \n",
" seq | \n",
" mode | \n",
" oact | \n",
" dact | \n",
" freq | \n",
" tst | \n",
" tet | \n",
" ozone | \n",
" dzone | \n",
" pid | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" car | \n",
" home | \n",
" visit | \n",
" 0.989618 | \n",
" 675 | \n",
" 683 | \n",
" 7 | \n",
" 7 | \n",
" 1-1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" car | \n",
" visit | \n",
" other | \n",
" 1.002945 | \n",
" 720 | \n",
" 735 | \n",
" 7 | \n",
" 7 | \n",
" 1-1 | \n",
"
\n",
" \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 3 | \n",
" car | \n",
" other | \n",
" visit | \n",
" 0.989618 | \n",
" 770 | \n",
" 780 | \n",
" 7 | \n",
" 7 | \n",
" 1-1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 1 | \n",
" 4 | \n",
" car | \n",
" visit | \n",
" home | \n",
" 0.989618 | \n",
" 1110 | \n",
" 1130 | \n",
" 7 | \n",
" 7 | \n",
" 1-1 | \n",
"
\n",
" \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" car | \n",
" home | \n",
" visit | \n",
" 0.999891 | \n",
" 760 | \n",
" 770 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 5 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" car | \n",
" visit | \n",
" visit | \n",
" 0.999891 | \n",
" 790 | \n",
" 805 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 6 | \n",
" 1 | \n",
" 1 | \n",
" 3 | \n",
" car | \n",
" visit | \n",
" other | \n",
" 1.061665 | \n",
" 810 | \n",
" 825 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 7 | \n",
" 1 | \n",
" 1 | \n",
" 4 | \n",
" car | \n",
" other | \n",
" other | \n",
" 1.061665 | \n",
" 845 | \n",
" 852 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 8 | \n",
" 1 | \n",
" 1 | \n",
" 5 | \n",
" car | \n",
" other | \n",
" visit | \n",
" 0.999891 | \n",
" 865 | \n",
" 873 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 9 | \n",
" 1 | \n",
" 1 | \n",
" 6 | \n",
" car | \n",
" visit | \n",
" escort | \n",
" 1.006313 | \n",
" 908 | \n",
" 914 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 10 | \n",
" 1 | \n",
" 1 | \n",
" 7 | \n",
" car | \n",
" escort | \n",
" home | \n",
" 1.006313 | \n",
" 922 | \n",
" 926 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 11 | \n",
" 1 | \n",
" 1 | \n",
" 8 | \n",
" car | \n",
" home | \n",
" shop | \n",
" 1.111870 | \n",
" 940 | \n",
" 955 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 12 | \n",
" 1 | \n",
" 1 | \n",
" 9 | \n",
" car | \n",
" shop | \n",
" visit | \n",
" 0.999891 | \n",
" 1015 | \n",
" 1032 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 13 | \n",
" 1 | \n",
" 1 | \n",
" 10 | \n",
" car | \n",
" visit | \n",
" home | \n",
" 0.999891 | \n",
" 1080 | \n",
" 1108 | \n",
" 7 | \n",
" 7 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 14 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" car | \n",
" home | \n",
" other | \n",
" 1.037060 | \n",
" 770 | \n",
" 785 | \n",
" 7 | \n",
" 7 | \n",
" 1-3 | \n",
"
\n",
" \n",
" 15 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" car | \n",
" other | \n",
" home | \n",
" 1.037060 | \n",
" 905 | \n",
" 917 | \n",
" 7 | \n",
" 7 | \n",
" 1-3 | \n",
"
\n",
" \n",
" 16 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" car | \n",
" home | \n",
" escort | \n",
" 1.062430 | \n",
" 738 | \n",
" 752 | \n",
" 7 | \n",
" 7 | \n",
" 1-4 | \n",
"
\n",
" \n",
" 17 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" car | \n",
" escort | \n",
" work | \n",
" 1.062430 | \n",
" 755 | \n",
" 761 | \n",
" 7 | \n",
" 7 | \n",
" 1-4 | \n",
"
\n",
" \n",
" 18 | \n",
" 1 | \n",
" 1 | \n",
" 3 | \n",
" car | \n",
" work | \n",
" home | \n",
" 1.017644 | \n",
" 1050 | \n",
" 1076 | \n",
" 7 | \n",
" 7 | \n",
" 1-4 | \n",
"
\n",
" \n",
" 19 | \n",
" 1 | \n",
" 1 | \n",
" 4 | \n",
" car | \n",
" home | \n",
" other | \n",
" 1.061431 | \n",
" 1220 | \n",
" 1223 | \n",
" 7 | \n",
" 7 | \n",
" 1-4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" iid hid seq mode oact dact freq tst tet ozone dzone \\\n",
"0 1 1 1 car home visit 0.989618 675 683 7 7 \n",
"1 1 1 2 car visit other 1.002945 720 735 7 7 \n",
"2 1 1 3 car other visit 0.989618 770 780 7 7 \n",
"3 1 1 4 car visit home 0.989618 1110 1130 7 7 \n",
"4 1 1 1 car home visit 0.999891 760 770 7 7 \n",
"5 1 1 2 car visit visit 0.999891 790 805 7 7 \n",
"6 1 1 3 car visit other 1.061665 810 825 7 7 \n",
"7 1 1 4 car other other 1.061665 845 852 7 7 \n",
"8 1 1 5 car other visit 0.999891 865 873 7 7 \n",
"9 1 1 6 car visit escort 1.006313 908 914 7 7 \n",
"10 1 1 7 car escort home 1.006313 922 926 7 7 \n",
"11 1 1 8 car home shop 1.111870 940 955 7 7 \n",
"12 1 1 9 car shop visit 0.999891 1015 1032 7 7 \n",
"13 1 1 10 car visit home 0.999891 1080 1108 7 7 \n",
"14 1 1 1 car home other 1.037060 770 785 7 7 \n",
"15 1 1 2 car other home 1.037060 905 917 7 7 \n",
"16 1 1 1 car home escort 1.062430 738 752 7 7 \n",
"17 1 1 2 car escort work 1.062430 755 761 7 7 \n",
"18 1 1 3 car work home 1.017644 1050 1076 7 7 \n",
"19 1 1 4 car home other 1.061431 1220 1223 7 7 \n",
"\n",
" pid \n",
"0 1-1 \n",
"1 1-1 \n",
"2 1-1 \n",
"3 1-1 \n",
"4 1-2 \n",
"5 1-2 \n",
"6 1-2 \n",
"7 1-2 \n",
"8 1-2 \n",
"9 1-2 \n",
"10 1-2 \n",
"11 1-2 \n",
"12 1-2 \n",
"13 1-2 \n",
"14 1-3 \n",
"15 1-3 \n",
"16 1-4 \n",
"17 1-4 \n",
"18 1-4 \n",
"19 1-4 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"travel_diaries = pd.read_csv(\n",
" trips_csv,\n",
" sep=\"\\t\",\n",
" usecols=[\n",
" \"TripID\",\n",
" \"JourSeq\",\n",
" \"DayID\",\n",
" \"IndividualID\",\n",
" \"HouseholdID\",\n",
" \"MainMode_B04ID\",\n",
" \"TripPurpFrom_B01ID\",\n",
" \"TripPurpTo_B01ID\",\n",
" \"TripStart\",\n",
" \"TripEnd\",\n",
" \"TripOrigGOR_B02ID\",\n",
" \"TripDestGOR_B02ID\",\n",
" \"W5\",\n",
" \"SurveyYear\",\n",
" ],\n",
")\n",
"travel_diaries = travel_diaries.rename(\n",
" columns={\n",
" \"TripID\": \"tid\",\n",
" \"JourSeq\": \"seq\",\n",
" \"DayID\": \"day\",\n",
" \"IndividualID\": \"iid\",\n",
" \"HouseholdID\": \"hid\",\n",
" \"TripOrigGOR_B02ID\": \"ozone\",\n",
" \"TripDestGOR_B02ID\": \"dzone\",\n",
" \"TripPurpFrom_B01ID\": \"oact\",\n",
" \"TripPurpTo_B01ID\": \"dact\",\n",
" \"MainMode_B04ID\": \"mode\",\n",
" \"TripStart\": \"tst\",\n",
" \"TripEnd\": \"tet\",\n",
" \"W5\": \"freq\",\n",
" \"SurveyYear\": \"year\",\n",
" }\n",
")\n",
"\n",
"travel_diaries = travel_diaries[travel_diaries.year.isin(years)]\n",
"\n",
"travel_diaries.tst = pd.to_numeric(travel_diaries.tst, errors=\"coerce\")\n",
"travel_diaries.tet = pd.to_numeric(travel_diaries.tet, errors=\"coerce\")\n",
"travel_diaries.ozone = pd.to_numeric(travel_diaries.ozone, errors=\"coerce\")\n",
"travel_diaries.dzone = pd.to_numeric(travel_diaries.dzone, errors=\"coerce\")\n",
"travel_diaries.freq = pd.to_numeric(travel_diaries.freq, errors=\"coerce\")\n",
"\n",
"travel_diaries[\"did\"] = travel_diaries.groupby(\"iid\")[\"day\"].transform(\n",
" lambda x: pd.factorize(x)[0] + 1\n",
")\n",
"travel_diaries[\"pid\"] = [\n",
" f\"{i}-{d}\" for i, d in zip(travel_diaries.iid, travel_diaries.did)\n",
"]\n",
"\n",
"travel_diaries = travel_diaries.loc[\n",
" travel_diaries.groupby(\"pid\")\n",
" .filter(lambda x: pd.isnull(x).sum().sum() < 1)\n",
" .index\n",
"]\n",
"# travel_diaries.freq = travel_diaries.freq / travel_diaries.groupby(\"iid\").day.transform(\"nunique\")\n",
"travel_diaries.loc[travel_diaries.tet == 0, \"tet\"] = 1440\n",
"\n",
"travel_diaries = travel_diaries.drop([\"tid\", \"day\", \"year\", \"did\"], axis=1)\n",
"\n",
"mode_mapping = {\n",
" 1: \"walk\",\n",
" 2: \"bike\",\n",
" 3: \"car\", #'Car/van driver'\n",
" 4: \"car\", #'Car/van driver'\n",
" 5: \"car\", #'Motorcycle',\n",
" 6: \"car\", #'Other private transport',\n",
" 7: \"pt\", # Bus in London',\n",
" 8: \"pt\", #'Other local bus',\n",
" 9: \"pt\", #'Non-local bus',\n",
" 10: \"pt\", #'London Underground',\n",
" 11: \"pt\", #'Surface Rail',\n",
" 12: \"car\", #'Taxi/minicab',\n",
" 13: \"pt\", #'Other public transport',\n",
" -10: \"DEAD\",\n",
" -8: \"NA\",\n",
"}\n",
"\n",
"purp_mapping = {\n",
" 1: \"work\",\n",
" 2: \"work\", #'In course of work',\n",
" 3: \"education\",\n",
" 4: \"shop\", #'Food shopping',\n",
" 5: \"shop\", #'Non food shopping',\n",
" 6: \"medical\", #'Personal business medical',\n",
" 7: \"other\", #'Personal business eat/drink',\n",
" 8: \"other\", #'Personal business other',\n",
" 9: \"other\", #'Eat/drink with friends',\n",
" 10: \"visit\", #'Visit friends',\n",
" 11: \"other\", #'Other social',\n",
" 12: \"other\", #'Entertain/ public activity',\n",
" 13: \"other\", #'Sport: participate',\n",
" 14: \"home\", #'Holiday: base',\n",
" 15: \"other\", #'Day trip/just walk',\n",
" 16: \"other\", #'Other non-escort',\n",
" 17: \"escort\", #'Escort home',\n",
" 18: \"escort\", #'Escort work',\n",
" 19: \"escort\", #'Escort in course of work',\n",
" 20: \"escort\", #'Escort education',\n",
" 21: \"escort\", #'Escort shopping/personal business',\n",
" 22: \"escort\", #'Other escort',\n",
" 23: \"home\", #'Home',\n",
" -10: \"DEAD\",\n",
" -8: \"NA\",\n",
"}\n",
"\n",
"travel_diaries[\"mode\"] = travel_diaries[\"mode\"].map(mode_mapping)\n",
"travel_diaries[\"oact\"] = travel_diaries[\"oact\"].map(purp_mapping)\n",
"travel_diaries[\"dact\"] = travel_diaries[\"dact\"].map(purp_mapping)\n",
"travel_diaries.tst = travel_diaries.tst.astype(int)\n",
"travel_diaries.tet = travel_diaries.tet.astype(int)\n",
"\n",
"travel_diaries.head(20)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" iid | \n",
" hid | \n",
" age | \n",
" gender | \n",
" ethnicity | \n",
" education | \n",
" license | \n",
" car_access | \n",
" work_status | \n",
" year | \n",
" pid | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 2002003369 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-1 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 2002003369 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-2 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 2002003369 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-3 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 2002003369 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-4 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 2002003369 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" iid hid age gender ethnicity education license car_access \\\n",
"0 1 2002003369 20 2 1 0 1 2 \n",
"0 1 2002003369 20 2 1 0 1 2 \n",
"0 1 2002003369 20 2 1 0 1 2 \n",
"0 1 2002003369 20 2 1 0 1 2 \n",
"0 1 2002003369 20 2 1 0 1 2 \n",
"\n",
" work_status year pid \n",
"0 4 2021 1-1 \n",
"0 4 2021 1-2 \n",
"0 4 2021 1-3 \n",
"0 4 2021 1-4 \n",
"0 4 2021 1-5 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"columns = {\n",
" \"SurveyYear\": \"year\",\n",
" \"IndividualID\": \"iid\",\n",
" \"HouseholdID\": \"hid\",\n",
" \"Age_B01ID\": \"age\",\n",
" \"Sex_B01ID\": \"gender\",\n",
" \"EdAttn1_B01ID\": \"education\",\n",
" \"DrivLic_B02ID\": \"license\",\n",
" \"CarAccess_B01ID\": \"car_access\",\n",
" \"EcoStat_B02ID\": \"work_status\",\n",
" \"EthGroupTS_B02ID\": \"ethnicity\",\n",
"}\n",
"attributes = pd.read_csv(\n",
" attributes_csv, sep=\"\\t\", usecols=columns.keys()\n",
").rename(columns=columns)\n",
"\n",
"attributes = attributes[attributes.year.isin(years)]\n",
"attributes = attributes[attributes.iid.isin(travel_diaries.iid)]\n",
"\n",
"# expand attributes to days and add pid\n",
"pid_to_iid = travel_diaries.set_index(\"pid\")[\"iid\"].to_dict()\n",
"expanded_attributes = []\n",
"for k, v in pid_to_iid.items():\n",
" expanded_attributes.append(attributes[attributes.iid == v].assign(pid=k))\n",
"expanded_attributes = pd.concat(expanded_attributes)\n",
"assert set(expanded_attributes.pid) == set(travel_diaries.pid)\n",
"\n",
"# fix special values to zero (DEAD, NULL, NA, etc)\n",
"for c in [\n",
" \"age\",\n",
" \"gender\",\n",
" \"education\",\n",
" \"license\",\n",
" \"car_access\",\n",
" \"work_status\",\n",
" \"ethnicity\",\n",
"]:\n",
" expanded_attributes.loc[expanded_attributes[c] < 0, c] = 0\n",
" expanded_attributes.loc[expanded_attributes[c].isnull(), c] = 0\n",
"\n",
"expanded_attributes.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" iid | \n",
" age | \n",
" gender | \n",
" ethnicity | \n",
" education | \n",
" license | \n",
" car_access | \n",
" work_status | \n",
" year | \n",
" pid | \n",
" area | \n",
" income | \n",
" hh_size | \n",
" hh_composition | \n",
" hh_children | \n",
" hh_cars | \n",
" hh_bikes | \n",
" hh_motorcycles | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-2 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-3 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-4 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 0 | \n",
" 1 | \n",
" 20 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 4 | \n",
" 2021 | \n",
" 1-5 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" iid age gender ethnicity education license car_access work_status \\\n",
"0 1 20 2 1 0 1 2 4 \n",
"0 1 20 2 1 0 1 2 4 \n",
"0 1 20 2 1 0 1 2 4 \n",
"0 1 20 2 1 0 1 2 4 \n",
"0 1 20 2 1 0 1 2 4 \n",
"\n",
" year pid area income hh_size hh_composition hh_children hh_cars \\\n",
"0 2021 1-1 1 1 1 1 2 1 \n",
"0 2021 1-2 1 1 1 1 2 1 \n",
"0 2021 1-3 1 1 1 1 2 1 \n",
"0 2021 1-4 1 1 1 1 2 1 \n",
"0 2021 1-5 1 1 1 1 2 1 \n",
"\n",
" hh_bikes hh_motorcycles \n",
"0 1 0 \n",
"0 1 0 \n",
"0 1 0 \n",
"0 1 0 \n",
"0 1 0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# additionally extract attributes from household table\n",
"# add them to individual table for simplicity\n",
"columns = {\n",
" \"HouseholdID\": \"hid\",\n",
" \"Settlement2011EW_B04ID\": \"area\",\n",
" \"SurveyYear\": \"year\",\n",
" \"HHIncQISEngTS_B01ID\": \"income\",\n",
" \"HHoldNumPeople\": \"hh_size\",\n",
" \"HHoldStruct_B02ID\": \"hh_composition\",\n",
" \"HHoldNumChildren\": \"hh_children\",\n",
" \"NumCar\": \"hh_cars\",\n",
" \"NumBike\": \"hh_bikes\",\n",
" \"NumMCycle\": \"hh_motorcycles\",\n",
"}\n",
"hhs = pd.read_csv(hhs_csv, sep=\"\\t\", usecols=columns.keys()).rename(\n",
" columns=columns\n",
")\n",
"hhs = hhs[hhs.year.isin(years)]\n",
"\n",
"# add hh attributes to individuals\n",
"for c in [\n",
" \"area\",\n",
" \"income\",\n",
" \"hh_size\",\n",
" \"hh_composition\",\n",
" \"hh_children\",\n",
" \"hh_cars\",\n",
" \"hh_bikes\",\n",
" \"hh_motorcycles\",\n",
"]:\n",
" mapper = hhs.set_index(\"hid\")[c].to_dict()\n",
" expanded_attributes[c] = expanded_attributes.hid.map(mapper)\n",
"\n",
"for c in [\n",
" \"area\",\n",
" \"income\",\n",
" \"hh_size\",\n",
" \"hh_composition\",\n",
" \"hh_children\",\n",
" \"hh_cars\",\n",
" \"hh_bikes\",\n",
" \"hh_motorcycles\",\n",
"]:\n",
" expanded_attributes[c] = (\n",
" pd.to_numeric(expanded_attributes[c], errors=\"coerce\")\n",
" .fillna(0)\n",
" .astype(int)\n",
" )\n",
" expanded_attributes.loc[expanded_attributes[c] < 0, c] = 0\n",
" expanded_attributes.loc[expanded_attributes[c].isnull(), c] = 0\n",
"\n",
"expanded_attributes.drop(\"hid\", axis=1, inplace=True)\n",
"\n",
"expanded_attributes.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"age_mapping = {\n",
" 1: 0,\n",
" 2: 1,\n",
" 3: 3,\n",
" 4: 5,\n",
" 5: 11,\n",
" 6: 16,\n",
" 7: 17,\n",
" 8: 18,\n",
" 9: 19,\n",
" 10: 20,\n",
" 11: 21,\n",
" 12: 26,\n",
" 13: 30,\n",
" 14: 40,\n",
" 15: 50,\n",
" 16: 60,\n",
" 17: 65,\n",
" 18: 70,\n",
" 19: 75,\n",
" 20: 80,\n",
" 21: 85,\n",
"}\n",
"age_group_mapping = {\n",
" 1: \"<5\",\n",
" 2: \"<5\",\n",
" 3: \"<5\",\n",
" 4: \"5-11\",\n",
" 5: \"11-16\",\n",
" 6: \"16-20\",\n",
" 7: \"16-20\",\n",
" 8: \"16-20\",\n",
" 9: \"16-20\",\n",
" 10: \"20-30\",\n",
" 11: \"20-30\",\n",
" 12: \"20-30\",\n",
" 13: \"30-40\",\n",
" 14: \"40-50\",\n",
" 15: \"50-70\",\n",
" 16: \"50-70\",\n",
" 17: \"50-70\",\n",
" 18: \"70+\",\n",
" 19: \"70+\",\n",
" 20: \"70+\",\n",
" 21: \"70+\",\n",
"}\n",
"gender_mapping = {0: \"unknown\", 1: \"M\", 2: \"F\"}\n",
"education_mapping = {0: \"unknown\", 1: \"Y\", 2: \"N\"}\n",
"license_mapping = {0: \"unknown\", 1: \"yes\", 2: \"yes\", 3: \"no\"}\n",
"car_access_mapping = {\n",
" 0: \"unknown\",\n",
" 1: \"yes\",\n",
" 2: \"yes\",\n",
" 3: \"yes\",\n",
" 4: \"yes\",\n",
" 5: \"no\",\n",
" 6: \"no\",\n",
"}\n",
"work_status_mapping = {\n",
" 0: \"unemployed\",\n",
" 1: \"employed\",\n",
" 2: \"employed\",\n",
" 3: \"unemployed\",\n",
" 4: \"unemployed\",\n",
" 5: \"student\",\n",
" 6: \"unemployed\",\n",
"}\n",
"area_mapping = {\n",
" 0: \"unknown\",\n",
" 1: \"suburban\",\n",
" 2: \"urban\",\n",
" 3: \"rural\",\n",
" 4: \"rural\",\n",
" 5: \"scotland\",\n",
"}\n",
"ethnicity_mapping = {0: \"unknown\", 1: \"white\", 2: \"non-white\"}\n",
"hh_composition_mapping = {\n",
" 0: \"unknown\",\n",
" 1: \"1adult\",\n",
" 2: \"2adults\",\n",
" 3: \"3+adults\",\n",
" 4: \"single_parent\",\n",
" 5: \"2adult_1+child\",\n",
" 6: \"3+adult_1+child\",\n",
"}\n",
"mappings = {\n",
" \"age\": age_mapping,\n",
" \"gender\": gender_mapping,\n",
" \"education\": education_mapping,\n",
" \"license\": license_mapping,\n",
" \"car_access\": car_access_mapping,\n",
" \"work_status\": work_status_mapping,\n",
" \"area\": area_mapping,\n",
" \"ethnicity\": ethnicity_mapping,\n",
" \"hh_composition\": hh_composition_mapping,\n",
"}\n",
"\n",
"expanded_attributes[\"age_group\"] = expanded_attributes[\"age\"].map(\n",
" age_group_mapping\n",
")\n",
"\n",
"for c, mapping in mappings.items():\n",
" if c in expanded_attributes.columns:\n",
" expanded_attributes[c] = expanded_attributes[c].map(mapping)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def filter_home_based(population: Population):\n",
" new = Population()\n",
" for _, _, person in population.people():\n",
" if person.plan.first == \"home\" and person.plan.last == \"home\":\n",
" new.add(person)\n",
" return new\n",
"\n",
"\n",
"def squash(before: list, following: list, act=\"home\") -> list:\n",
" if not following:\n",
" return before\n",
" a = before[-1]\n",
" b = following[1]\n",
" if a.act == act and b.act == act:\n",
" a.end_time = b.end_time\n",
" following = following[2:]\n",
" return squash(before, following, act)\n",
" else:\n",
" before = before + following[:2]\n",
" following = following[2:]\n",
" return squash(before, following, act)\n",
"\n",
"\n",
"def squash_population(population: Population, act=\"home\"):\n",
" new = Population()\n",
" for _, _, person in population.people():\n",
" person.plan.day = squash(\n",
" [person.plan.day[0]], person.plan.day[1:], act=act\n",
" )\n",
" new.add(person)\n",
" return new"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using from-to activity parser using 'oact' and 'dact' columns\n",
"Adding pid->hh mapping to persons_attributes from trips.\n",
"\n",
" Unable to load household area ('hzone') - not found in trips_diary or unable to build from attributes.\n",
" Pam will try to infer home location from activities, but this behaviour is not recommended.\n",
" \n",
"Using freq of 'None' for all trips.\n",
" Person pid:2-5 hid:1 plan does not start with 'home' activity: work\n",
" Person pid:2-6 hid:1 plan does not start with 'home' activity: work\n",
" Person pid:2-7 hid:1 plan does not start with 'home' activity: work\n",
" Person pid:3-4 hid:1 plan does not start with 'home' activity: education\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Raw size: {'num_households': 3, 'num_people': 39, 'num_activities': 188, 'num_legs': 149}\n",
"PAM fix: {'num_households': 3, 'num_people': 39, 'num_activities': 175, 'num_legs': 136}\n",
"home based size: {'num_households': 33, 'num_people': 33, 'num_activities': 149, 'num_legs': 116}\n",
"Squash home size: {'num_households': 33, 'num_people': 33, 'num_activities': 147, 'num_legs': 114}\n",
"squash work size: {'num_households': 33, 'num_people': 33, 'num_activities': 147, 'num_legs': 114}\n",
"squash edu size: {'num_households': 33, 'num_people': 33, 'num_activities': 147, 'num_legs': 114}\n",
"PAM 2nd fix: {'num_households': 33, 'num_people': 33, 'num_activities': 147, 'num_legs': 114}\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pam_population = read.load_travel_diary(\n",
" trips=travel_diaries,\n",
" persons_attributes=expanded_attributes,\n",
" trip_freq_as_person_freq=True,\n",
")\n",
"print(\"Raw size: \", pam_population.stats)\n",
"pam_population.fix_plans()\n",
"print(\"PAM fix: \", pam_population.stats)\n",
"pam_population = filter_home_based(pam_population)\n",
"print(\"home based size: \", pam_population.stats)\n",
"pam_population = squash_population(pam_population, \"home\")\n",
"print(\"Squash home size: \", pam_population.stats)\n",
"pam_population = squash_population(pam_population, \"work\")\n",
"print(\"squash work size: \", pam_population.stats)\n",
"pam_population = squash_population(pam_population, \"education\")\n",
"print(\"squash edu size: \", pam_population.stats)\n",
"pam_population.fix_plans()\n",
"print(\"PAM 2nd fix: \", pam_population.stats)\n",
"\n",
"pam_population.random_person().plot()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# 2020\n",
"\n",
"# Raw size: {'num_households': 2675, 'num_people': 25119, 'num_activities': 93189, 'num_legs': 68070}\n",
"# PAM fix: {'num_households': 2675, 'num_people': 25119, 'num_activities': 93159, 'num_legs': 68040}\n",
"# home based size: {'num_households': 23452, 'num_people': 23452, 'num_activities': 87870, 'num_legs': 64418}\n",
"# Squash home size: {'num_households': 23452, 'num_people': 23452, 'num_activities': 87532, 'num_legs': 64080}\n",
"# squash work size: {'num_households': 23452, 'num_people': 23452, 'num_activities': 87165, 'num_legs': 63713}\n",
"# squash edu size: {'num_households': 23452, 'num_people': 23452, 'num_activities': 87162, 'num_legs': 63710}\n",
"# PAM 2nd fix: {'num_households': 23452, 'num_people': 23452, 'num_activities': 87162, 'num_legs': 63710}\n",
"\n",
"# 2023\n",
"\n",
"# Raw size: {'num_households': 6130, 'num_people': 64366, 'num_activities': 250465, 'num_legs': 186099}\n",
"# PAM fix: {'num_households': 6130, 'num_people': 64366, 'num_activities': 250245, 'num_legs': 185879}\n",
"# home based size: {'num_households': 59265, 'num_people': 59265, 'num_activities': 233085, 'num_legs': 173820}\n",
"# Squash home size: {'num_households': 59265, 'num_people': 59265, 'num_activities': 231640, 'num_legs': 172375}\n",
"# squash work size: {'num_households': 59265, 'num_people': 59265, 'num_activities': 230784, 'num_legs': 171519}\n",
"# squash edu size: {'num_households': 59265, 'num_people': 59265, 'num_activities': 230757, 'num_legs': 171492}\n",
"# PAM 2nd fix: {'num_households': 59265, 'num_people': 59265, 'num_activities': 230757, 'num_legs': 171492}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" pid | \n",
" start | \n",
" end | \n",
" duration | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 147.000000 | \n",
" 147.000000 | \n",
" 147.000000 | \n",
" 147.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 14.537415 | \n",
" 687.088435 | \n",
" 1010.353741 | \n",
" 323.265306 | \n",
"
\n",
" \n",
" std | \n",
" 9.846265 | \n",
" 412.959282 | \n",
" 294.522037 | \n",
" 287.508769 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 465.000000 | \n",
" 6.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 6.000000 | \n",
" 469.500000 | \n",
" 782.500000 | \n",
" 52.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 13.000000 | \n",
" 805.000000 | \n",
" 955.000000 | \n",
" 310.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 23.500000 | \n",
" 985.000000 | \n",
" 1290.000000 | \n",
" 523.000000 | \n",
"
\n",
" \n",
" max | \n",
" 32.000000 | \n",
" 1325.000000 | \n",
" 1440.000000 | \n",
" 1440.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" pid start end duration\n",
"count 147.000000 147.000000 147.000000 147.000000\n",
"mean 14.537415 687.088435 1010.353741 323.265306\n",
"std 9.846265 412.959282 294.522037 287.508769\n",
"min 0.000000 0.000000 465.000000 6.000000\n",
"25% 6.000000 469.500000 782.500000 52.000000\n",
"50% 13.000000 805.000000 955.000000 310.000000\n",
"75% 23.500000 985.000000 1290.000000 523.000000\n",
"max 32.000000 1325.000000 1440.000000 1440.000000"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def dt_to_min(dt) -> int:\n",
" h, m, s = datetime_to_matsim_time(dt).split(\":\")\n",
" return (int(h) * 60) + int(m)\n",
"\n",
"\n",
"def pam_to_schedules(population: Population) -> pd.DataFrame:\n",
" \"\"\"write trace of population. Ignoring trips.\"\"\"\n",
" record = []\n",
" for uid, (hid, pid, person) in enumerate(population.people()):\n",
" for i in range(0, len(person.plan) - 1, 2):\n",
" record.append(\n",
" [\n",
" uid,\n",
" hid,\n",
" person.plan[i].act,\n",
" dt_to_min(person.plan[i].start_time),\n",
" dt_to_min(person.plan[i + 1].end_time),\n",
" ]\n",
" )\n",
" record.append(\n",
" [\n",
" uid,\n",
" hid,\n",
" person.plan[-1].act,\n",
" dt_to_min(person.plan[-1].start_time),\n",
" dt_to_min(person.plan[-1].end_time),\n",
" ]\n",
" )\n",
"\n",
" df = pd.DataFrame(record, columns=[\"pid\", \"hid\", \"act\", \"start\", \"end\"])\n",
" df[\"duration\"] = df.end - df.start\n",
" return df\n",
"\n",
"\n",
"schedules = pam_to_schedules(population=pam_population)\n",
"\n",
"attributes = pd.DataFrame(\n",
" [\n",
" {**{\"pid\": pid}, **p.attributes}\n",
" for pid, (_, _, p) in enumerate(pam_population.people())\n",
" ]\n",
").drop([\"iid\", \"year\"], axis=1)\n",
"attributes.describe()\n",
"\n",
"assert set(schedules.pid).issubset(set(attributes.pid))\n",
"\n",
"schedules.to_csv(schedules_path, index=False)\n",
"attributes.to_csv(attributes_path, index=False)\n",
"\n",
"schedules.describe()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLsAAAH/CAYAAAC/998mAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAioJJREFUeJzs3XlcVdX+//H34cggKSgqoIWI5pBDZqACplYOiZZzeRtQS+167V5TGq7kUGJm3m8pWmlaFtqgVDj1dSQzR27dTK3Ua5MKV+GSA+IU4Dnn94dfzs8j0zlHBs/h9Xw89uPBXnvttdeCD/vgx7XXNlgsFosAAAAAAAAAN+BR1R0AAAAAAAAAygvJLgAAAAAAALgNkl0AAAAAAABwGyS7AAAAAAAA4DZIdgEAAAAAAMBtkOwCAAAAAACA2yDZBQAAAAAAALdBsgsAAAAAAABug2QXAAAAAAAA3AbJLgAAAAAAALiNGlXdAQAAAHu0mbZRBSZLhV/H02jQgYQ+5dqmwWDQ3r17dccdd5RruxUtJydHdevW1ZEjR9SkSZOq7g4AAIBdmNkFAABcQoHJonyTuUKvkW8yO5VQ++KLL9S1a1fVqlVL/v7+iomJ0XfffVcBPQQAAEBZmNkFAABchpfRQz/NjKmw9ltM3uDwOWvXrtWjjz6qxMREbdiwQQUFBVq8eLG6d++urVu3KiIiogJ6WpTFYpHZbJbRaKyU6wEAANyomNkFAADgJIvFoqefflqTJk3SqFGjVKtWLdWtW1d///vfNWzYMD377LPWutu2bVPLli1Vp04dDRs2TGfPnpUk5eXl6YknnlD9+vXl7++vtm3b6l//+pe1/fnz56tVq1aqU6eO7r77bh06dMjaZpMmTTRr1ixFRkbK19dXL7/8spo1a2bTx6+//lp16tTRH3/8IenKLLROnTqpTp06atOmjdauXWutm5eXp7/85S8KCAhQWFiYPvvsswr73gEAAFQUkl0AAABO+umnn3T06FE9/PDDRY49/PDD2rlzpy5duiRJ+uCDD7R161YdPXpUZ86c0YQJEyRJS5cu1f79+/XLL78oJydHK1euVHBwsCRp4cKFWrJkiT7//HOdPHlSgwcP1gMPPKD8/HzrdZKSkrR06VKdP39e8fHxysnJ0a5du6zHP/jgAz344IPy8fHR999/rwcffFCvvvqqTp8+rUWLFik2NlaHDx+WJM2cOVNpaWn68ccftXfvXq1cubKivnUAAAAVhmQXAACAk06ePClJatSoUZFjjRo1kslk0unTpyVJzz//vBo1aqQ6depoxowZ+vjjj2U2m+Xp6alz587p0KFDslgsatGihUJCQiRJb731lhISEtS8eXPVqFFD48eP16VLl/T1119br/OXv/xFLVu2lNFolJeXl4YNG6YPPvhAklRQUKDk5GQNHz5ckrRo0SKNHDlS9957rzw8PHTXXXfp/vvv1yeffCJJ+uijj/TCCy9Y+/niiy9W3DcPAACggpDsAgAAcFL9+vUlSSdOnChy7MSJEzIajQoICJAkhYaGWo+FhoYqPz9fv//+u2JjYzVy5EiNHTtW9evX18iRI61JtKNHj+qxxx5TnTp1rNuZM2f0n//8x9pW48aNba47fPhwffLJJ8rLy9P69etVu3Zt3XXXXdb23n77bZv21qxZY+3/iRMnivQTAADA1ZDsAgAAcFKLFi0UGhqq5cuXFzm2fPlydenSRTVr1pQkHTt2zHosPT1dXl5eatCggWrUqKEXXnhB+/fv16FDh5Senq7p06dLkkJCQvTpp58qJyfHul28eNHmsUkPD9s/5yIjI1W/fn397//+rz744AM99thjMhgM1vaefvppm/bOnz+vhQsXSroyG+3afgIAALgakl0AAABOMhgMmjt3rmbNmqUlS5bo/PnzysnJ0ezZs7VixQr94x//sNb9n//5H504cUI5OTmaNm2a/vSnP8nDw0Nffvml9u3bp8uXL+umm26Sj4+PatS48sLsp556StOmTbOuqZWbm6s1a9bo3LlzpfYrNjZWb775ptatW2d9hFGS/vznP+v999/X1q1bZTKZlJeXp7S0NOui9w8//LBeffVVaz8TEhLK+1sGAABQ4WpUdQcAAADslW8yq8XkDRXavpfRsf8LHDRokFJSUjRjxgw9/fTT8vDwUFRUlLZu3aqOHTta6z322GO65557lJWVpd69e2vevHmSpP/+97966qmnlJGRoZo1a6pnz57WtbL++te/ymg0avDgwcrIyLA+knjvvfeW2qfY2Fi9+OKLioyM1K233mot79Chg5YvX64pU6bo0KFD8vDw0B133KHXXntNkjRlyhRlZ2erbdu28vPz05QpU7Ru3TqHvh8AAABVzWCxWCxV3QkAAICytJm2UQWmiv+zxdNo0IGEPhV+HQAAAFQMkl0AAAAAAABwG6zZBQAAAAAAALdBsgsAAAAAAABug2QXAAAAAAAA3AbJLgAAAAAAALgNkl0AAAAAAABwGyS7AAAAAAAA4DZIdgEAAAAAAMBtkOwCAAAAAACA2yDZBQAAAAAAALdBsgsAAAAAAABug2QXAAAAAAAA3AbJLgAAAAAAALgNkl0AAAAAAABwGyS7AAAAAAAA4DZIdgEAAAAAAMBtkOwCAAAAAACA2yDZBQAAAAAAALdBsgsAAAAAAABug2QXAAAAAAAA3AbJLgAAAAAAALgNkl0AAAAAAABwGyS7ABe1Y8cOhYeHl1mvVq1ays7OroQewdUlJSWpT58+Vd0NVJKvvvpKrVq1qupuALjBjRw5Uq+++mpVdwOweumllzR27NhKvWZMTIxSUlIq9ZpASa6+L3/00UcaNGhQubXnTkh2VYEmTZron//8p03Z2LFj9dJLL1VNh3DD6tWrl1577bUi5XFxcXr33Xe1Z8+eMts4f/68AgMDJUl33323VqxYUe79ROWaPn26Hn30Uev+uXPnVKNGDc2aNcta9s0336hu3bqyWCxV0UVUkbfeekstW7ZUzZo11aRJE7300ksymUyS+P2vrpo0aSJfX1/VqlXLui1ZsqTCr0vy3PVs375dkZGR8vf3V7169XTPPffoyJEjVd0tVCNVdb+6VnH3rw0bNmjIkCGV3he4hyZNmsjPz0+XLl2yluXm5qpmzZrX/R+Pjz76qFatWnW9XXRLJLuAG9hjjz2mjz76yKbMbDYrOTnZJtmB6uWuu+7Szp07rfv//Oc/1axZM5uyXbt2KTo6WgaDwa42CwoKyr2fqFwvv/yyZs2apXfeeUfnzp3TmjVr9Nlnn1X4/34TOze+L7/8UufPn7duo0aNqtDrEROu5+zZsxo4cKDi4+N15swZHTt2TOPHj5fRaKzqrqGaqez7FVBZgoODtXbtWuv+ypUrFRISUoU9cn8ku25Ab7zxhpo2baoGDRpo+PDhys3NlfT/HzmZOnWq6tSpo5YtW+rgwYN6+eWXFRAQoNtuu00HDhywtvPDDz+oW7duqlu3rsLDw/Xtt99W1ZDgpMGDB+vw4cM6dOiQteyrr76SyWSS0Wi0/k/ApUuX9PDDD6tu3bqqU6eOunTpYq1vMBiUlZWlGTNmaMeOHRo5cqRq1aqlf/zjH5U+HpSPyMhInThxQhkZGZKknTt36s9//rO+//5760yunTt3qmvXrvr000/VqlUrBQQE6IEHHlBmZqYk6ejRo/Lx8dGbb76pRo0a6cknn7S5RkFBgR588EGNGDHCOjMIN66cnBy98sorWrBggbp166YaNWqoffv2+vDDD7VkyRJNnz69xN//6dOnKyAgQGFhYUpNTbWWnz59Wo888ogCAwPVtGlTLV261Hrs7rvv1rRp03TnnXeqdu3alTpWlI/33ntPoaGhqlWrlpo1a6atW7dKki5cuKBx48bp5ptvVt26dRUbG2s9p6y/TyZPnqz69evrlVde0dixY/XFF1+oVq1aat++fZWMEfb76aef5OvrqwEDBsjDw0O1atXSoEGD1LhxY0lSdna2evToodq1a+u+++7TmTNnrOeW9Tkzf/58NWjQQGFhYTb/0APs9fvvvysmJkZ+fn665557bJbnuHYWVmHcFTpy5Ij69eunevXqqWHDhpo/f74kKS0tTR07dpSfn59CQ0P1xhtvSJJ+++23Yu9fV8+OvnTpkv7yl78oODhYjRs31syZM61/f7300ksaPny4HnzwQdWuXVuRkZE6duxYxX6D4BIefvhhm0kMH330kR555BHrfnp6ujVWb7vtNm3cuNF67Ndff1V0dLRq166twYMH6+LFi9Zj1/4OfPnll4qIiJCfn5+aN2+uHTt2SJLeeecdNW/eXLVr19btt9+ur776qgJHe2Mg2XWD2bRpk1599VWtW7dOR48e1YULFxQXF2c9/ssvv6hBgwY6efKkevfurb59+6pmzZrKzs7W/fffrylTpki68lhTTEyMJk6cqJMnT2rq1KkaNGiQ/vjjj6oaGpxQu3Zt9e/fXx9//LG17OOPP9af/vQnm/9tXbp0qS5cuKATJ07o5MmTxT5zPXXqVHXt2lVJSUk6f/68nn/++UoZA8rfTTfdpDvuuMM6k2vXrl3q3r27br31Vv3444+SpN27d6tLly4aPXq03nvvPWVmZiosLMzmH675+fk6ePCgfvvtNy1cuNCmfOjQofL399f777/P/+y7gLS0NBUUFKhfv3425XfccYdCQ0MVHBxc7O//L7/8otq1ays7O1vx8fE2s8BiY2MVEhKijIwMrV+/XvHx8dq/f7/1+IoVK/TZZ58pJyenUsaI8nPhwgVNmDBBX3zxhc6fP68vv/xSTZo0kSRNmDBB6enp2r9/v7Kzs/XnP/9Zkn1/n/j6+iozM1N///vf9fbbb6tnz546f/68TdzgxtSiRQtdvHhRTz75pDZu3GhNZBZKTk7WvHnz9Pvvv+vy5ct68803JUmHDh0q83PmwIEDysjI0MKFC/Xoo4/q999/r9SxwfU99dRTCg4OVnZ2tmbOnKkPP/zQrvMuX76sfv36qWPHjjp+/LgOHz5s/Q9hT09PLVq0SDk5OUpJSdGUKVO0d+9eNW3atMz7V0JCgn766ScdOnRIO3bs0NKlS22SGCtXrtT48eN15swZtWjRQgkJCeXzjYBL69Wrl7777judPn1aWVlZ+vnnn9WtWzdJV57ceeCBB9S3b1/997//1XvvvafHHntMWVlZkqRHHnlEPXr00KlTpzR8+PASH1v87bffNGjQIL300ks6c+aMtmzZooYNG0qSGjVqpC1btujs2bP629/+pj/96U/Ky8urnMFXEZJdVaRXr16qU6eOdXv//fclXfljYuzYsbrtttt000036ZVXXrFZY6VOnTr629/+pho1amjw4ME6deqUJk6caN3//vvvJUnr1q3T7bffrkGDBsloNGrgwIEKCgpSWlpalYwXznvsscesya68vDylpKQUeYTR09NTv//+u3777TfVqFFDXbt2rYquohIVPspoMpn0448/qn379oqOjtbOnTv1yy+/6MyZM/ryyy81dOhQRUdHy9vbW6+88oq2bdtm/YeGxWLR9OnT5ePjY/1f0D/++EMDBw5Uo0aN9M4778jDg48JV3Dq1CnVr1+/2MRkUFCQTp48Wex5/v7+1s+Qxx57TL/99pvOnz+vrKws7dixQ6+88oq8vb3VqlUrPfLII1q5cqX13DFjxqhp06Y2/4OOG9O1f3Ps27dPBoNBP/zwg/Ly8hQaGqqwsDCZzWZ98MEHmj9/vurXry9PT0/dddddksr++8TX11eTJk2Sp6cnMeGC/P39tX37dl26dEkjR45UgwYN9Nhjj+ncuXOSpGHDhqlt27by8fHRkCFDrAmATz/9tMzPmRdffFE+Pj7q06ePOnfurPXr11fZOHHju/Z+tWvXLq1atUozZsyQj4+PoqOj1b9/f7va+vrrr3Xx4kVrDPr5+Vlf7hQREaE777xTHh4eioiIUN++fbVr1y672k1OTtZLL72kunXrKjQ0VM88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mW0ec803meXEU8wAAAAAANzwHE52SdItt9yiV1555bou/OKLL17X+QDs52X00E8zY6z7POIKAAAAAHBXTiW7cnJy9M033yg7O1tms9nm2PDhwx1q57PPPtOvv/6q5557TgEBAfruu+8UFBSkm2++2ZmuAQAAAAAAoBpzONn1+eef69FHH9WFCxdUu3ZtGQwG6zGDwWB3suv7779Xz5495e/vr6NHj2rMmDEKCAjQqlWrdOzYMS1btszRrgEAAAAAAKCac3jRnmeeeUZPPPGEzp07p5ycHJ05c8a6nT592u524uLiNHLkSP3888/y8fGxlsfExGj79u2OdgsAAAAAAABwPNl1/PhxjR8/Xr6+vtd14X/961/685//XKT85ptvVlZW1nW1DQAAAAAAgOrJ4WTXfffdp2+//fa6L+zj46Pc3Nwi5YcPH1aDBg2uu30AAAAAAABUPw6v2dWvXz8999xzOnjwoNq1aydPT0+b4/3797ernQEDBighIUGffPKJpCvrfaWnp2vSpEkaMmSIo90CAFSgNtM2qsBksSnLN5nlZfQosV5xxyuyT55Ggw4k9Kmw6wEArl++yawWkzeU+RlReI+v6M8SAIB7cjjZNWbMGElSQkJCkWMGg0Emk8mudl577TX17dtXgYGBunTpkrp3766srCxFRUVp5syZjnYLAFCBivsHh5fRQ55GQ4n1ijteUX3KN5nlxGRlAEAluvKZcOVeXdZnxNX3+Ir8LAEAuCeHk11ms7lcLuzn56edO3dq69at2rNnj8xms+6880717NmzXNoHAJQvL6OHfpoZU271ykPhtVpM3lAp1wMAOM/R2beV+XkCAHAvDie7yoPZbFZSUpJWrlypo0ePymAwKCwsTMHBwbJYLDIY+N8bAAAAAAAAOM7uZz769u2rs2fPWvdnzpypnJwc6/6pU6fUunXrMtuxWCzq37+/Ro8erePHj6tdu3Zq06aNjh07ppEjR2rQoEGOjQAAAAAAAAD4P3bP7Nq0aZPy8vKs+7Nnz9bDDz+sOnXqSJIuX76sw4cPl9lOUlKStm/fri1btuiee+6xOfbll19q4MCBWrZsmYYPH25v1wAAAAAAAABJDszsslgspe7ba/ny5XrhhReKJLok6d5779WkSZP00UcfOdU2ylebaRvVYvIGtZi8QW2mbXT4OAAAAABpwYIFCgsLk4+P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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = times_distributions_plot(schedules, ys={})"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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t7r22msVGRmpsLAwnX/++Q36GQf20BrOJadbvHixkpKS3JZNnz5dy5Yt801BaLTU1FQ5HA6tWrXKbfncuXPlcDj029/+ttlzpKWl6fPPP2/2OG0BYRcAl//5n//Ra6+9poqKCrfly5YtU1RUlM/+Vwut1+DBg7VhwwaVlZW5ln3yySc6++yz9cUXX7iWrV69WoMHD27U2FVVVR6rE63PO++8oxtuuEHp6enas2ePcnNzlZqaqkGDBmnDhg1eqYEes6annnpKhw8fdn3t37/fK/MaY3T8+HGvzIWW94tf/EKXXHKJ8vLyVFxcrBUrVuicc87xdVnwIl+dS2BvCQkJeuWVV9yWLV68WOeff76PKmq7CLvaAGOMnnnmGZ177rnq0qWLrrrqKv33v/91rY+Li9OcOXPUt29fdezYUcOHD9fBgwd15513Kjw8XL169XJLjysrK/XII4/o3HPPVUREhK677joVFhb6YtfgYdddd538/f1rXLr/yiuv6Pbbb9f48eNd/yNRUVGh22+/XZGRkerUqZMSExO1fv16SVJ6erpru379+kmSzjrrLIWEhOjVV1/11u7AC5KTkxUSEqI1a9ZIknbs2KHg4GCNGTNGH3/8saQT56BPP/1UgwcP1gcffKDk5GR16tRJl156qdv/fKWnpysjI0OjR49WWFiYXnjhhRrzPfTQQ7rkkktUVFTknR1EizDG6De/+Y0eeOABZWRkKCQkRJ07d9b999+vm2++Wffee6/r3DFw4ECFhIRo9uzZrs+/++67Ou+88xQeHq709HRVVla61m3cuFGDBw9Wly5ddN555+nFF190rZsxY4auueYa3XHHHerSpQu3W9uIMUb333+/evToobCwMMXHx2vlypWu9cuWLdMll1yisLAwxcbGum4HaejPSAMGDFCHDh00evRoffbZZ7r//vsVEhKi4cOHe3tX4QH79+/Xd999p4kTJ6pDhw5q166devfurZtuusm1TU5OjgYMGKDQ0FANGjRI+fn5rnU7d+7Uz3/+c3Xp0kXnnnuu25V+J6/OmT59uiIiIuR0OvX88897c/fQTFu3bnUd+8GDB7v9O6e2OxZ++9vfKj093fV+x44duu6669S1a1d16dJFN954o2vd2LFjFR0drbCwMPXp08f1s9LXX3+tzMxMffPNN64rzfLy8mo8zqEhvffYY4+pW7du6t69O1eh+sAtt9yif/7znzp06JAkKTs7W8YY9e/f37XNd999p2uvvVZdu3ZVbGysHn/8cVVXV7vWz58/XzExMYqIiNCDDz7oNv7pVwCWlpZq0qRJcjqdCgsLU9++fV3nq2effVa9evVSaGiozj33XM2fP78F97z1IexqA5YuXapnn31Wb731lgoLC9W7d29dc801bv+jvWzZMq1YsULff/+98vLy1K9fPw0ZMkQHDhzQLbfcoszMTNe2Dz74oNauXas1a9aoqKhI8fHxuuWWW3yxa/CwgIAAjRs3Ti+//LJr2bZt27Rhwwa3b+KStGTJEm3evFk7d+5USUmJ3njjDfXo0aPGmF9++aUkqaCgQIcPH1ZaWlqL7gO8y8/PT5dffrlWr14t6cQVXCevzjm5bMuWLTp48KBiYmJ0/fXX6+GHH9aBAwc0ffp0XXfdddq1a5drvGXLlikjI0MlJSXKyMhwLa+qqlJGRobWrFmjTz/9VFFRUd7cTXhYTk6OcnNza30OyZgxY7RmzRp98sknkqTPP/9chw8f1vTp013b/OMf/9DGjRu1bds2rVq1yhWi79mzR1dccYXuuOMO7du3T2+99ZYeffRRffjhh67Pvv/+++rfv7/27t2rxx57rIX3FN7y73//W6+99po2btyo0tJSrVq1SvHx8ZJOhKOTJk3S73//e5WUlGj9+vW65JJLJDXsZ6TFixdryZIlOnz4sJYtW6af/exnritC/vnPf/pkf9E8EREROv/88zV+/HgtX75cu3fvrrHNX/7yF7322mvat2+fOnbsqIcffljSie9H11xzjS655BIVFhbqzTff1NNPP63XXnvN9dktW7bI4XCoqKhIr7/+uh544AF9+umnXts/NF1VVZWuu+46DR06VAcOHNDs2bP15z//ucGf//HHHzVs2DAlJiYqNzdXe/bs0a9//WvX+qFDh2r79u2uf2ONGjVKZWVlSk5O1sKFC3XRRRe5rjRzOp01aquv97Zu3arg4GB9//33ev3113Xvvffqu+++a/4fDBosPDxcV111lev205dfflnjx493rT969KiGDh2qIUOG6Pvvv9dnn32mv/71r66rwT766CM9+OCDWr58ues/d7ds2VLnfOnp6dq5c6e++OILlZSU6E9/+pPat28vSYqNjdVHH32k0tJS/fnPf9Z9992ntWvXttSutzqEXTYxbdo0hYeHu32dtHTpUk2ePFkXXXSRgoODNXv2bBUUFLhCCEm688475XQ6FR4erl/84heKjIzUqFGj1K5dO40ZM0ZbtmzRsWPHZIzR888/r2effVZRUVEKDAzU448/rrVr17r9jxesKyMjQ6tWrXIdz5dfflk///nP1bNnT7ftAgICVFZWpu3bt8sYo/j4eMXExPiiZPjY4MGDXf8zuXr1ag0aNEj9+/fXpk2bdPToUa1evVpJSUl6//33lZqaqhtvvFH+/v4aNWqULrvsMrdnUVx55ZX6+c9/Lj8/P3Xo0EGSdOTIEd1www0qKSnRv/71L3Xq1Mkn+wnPOXmrSHR0dI110dHROn78uA4ePFjn52fMmKGwsDBFR0dr+PDh+uqrrySd+H53+eWXa/To0WrXrp0SExM1fvx4t38IJCYmKj09Xf7+/q4eg7Wc/jPPFVdcoYCAAJWXl2vr1q2qrKyU0+l0hV3PP/+8fvOb32jIkCHy8/NTt27dlJycLKlhPyPdcccdSkhIULt27RQYGOiTfYZnORwOffzxx7rkkks0c+ZMnXPOObrwwgv173//27XNpEmTdM455yg4OFhpaWmu80x2draKior0+OOPKzg4WBdffLEmTZrkulpQkjp27KgZM2YoMDBQKSkpSktL01/+8hdv7ybqUdu5ZN26ddq/f7/b8bv55psbPObKlSsVEBCgJ554Qh07dlRgYKDbYxzGjx+vTp06KSAgQPfdd5+qq6v1v//7vw0auyG9FxERofvuu08BAQFKTU3V2WefzbMvfWD8+PF65ZVXdPToUa1YsULjxo1zrVu5cqU6d+6su+++W4GBgXI6nfrNb37j+lnl1VdfVVpamlJSUhQYGKgZM2aoY8eOtc7zww8/6M0339Sf/vQnRUdHy8/PT8nJya7nz40cOVIxMTFyOBwaPHiwfv7zn7v+M7otIOyyiTlz5qikpMTt66SCggLFxcW53gcFBSk6OloFBQWuZadekdOhQ4ca740xOnLkiPbv368ff/xRl19+uesbQ48ePRQYGEjYZRMXXnih+vXrpyVLlqiqqkpZWVluV9icNG7cOKWnpyszM1ORkZFKT0/nWQdt1ODBg11XU3zyySeuh74mJyfr888/dz2v6/RzkSSdc845buei0/8XU5I2bdqkf//735o5c6aCgoJaenfgBSd/CKvtFvjCwkK1a9dOXbp0qfPzp36P6tixo+uZcbm5uXrvvffc/vHy3HPPud32WluPwVpO/5nn3//+twYPHqyZM2fq4YcfVmRkpEaOHOm6anT37t3q1atXrWM15GckesaeevTooWeeeUZbt27Vvn37NHz4cN1www2uoL2u80xBQYGio6Pdgs/Tv5dFR0crICDA9T42Nlbff/99S+8SGqm2c0lhYWGtx6+hdu/erXPPPVcOh6PGuurqaj344IPq1auXwsLCFB4erkOHDjX45+eG9N7pd1mc2rvwnqFDh2rPnj167LHHlJKS4nZccnNztWXLFrefVe655x7t2bNH0omfg07tuYCAgDrvaNi9e7eCgoLq/D716quv6tJLL1Xnzp0VHh6u9957r039e42wqw0466yzlJub63p/7NgxFRYW6qyzzmr0WBEREerQoYOys7PdvjkcPXrUI78CFa1DRkaGFi9erJUrV6q6ulrXXnttjW38/f01ffp0bd68Wdu3b1deXp5mzpxZYzs/P04zdnfxxRcrPDxcL7/8sgIDA11X+A0aNEgff/yxPv30Uw0ZMqTGuUiSdu3a5XYuqq1fBg4cqAULFuiKK67Q1q1bW3Rf4B3x8fGKjY2t9TdMLVu2TD/96U/Vvn37Wv+xcCYxMTGuqwBPfpWVlem9995zbcM5yb7uvPNOffHFF8rLy1NQUJAmT54s6cQ/VHfu3FnrZxryM9LpPUMP2U+XLl00Y8YM/fjjj2631tfmrLPOUmFhoduzAk//Xnb6+ry8vBpXyKN1io6OrvX4nRQSEiLpxFXnJ536HyqxsbH67rvvZIypMfZrr72m1157Tf/4xz906NAhlZSUqFOnTq5t6zu3NKT30Dr4+fnp1ltv1ZNPPul2C6N04meVPn36uP2sUlpa6voZNzo62u3W6srKyjqfVRsbG6uKiopaLzrJy8vTbbfdpqefflr79u1TSUmJrr766lp70674bt0GjB07VvPnz9e2bdtUUVGhhx56SD179nQ9/Lcx/Pz8lJmZqXvuucf1l+rAgQN6/fXXPV02fOiWW27Rnj17dPfdd+vWW291+9+tkz766CNt2rRJVVVV6tixo4KDg+Xv719ju65du8rPz4/nBdiYw+HQoEGD9NRTT7n9xs5BgwbppZdeUnFxsX72s5/p5ptv1urVq/X222/r+PHjeuONN/TZZ5816Jl/GRkZmjNnjoYOHdrgy/3RejkcDv3+97/XnDlz9NJLL+nw4cMqKSnRU089pb/+9a96+umnJUndu3dv1Llj3Lhx+uijj7RixQpVVlaqsrJSmzZtcv3yDNjX+vXr9fnnn+vYsWNq3769Onbs6PqeNHHiRP3hD3/QJ598ourqau3du1dff/21pKb9jNTYvkTrU1xcrIceekj/+c9/dPz4cR05ckTPPvusunTpUu9vTOvXr5+6d++uRx55RBUVFdqyZYvmz5+v2267zbXNjz/+qMcee0zHjh1Tdna267YktH4DBgxQRESE2/E79d85kZGRcjqdWrJkiaqrq/Xxxx+7/YfKL37xC1VUVOiRRx7Rjz/+qGPHjrke9VBaWqrAwEBFRkbq2LFjmjVrlkpLS12f7d69u4qKinT06NFaa2tI76H1uPvuu/XBBx/UuGjgmmuu0Q8//KDnn39e5eXlOn78uL799lvX7YVjxozRq6++quzsbFef/Pjjj7XO0b17d11//fXKzMxUUVGRqqur9fXXX+vAgQM6fPiwjDHq1q2b/Pz89N577+mDDz5o6d1uVQi72oBbb71Vv/71r3XNNdeoR48e2rx5s959991ag4mGmDNnjlJSUjRkyBCFhoaqT58+be4vjt2FhIRo9OjRys3NrfUWRunEPeJjxoxReHi4zj77bHXq1EmPPvpoje3at2+vRx99VMOHD1d4eLjbs3NgH4MHD9aePXs0aNAg17KUlBQdPHhQP/nJTxQaGqrzzjtPb7zxhh599FF17txZs2bN0ptvvtngX/Wenp6uuXPn6oorrnD9QxXWdcMNN2jFihV65ZVX1KNHDzmdTn300Uf6+OOPXb+x6LHHHtPkyZPVuXNnPfnkk/WO2bNnT/3rX//SokWLFBUVpe7du+uuu+5y+8cErO/kb0I89SsvL0933nmnIiIi1KNHDxUWFuoPf/iDJGnEiBF69tlnddddd6lTp07q27evvvnmG0lN+xnpt7/9rVatWqXw8HBdc801XtlneFZgYKC+//57XX311erUqZOcTqfWrl2r999/v85n45wUEBCglStX6quvvlKPHj103XXXacqUKfrlL3/p2iYxMVFVVVWKiorSqFGj9MQTT7g9twmtQ23nktLSUr399tv617/+pS5duuiBBx7Q7bff7va5l19+Wa+88oo6deqkRYsWuf2nXUhI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EWGZOSQpMTFRcXFxMsbUWLd//35LzHHkyBG399OnT1dgYKCGDh2qsrKyZo/v6Tns0j926B3JWv1jl96R7NE/VuodyT79Y4fekazVP/RO65qD3vH+HBL944s57NI/9I7357BL70j0j8/maE7qZmU7duwwQ4YMMZ07dza9e/c2iYmJJjw83AwePNh8++23lpnDGGPi4uLM999/X+u6s846yxJzjBgxwvzzn/+ssfyZZ54xDoej2eN7eg679I8descYa/WPXXrHGHv0j5V6xxj79I8descYa/UPvdO65qB3vD+HMfSPL+awS//QO96fwy69Ywz946s52mzYddLevXvNV199Zb766iuzd+9eS84xefJk89lnn9W67q677rLEHOXl5aa8vLzWdQUFBc0ev6XmsHr/2KF3jLFm/1i9d4yxR/9YsXeMsX7/2KF3jLFm/9A7rWMOesc3c9A/vpvD6v1D7/huDqv3jjH0j6/mcBhTy3VuAAAAAAAAgAX5+boAAAAAAAAAwFMIuwAAAAAAAGAbhF0AAAAAAACwDcIuAAAAAAAA2AZhVyvzxhtvqE+fPkpKStIFF1ygoUOHqrq6WpI0b9487d27t0njlpSU6Omnn65zfW5urv70pz+5Lbv66qv13XffNWk++Ab9g6aid9BU9A6ag/5BU9E7aA76B01F71hI8385JDylqKjIdO3a1eTm5rqWffXVV6a6utoYY0xsbKz55ptvGj1uZWWl2bVrl4mIiKhzm48//tj06dOn8UWj1aB/0FT0DpqK3kFz0D9oKnoHzUH/oKnoHWsh7GpFNm7caKKiokxZWVmNdTNnzjQBAQEmISHBXHLJJebrr782q1atMgMGDDBJSUmmd+/e5uWXX3ZtP2jQIDN9+nQzZMgQM2TIEPPzn//ctGvXzlxyySW1/iVJSEgw7du3N5dccom59tprjTHuf1kHDRpk7r33XvOzn/3MnHXWWebpp582y5YtMykpKcbpdJply5a5xvryyy/N4MGDTZ8+fUxycrL5+9//bowxZu/eveaKK64wiYmJ5qKLLjLp6eke/fNr6+gfNBW9g6aid9Ac9A+ait5Bc9A/aCp6x1oIu1qR48ePmxtvvNF07tzZjBgxwjz99NOmoKDAtf70pPjgwYOmqqrKGGPMgQMHTGxsrCksLDTGnGj2q6++2hw7dswYY5qUFJ/+l2f06NHm+PHj5vvvvzfBwcHmwQcfNMYYk52dbaKioowxxhQXF5vk5GRXHfv27TNOp9MUFRWZZ5991vzqV79yjX/gwIGm/UGhVvQPmoreQVPRO2gO+gdNRe+gOegfNBW9Yy08s6sV8fPz04oVK/T555/rqquu0tq1a9W7d2/t3Lmz1u0PHDigm266SYmJiRoyZIj279+vrVu3utaPGzdOAQEBHqvvpptukp+fn6KjoxUZGakRI0ZIkvr06aOioiKVl5fr888/13//+18NHz5cSUlJGjZsmIwx+vbbbzVgwAC9//77uueee/TOO++oY8eOHqsN9A+ajt5BU9E7aA76B01F76A56B80Fb1jLYRdrdD555+viRMn6q233tKAAQP0zjvv1LpdZmamBg0apG+++UabNm1SfHy8ysvLXetDQkI8WldwcLDrdbt27Vzv27VrJ0mqqqqSMUYXX3yxNm3a5PrKy8vToEGDlJKSok2bNql///5asWKF+vbtq+PHj3u0RtA/aDp6B01F76A56B80Fb2D5qB/0FT0jjUQdrUi33//vdauXet6X1xcrF27duncc8+VJIWFhenQoUNu62NjY+VwOPTpp59q8+bNdY4dFhamI0eOqKqqqs71p47dVAMHDtSOHTv00UcfuZZt2rRJx44d065duxQSEqLRo0frj3/8o3JycnT48OFmz4kT6B80Fb2DpqJ30Bz0D5qK3kFz0D9oKnrHWvx9XQD+T1VVlWbNmqVdu3apQ4cOqqqq0m233abrr79ekjR58mSNHz9eHTp00OLFi/Xkk0/qzjvv1JNPPqkLL7xQ/fv3r3PsLl26KC0tTRdddJE6duyoDRs2uK2/+OKLlZCQoMTERJ1zzjl1ptP16dy5s959913dd999uvvuu1VZWSmn06m33npLq1ev1rPPPqt27drp+PHjmjt3rjp16tSkeVAT/YOmonfQVPQOmoP+QVPRO2gO+gdNRe9Yi8MYY3xdBAAAAAAAAOAJ3MYIAAAAAAAA2yDsAgAAAAAAgG0QdgEAAAAAAMA2CLsAAAAAAABgG4RdAAAAAAAAsA3CLgAAAAAAANgGYRcAAAAAAABsg7ALAAAAAAAAtkHYBQAAAAAAANsg7AIAAAAAAIBt/D8+znsHiOmzpgAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = joint_time_distributions_plot(schedules, ys={})"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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/34jKCjIcHd3N8qVK2d0797d2LJli8O863cD27Fjh9G5c2fD19fXKFmypPHggw8av//+u8P6unXrZoSHhxteXl5GQECAERUVZaxatcphfVevXjVeeeUVo379+oa3t7fh6+tr3HnnncagQYOM/fv32+eFh4cbHTt2vOk+REZGGpKMhx56KMflud1Wenq68dRTTxnlypUzvL29jaZNmxpbt241wsPDuRsYAKBAsRnG/79NDgAAAABYCNesAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAAS6KsAAAAALAkygoAAAAASzK1rHz99dfq3LmzypcvL5vNppUrV/7tZzZs2KBGjRrJ29tblStX1htvvJH3QQEAAADkO1PLysWLF1W/fn299tpruZp/8OBBdejQQS1atFBycrKeffZZDR8+XB9//HEeJwUAAACQ32yGYRhmh5Akm82mFStWqGvXrjecM2bMGK1atUp79uyxjw0ePFjff/+9tm7dmg8pAQAAAOSXAnXNytatW9WmTRuHsbZt22r79u26evVqjp9JT0/XuXPnHF7p6en5ERcAAADAbXA3O4Azjh07pqCgIIexoKAgZWRk6OTJkwoJCcn2mWnTpmnixIkOY22G9FfboQPyNCuQHxqkBZgdAXCJ5JBTZkcAXCK+TlOzIwCFSoE6siJdO13sr66fxfa/49eNHTtWZ8+edXi1GhCb5zkBAAAA3J4CdWQlODhYx44dcxg7fvy43N3dFRCQ878we3l5ycvLy2HM3dMzzzICAAAAcI0CdWSlWbNmSkxMdBj78ssvFRERIQ8PD5NSAQAAAMgLppaVCxcuKCUlRSkpKZKu3Zo4JSVFqampkq6dwhUb+99TtgYPHqzDhw8rPj5ee/bs0fz58zVv3jyNGjXKjPgAAAAA8pCpp4Ft375dMTEx9vfx8fGSpL59+2rhwoVKS0uzFxdJqlSpklavXq2RI0fq9ddfV/ny5TVr1iz16NEj37MDAAAAyFuWec5Kfpqxa5vZEQCX4G5gKCy4GxgKC+4GBrhWgbpmBQAAAEDRQVkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWRFkBAAAAYEmUFQAAAACWZHpZmTNnjipVqiRvb281atRIGzduvOn8JUuWqH79+ipevLhCQkL06KOP6tSpU/mUFgAAAEB+MbWsLFu2TCNGjNBzzz2n5ORktWjRQu3bt1dqamqO8zdt2qTY2Fj1799fu3fv1ocffqjvvvtOAwYMyOfkAAAAAPKaqWVlxowZ6t+/vwYMGKCaNWtq5syZCg0N1dy5c3Ocv23bNlWsWFHDhw9XpUqVdPfdd2vQoEHavn17PicHAAAAkNdMKytXrlzRjh071KZNG4fxNm3aaMuWLTl+JjIyUkeOHNHq1atlGIZ+//13ffTRR+rYseMNt5Oenq5z5845vDKuXHHpvgAAAABwPdPKysmTJ5WZmamgoCCH8aCgIB07dizHz0RGRmrJkiXq1auXPD09FRwcrNKlS2v27Nk33M60adPk5+fn8Fr7zmKX7gsAAAAA1zP9Anubzebw3jCMbGPX/fTTTxo+fLjGjx+vHTt2aM2aNTp48KAGDx58w/WPHTtWZ8+edXi1GhDr0n0AAAAA4HruZm04MDBQbm5u2Y6iHD9+PNvRluumTZum5s2ba/To0ZKkevXqqUSJEmrRooWmTJmikJCQbJ/x8vKSl5eXw5i7p6eL9gIAAABAXjHtyIqnp6caNWqkxMREh/HExERFRkbm+JlLly6pWDHHyG5ubpKuHZEBAAAAUHiYehpYfHy83nnnHc2fP1979uzRyJEjlZqaaj+ta+zYsYqN/e8pW507d9by5cs1d+5c/fLLL9q8ebOGDx+uxo0bq3z58mbtBgAAAIA8YNppYJLUq1cvnTp1SpMmTVJaWprq1Kmj1atXKzw8XJKUlpbm8MyVuLg4nT9/Xq+99pqeeuoplS5dWi1bttQ///lPs3YBAAAAQB6xGUXw/KkZu7aZHQFwiQZpAWZHAFwiOeSU2REAl4iv09TsCEChYvrdwAAAAAAgJ5QVAAAAAJZEWQEAAABgSZQVAAAAAJZEWQEAAABgSZQVAAAAAJZEWQEAAABgSZQVAAAAAJZEWQEAAABgSZQVAAAAAJZEWQEAAABgSZQVAAAAAJZEWQEAAABgSe5mBzBDWS8fsyMALuHr62l2BMAl+LkMAMhJkSwrKFgeqXbW7AjWZbE/m4w3vjM7AnLJffA/zI7gwFpprOXd/X5mRwAA0xTJsnIi/bLZEeCUc2YHQG79/pvZCZBr/P+qoDiRzhFUAEUX16wAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCTKCgAAAABLoqwAAAAAsCR3swMAAADAfDN2bcvX7cXXaer0Z+Li4nTmzBmtXLnSYTwpKUkxMTE6ffq0Spcu7ZqAsASOrAAAAACwJMoKAAAACpWPP/5YtWvXlpeXlypWrKjp06c7LK9YsaKmTJmi2NhY+fr6Kjw8XJ988olOnDihLl26yNfXV3Xr1tX27dsdPrdlyxbdc8898vHxUWhoqIYPH66LFy/m564VOZQVAAAAFBo7duxQz5491bt3b/34449KSEjQuHHjtHDhQod5r776qpo3b67k5GR17NhRjzzyiGJjY/Xwww9r586dqlq1qmJjY2UYhiTpxx9/VNu2bdW9e3f98MMPWrZsmTZt2qRhw4aZsJdFB9esAAAAoMD49NNP5evr6zCWmZlp/3rGjBlq1aqVxo0bJ0mqXr26fvrpJ7388suKi4uzz+vQoYMGDRokSRo/frzmzp2rf/zjH3rggQckSWPGjFGzZs30+++/Kzg4WC+//LL69OmjESNGSJKqVaumWbNmKSoqSnPnzpW3t3ce7nXRxZEVAAAAFBgxMTFKSUlxeL3zzjv25Xv27FHz5s0dPtO8eXPt37/fodTUq1fP/nVQUJAkqW7dutnGjh8/LunaEZuFCxfK19fX/mrbtq2ysrJ08OBB1+8oJHFkBQAAAAVIiRIlVLVqVYexI0eO2L82DEM2m81h+fVTuf7Kw8PD/vX1+TmNZWVl2f930KBBGj58eLZ1hYWFObsbyCXKCgAAAAqNWrVqadOmTQ5jW7ZsUfXq1eXm5nbL623YsKF2796drSghb3EaGAAAAAqNp556SmvXrtXkyZP1888/a9GiRXrttdc0atSo21rvmDFjtHXrVj3++ONKSUnR/v37tWrVKj3xxBMuSo6c3NKRlZ9//llJSUk6fvy4/dDYdePHj3dJsLxUqYSf2RHgFDp1gVG1ptkJkGvlzA6AXKpUoqTZEVBE3MpDGq2oYcOG+uCDDzR+/HhNnjxZISEhmjRpksPF9beiXr162rBhg5577jm1aNFChmGoSpUq6tWrl2uCI0c2I6eT+G7i7bff1pAhQxQYGKjg4GCHcwJtNpt27tzp8pCutuLgHrMjAC7RectmsyMALvF/kc3/fhJQAHSrxD/aAK7k9JGVKVOmaOrUqRozZkxe5MkXBy+eNTsC4Br/oXijcDhYv47ZEQAAFuT0+TWnT5+2338aAAAAAPKK02XlgQce0JdffpkXWQAAAADAzunTwKpWrapx48Zp27Ztqlu3rsP9qCXleO9pAAAAAHCW02Xlrbfekq+vrzZs2KANGzY4LLPZbJQVAAAAAC7hdFk5ePBgXuQAAAAAAAe39QALwzDk5J2PAQAAACBXbqmsLF68WHXr1pWPj498fHxUr149vfvuu67OBgAAAKAIc/o0sBkzZmjcuHEaNmyYmjdvLsMwtHnzZg0ePFgnT57UyJEj8yInAAAAgCLG6bIye/ZszZ07V7GxsfaxLl26qHbt2kpISKCsAAAAFEif5vP2Orl0bQkJCVq5cqVSUlJcOhfmcvo0sLS0NEVGRmYbj4yMVFpamktCAQAAANd17txZrVu3znHZ1q1bZbPZ1LJlS61duzZX6xs1apTD3Li4OHXt2tUVUeFiTpeVqlWr6oMPPsg2vmzZMlWrVs0loQAAAIDr+vfvr3Xr1unw4cPZls2fP1933XWX7rnnHgUEBORqfb6+vrmeC3M5XVYmTpyo8ePHq127dpo8ebKmTJmidu3aaeLEiZo0aVJeZAQAAEAR1qlTJ5UrV04LFy50GL906ZKWLVum/v37KyEhQXfddZd9WVJSkho3bqwSJUqodOnSat68ub3s/HVuQkKCFi1apE8++UQ2m002m01JSUn5s2P4W06XlR49euibb75RYGCgVq5cqeXLlyswMFDffvutunXrlhcZAQAAUIS5u7srNjZWCxcudHhsxocffqgrV67ooYcecpifkZGhrl27KioqSj/88IO2bt2qxx57TDabLdu6R40apZ49e6pdu3ZKS0u74SUPMMct3bq4UaNGeu+997Rjxw7t3LlT7733nho0aHBLAebMmaNKlSrJ29tbjRo10saNG286Pz09Xc8995zCw8Pl5eWlKlWqaP78+be0bQAAABQM/fr106FDhxyOesyfP1/du3dXmTJlHOaeO3dOZ8+eVadOnVSlShXVrFlTffv2VVhYWLb1+vr6ysfHR15eXgoODlZwcLA8PT3zeneQS7m6G9i5c+dUqlQp+9c3c31ebixbtkwjRozQnDlz1Lx5c7355ptq3769fvrppxy/mSSpZ8+e+v333zVv3jxVrVpVx48fV0ZGRq63CQAAgILnzjvvVGRkpObPn6+YmBgdOHBAGzdu1Jdffpltrr+/v+Li4tS2bVvde++9at26tXr27KmQkBATkuN25OrISpkyZXT8+HFJUunSpVWmTJlsr+vjzpgxY4b69++vAQMGqGbNmpo5c6ZCQ0M1d+7cHOevWbNGGzZs0OrVq9W6dWtVrFhRjRs3vumhuvT0dJ07d87hlXHlilM5AQAAYL7+/fvr448/1rlz57RgwQKFh4erVatWOc5dsGCBtm7dqsjISC1btkzVq1fXtm3b8jkxbleuysq6devk7+8vSVq/fr3WrVuX7XV9PLeuXLmiHTt2qE2bNg7jbdq00ZYtW3L8zKpVqxQREaGXXnpJFSpUUPXq1TVq1Chdvnz5htuZNm2a/Pz8HF5r31mc65wAAACwhp49e8rNzU3vv/++Fi1apEcffTTH61Cua9CggcaOHastW7aoTp06ev/993Oc5+npqczMzLyKjduQq9PAoqKi7F9XqlRJoaGh2b4xDMPQr7/+musNnzx5UpmZmQoKCnIYDwoK0rFjx3L8zC+//KJNmzbJ29tbK1as0MmTJzV06FD98ccfN7xuZezYsYqPj3cYe+M/KbnOCQAAAGvw9fVVr1699Oyzz+rs2bOKi4vLcd7Bgwf11ltv6b777lP58uW1b98+/fzzzw4PNf+rihUr6osvvtC+ffsUEBAgPz8/eXh45OGeILecfoJ9pUqVlJaWpnLlyjmM//HHH6pUqZLTrTSn0nOjhpyVlSWbzaYlS5bIz89P0rVTye6//369/vrr8vHxyfYZLy8veXl5OYy5c9EUAADA/3DtE+XzSv/+/TVv3jy1adPmhtc4Fy9eXHv37tWiRYt06tQphYSEaNiwYRo0aFCO8wcOHKikpCRFRETowoULWr9+vaKjo/NwL5BbTpeVG5WJCxcuyNvbO9frCQwMlJubW7ajKMePH892tOW6kJAQVahQwV5UJKlmzZoyDENHjhzhoZQAAACFXLNmzRxuX3xdQkKCEhISJF07U2fFihU3XMdf50pS2bJlc7xQH+bLdVm5fiqVzWbTuHHjVLx4cfuyzMxMffPNNw4P4vk7np6eatSokRITEx2ez5KYmKguXbrk+JnmzZvrww8/1IULF+Tr6ytJ+vnnn1WsWDHdcccdud42AAAAAOvLdVlJTk6WdO3Iyo8//uhw/2lPT0/Vr19fo0aNcmrj8fHxeuSRRxQREaFmzZrprbfeUmpqqgYPHizp2vUmR48e1eLF1y6I79OnjyZPnqxHH31UEydO1MmTJzV69Gj169cvx1PAAAAAABRcuS4r69evlyTFxcVp9uzZKlmy5G1vvFevXjp16pQmTZqktLQ01alTR6tXr1Z4eLgkKS0tTampqfb5vr6+SkxM1BNPPKGIiAgFBASoZ8+emjJlym1nAQAAAGAtNiOnk/5uICMjQ97e3kpJSVGdOnXyMleemrGLe2yjcBj+8YdmRwBcYlaPB8yOALhEfJ2mZkcACpVcPWflOnd3d4WHh3MfagAAAAB5zqmyIknPP/+8xo4dqz/++CMv8gAAAACApFu4dfGsWbP0n//8R+XLl1d4eLhKlCjhsHznzp0uCwcAAACg6HK6rHTt2jUPYgAAAACAI6fLyoQJE/IiBwAAAAA4cLqsXLdjxw7t2bNHNptNtWrVUoMGDVyZCwAAAPlofeL+fN1ezL3V8nV7zoiLi9OZM2e0cuVKs6MUeU5fYH/8+HG1bNlS//jHPzR8+HANGzZMjRo1UqtWrXTixIm8yAgAAIAi7o033lDJkiWVkZFhH7tw4YI8PDzUokULh7kbN26UzWbTzz//nN8x4WJOl5UnnnhC586d0+7du/XHH3/o9OnT2rVrl86dO6fhw4fnRUYAAAAUcTExMbpw4YK2b99uH9u4caOCg4P13Xff6dKlS/bxpKQklS9fXtWrV3dqG5mZmcrKynJZZtw+p8vKmjVrNHfuXNWsWdM+VqtWLb3++uv6/PPPXRoOAAAAkKQaNWqofPnySkpKso8lJSWpS5cuqlKlirZs2eIwHhMTo9OnTys2NlZlypRR8eLF1b59e+3f/9/T3RYuXKjSpUvr008/Va1ateTl5aXDhw9n2/aOHTtUrlw5TZ06NU/3Edk5XVaysrLk4eGRbdzDw4MmCgAAgDwTHR2t9evX29+vX79e0dHRioqKso9fuXJFW7duVUxMjOLi4rR9+3atWrVKW7dulWEY6tChg65evWpfx6VLlzRt2jS988472r17t8qVK+ewzaSkJLVq1UoTJ07Uc889lz87Cjuny0rLli315JNP6rfffrOPHT16VCNHjlSrVq1cGg4AAAC4Ljo6Wps3b1ZGRobOnz+v5ORk3XPPPYqKirIfcdm2bZsuX76su+++W6tWrdI777yjFi1aqH79+lqyZImOHj3qcOH81atXNWfOHEVGRqpGjRoOzxD85JNPdN9992nu3LkaMmRIPu8tpFsoK6+99prOnz+vihUrqkqVKqpataoqVaqk8+fPa/bs2XmREQAAAFBMTIwuXryo7777Ths3blT16tVVrlw5RUVF6bvvvtPFixeVlJSksLAw7du3T+7u7mrSpIn98wEBAapRo4b27NljH/P09FS9evWybeubb75Rjx49tGjRIj344IP5sn/IzulbF4eGhmrnzp1KTEzU3r17ZRiGatWqpdatW+dFPgAAAECSVLVqVd1xxx1av369Tp8+raioKElScHCwKlWqpM2bN2v9+vVq2bKlDMPIcR2GYchms9nf+/j4OLy/rkqVKgoICND8+fPVsWNHeXp65s1O4aacPrJy3b333qsnnnhCw4cPp6gAAAAgX8TExCgpKUlJSUmKjo62j0dFRemLL77Qtm3bFBMTo1q1aikjI0PffPONfc6pU6f0888/O9wo6kYCAwO1bt06HThwQL169XK4zgX555bKytq1a9WpUyf7aWCdOnXSV1995epsAAAAgIOYmBht2rRJKSkp9iMr0rWy8vbbb+vPP/9UTEyMqlWrpi5dumjgwIHatGmTvv/+ez388MOqUKGCunTpkqttlStXTuvWrdPevXv14IMPOjzjBfnD6dPAXnvtNY0cOVL333+/nnzySUnXLmTq0KGDZsyYoWHDhrk8JAAAAPKWlZ8o/1cxMTG6fPmy7rzzTgUFBdnHo6KidP78eVWpUkWhoaGSpAULFujJJ59Up06ddOXKFd1zzz1avXp1jne2vZHg4GCtW7dO0dHReuihh/T+++/Lzc3N5fuFnNmMG53QdwMVKlTQ2LFjs5WS119/XVOnTnW4S5hVzdi1zewIgEsM//hDsyMALjGrxwNmRwBcIr5OU7MjAIWK06eBnTt3Tu3atcs23qZNG507d84loQAAAADA6bJy3333acWKFdnGP/nkE3Xu3NkloQAAAADA6WtW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3nvvPbm5uWnIkCGaPHky12qbwOmywlPqAQAAkN98fX3l6+urlStXqmnTpvLy8spx3sSJE/XSSy/p5Zdf1uzZs/XQQw/p8OHD8vf319GjR9WhQwfFxcVp8eLF2rt3rwYOHChvb28lJCTY17Fo0SL1799f33zzjbZv367HHntM4eHhGjhwYD7tLa5zuqz07ds3L3IAAAAAN+Tu7q6FCxdq4MCBeuONN9SwYUNFRUWpd+/eqlevnn1eXFycHnzwQUnSCy+8oNmzZ+vbb79Vu3btNGfOHIWGhuq1116TzWbTnXfeqd9++01jxozR+PHjVazYtSskQkND9eqrr8pms6lGjRr68ccf9eqrr1JWTOD0NSuSdODAAT3//PN68MEHdfz4cUnSmjVrtHv3bpeGAwAAAK7r0aOHfvvtN61atUpt27ZVUlKSGjZsqIULF9rn/LW4lChRQiVLlrT/vrpnzx41a9bM4XSu5s2b68KFCzpy5Ih9rGnTpg5zmjVrpv379yszMzMP9w45cbqsbNiwQXXr1tU333yj5cuX68KFC5KkH374QRMmTHB5QAAAAOA6b29v3XvvvRo/fry2bNmiuLg4h99B//d6apvNpqysLEmSYRjZrju5fpdbrkexJqfLyjPPPKMpU6YoMTFRnp6e9vGYmBhuGwcAAIB8VatWLV28eDHXc7ds2eLwGI4tW7aoZMmSqlChgn1s27ZtDp/btm2bqlWrJjc3N9eERq45XVZ+/PFHdevWLdt42bJlderUKZeEAgAAAP7q1KlTatmypd577z398MMPOnjwoD788EO99NJL6tKlS67WMXToUP3666964okntHfvXn3yySeaMGGC4uPj7derSNKvv/6q+Ph47du3T0uXLtXs2bP15JNP5tWu4SacvsC+dOnSSktLU6VKlRzGk5OTHRopAAAACo68eKK8K/n6+qpJkyZ69dVXdeDAAV29elWhoaEaOHCgnn322Vyto0KFClq9erVGjx6t+vXry9/fX/3799fzzz/vMC82NlaXL19W48aN5ebmpieeeEKPPfZYXuwW/obTZaVPnz4aM2aMPvzwQ/s5gJs3b9aoUaMUGxubFxkBAABQxHl5eWnatGmaNm3aDef89fSu686cOePwPioqSt9+++1Nt+Xh4aGZM2dq7ty5t5QVruN0WZk6dari4uJUoUIFGYahWrVqKTMz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7HJ9Gtg333yjzz//3GFs8eLFqlSpksqVK6fHHntM6enpLg8IAAAAoGjK9ZGVhIQERUdHq3379pKkH3/8Uf3791dcXJxq1qypl19+WeXLl1dCQkJeZXWZSiX8zI4AJ/gHFDc7AnKpUokMsyMgly6V8/77SbCE4iXczI6AIiJz52/5uj23huXzdXu5kZSUpJiYGJ0+fVqlS5fWwoULNWLECJ05cyZP1o+/l+uykpKSosmTJ9vf//vf/1aTJk309ttvS5JCQ0M1YcKEAlFWULD8Uib7rbIB3J7iQX+aHQEAnBYXF6dFixZp0KBBeuONNxyWDR06VHPnzlXfvn21cOFCl2yvV69e6tChg0vWhVuT67Jy+vRpBQUF2d9v2LBB7dq1s7//xz/+oV9//dW16fLIwYtnzY4AAACAWxAaGqp///vfevXVV+Xj4yNJ+vPPP7V06VKFhYW5dFs+Pj72bcAcub5mJSgoSAcPHpQkXblyRTt37lSzZs3sy8+fPy8PDw/XJwQAAAD+v4YNGyosLEzLly+3jy1fvlyhoaFq0KCBfcwwDL300kuqXLmyfHx8VL9+fX300UcO61q9erWqV68uHx8fxcTE6NChQw7LFy5cmO10rVWrVikiIkLe3t4KDAxU9+7d7cvee+89RUREqGTJkgoODlafPn10/Phx1+18EZTrstKuXTs988wz2rhxo8aOHavixYurRYsW9uU//PCDqlSpkichAQAAgOseffRRLViwwP5+/vz56tevn8Oc559/XgsWLNDcuXO1e/dujRw5Ug8//LA2bNggSfr111/VvXt3dejQQSkpKRowYICeeeaZm273s88+U/fu3dWxY0clJydr7dq1ioiIsC+/cuWKJk+erO+//14rV67UwYMHFRcX57odL4JyfRrYlClT1L17d0VFRcnX11eLFi2Sp6enffn8+fPVpk2bPAkJAAAAXPfII49o7NixOnTokGw2mzZv3qx///vfSkpKkiRdvHhRM2bM0Lp16+xnAlWuXFmbNm3Sm2++qaioKM2dO1eVK1fWq6++KpvNpho1aujHH3/UP//5zxtud+rUqerdu7cmTpxoH6tfv779678WpsqVK2vWrFlq3LixLly4IF9fXxf/KRQNuS4rZcuW1caNG3X27Fn5+vrKzc3x7iQffvghfwkAAADIc4GBgerYsaMWLVokwzDUsWNH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a9SokcaPH5/jvn366ae6++67NXr0aNWoUUPVq1dX165dNXv2bId5//d//6dGjRrJ29tblStX1sSJE5WRkWFfvn//ft1zzz3y9vZWrVq1lJiYKJvNppUrV0rK+TS2lJQU2Ww2HTp0yD62ZcsW3XPPPfLx8VFoaKiGDx+uixcv2pdXrFhRL7zwgvr166eSJUsqLCxMb731lkPWI0eOqHfv3vL391eJEiUUERGhb775Jtf7AgCAK1BWAOSLZcuWqUaNGqpRo4YefvhhLViwQIZh2Jd/9tln6t69uzp27Kjk5GStXbtWERERkqTly5frjjvu0KRJk5SWlqa0tLRs669Ro4YaNWqkJUuWOIy///776tOnT7ajKZGRkZo5c6ZKlSplX+eoUaPUr18//fTTT/ruu+/sc3/44QclJycrLi4ux30LDg7W7t27tWvXrhvu/xdffKGHH35Yw4cP108//aQ333xTCxcu1NSpUyVJWVlZ6t69u9zc3LRt2za98cYbGjNmzM3/UHPw448/qm3bturevbt++OEHLVu2TJs2bdKwYcMc5k2fPl0RERFKTk7W0KFDNWTIEHvRu3DhgqKiovTbb79p1apV+v777/X0008rKysrV/sCAIDLGACQDyIjI42ZM2cahmEYV69eNQIDA43ExET78mbNmhkPPfTQDT8fHh5uvPrqqw5jCxYsMPz8/OzvZ8yYYVSuXNn+ft++fYYkY/fu3YZhGMb69esNScbp06dz/Px17du3N4YMGWJ/P2LECCM6OvqG2S5cuGB06NDBkGSEh4cbvXr1MubNm2f8+eef9jktWrQwXnjhBYfPvfvuu0ZISIhhGIbxxRdfGG5ubsavv/5qX/75558bkowVK1bkmN8wDCM5OdmQZBw8eNAwDMN45JFHjMcee8xhOxs3bjSKFStmXL582TCMa3+WDz/8sH15VlaWUa5cOWPu3LmGYRjGm2++aZQsWdI4depUjvv7d/sCAICrcGQFQJ7bt2+fvv32W/Xu3VuS5O7url69emn+/Pn2OSkpKWrVqtVtbad37946fPiwtm3bJklasmSJ7rrrLtWqVcup9QwcOFBLly7Vn3/+qatXr2rJkiXq16/fDeeXKFFCn332mf7zn//o+eefl6+vr5566ik1btxYly5dkiTt2LFDkyZNkq+vr/01cOBApaWl6dKlS9qzZ4/CwsJ0xx132NfbrFkzp/8MduzYoYULFzpsp23btsrKytLBgwft8+rVq2f/2mazKTg4WMePH5d07e+iQYMG8vf3v+E2brYvAAC4irvZAQAUfvPmzVNGRoYqVKhgHzMMQx4eHjp9+rTKlCkjHx+f295OSEiIYmJi9P7776tp06ZaunSpBg0a5PR6OnfuLC8vL61YsUJeXl5KT09Xjx49/vZzVapUUZUqVTRgwAA999xzql69upYtW6ZHH31UWVlZmjhxov06nL/y9vZ2OCXuuv89da1YsWv/vvTXuVevXnWYk5WVpUGDBmn48OHZ1hcWFmb/2sPDI9u2rp/m9Xd/F3+3LwAAuAplBUCeysjI0OLFizV9+nS1adPGYVmPHj20ZMkSDRs2TPXq1dPatWv16KOP5rgeT09PZWZm/u32HnroIY0ZM0YPPvigDhw4YD+a48w63d3d1bdvXy1YsEBeXl7q3bu3ihcv/rfb/quKFSuqePHi9gvbGzZsqH379qlq1ao5zq9Vq5ZSU1P122+/qXz58pKkrVu3OswpW7asJCktLU1lypSRdO0oyF81bNhQu3fvvuF2cqNevXp655139Mcff+R4dOXv9gUAAFehrADIU59++qlOnz6t/v37259vct3999+vefPmadiwYZowYYJatWqlKlWqqHfv3srIyNDnn3+up59+WtK1X/6//vpr9e7dW15eXgoMDMxxe927d9eQIUM0ZMgQxcTEOBzN+V8VK1bUhQsXtHbtWtWvX1/Fixe3l5IBAwaoZs2akqTNmzffdB8TEhJ06dIldejQQeHh4Tpz5oxmzZqlq1ev6t5775UkjR8/Xp06dVJoaKgeeOABFStWTD/88IN+/PFHTZkyRa1bt1aNGjUUGxur6dOn69y5c3ruuecctlO1alWFhoYqISFBU6ZM0f79+zV9+nSHOWPGjFHTpk31+OOPa+DAgSpRooT27NmjxMTEbHcnu5EHH3xQL7zwgrp27app06YpJCREycnJKl++vJo1a/a3+wIAgKtwzQqAPDVv3jy1bt06W1GRrh1ZSUlJ0c6dOxUdHa0PP/xQq1at0l133aWWLVs63Cp30qRJOnTokKpUqWI/wpCTUqVKqXPnzvr+++/10EMP3TRbZGSkBg8erF69eqls2bJ66aWX7MuqVaumyMhI1ahRQ02aNLnpeqKiovTLL78oNjZWd955p9q3b69jx47pyy+/VI0aNSRJbdu21aeffqrExET94x//UNOmTTVjxgyFh4dLunaK14oVK5Senq7GjRtrwIAB2e6u5eHhoaVLl2rv3r2qX7++/vnPf2YrB/Xq1dOGDRu0f/9+tWjRQg0aNNC4ceMUEhJy0334K09PT3355ZcqV66cOnTooLp16+rFF1+Um5tbrvYFAABXsRk5nSgNAEWcYRi68847NWjQIMXHx5uWw2azacWKFeratatpGQAAMAungQHA/zh+/LjeffddHT169IbX0AAAgLxHWQGA/xEUFKTAwEC99dZb9gvZAQBA/uM0MAAAAACWxAX2AAAAACyJsgIAAADAkigrAAAAACyJsgIAAADAkigrAAAAACyJsgIAAADAkigrAAAAACyJsgIAAADAkv4fU6NCjpyMFoUAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_ = sequence_prob_plot(schedules, ys={}, figsize=(8, 6))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "caveat",
"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.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}